本地部署vits
所参考的教程视频是云端部署的,我买了4090,想当然地认为直接部署在本地会更好。
我错了,在windows上搞和在linux服务器上搞不是一个概念。windows上难到我折腾了一天,晚上做噩梦了还是没搞定,第二天早上才完全搞定。下面趁我还没忘干净前,先记录下我记住的步骤。
第一步 clone
克隆git项目。https://github.com/Plachtaa/VITS-fast-fine-tuning
随便用客户端或者是git clone指令都可以。我用的客户端。
然后就可以参照里面的local.md说明书了。当然,照抄会遇到各种问题。
第二步 装新python
“Make sure you have installed `Python>=3.6, <=3.8`, CMake & C/C++ compilers; "
python我选的是3.8。这个好说,大家都知道怎么装python。我电脑原本就有python 3.10,在安装之后,为了避免串扰,我需要创建一个虚拟环境,并激活它。之后,每次在这个项目使用python时,都要激活它。
在项目根目录下,打开命令行(我没有用powershell,就用的windows cmd),第一行代码创建虚拟环境,第二行激活它。如果工作中断,之后只需要输入第二行。env是虚拟环境的名字,也许我当初可以选一个好一点的名字,env38之类的,但已经创建了,就不改了。
那么,cmake和c++compiler怎么装呢?
可以参考这个链接一下都装完了,顺便装个MinGW:https://perso.uclouvain.be/allan.barrea/opencv/building_tools.html
我当时不是按照这个网页装的,各个东西是在不同时期分别装的,但方法和里面说的一样。记得设置系统变量到Path,不要动不动就往system32下扔。
第三步 大战pip
按理说pip install不会有什么问题,但实际上问题大了。
“pip install -r requirements”,谁都会,对吧?实际上这样做不行。
最大的问题是那个pyopenjtalk库。前置库里要求版本==0.1.3,但是这个版本在我这里死活编译不过去,一到构建whl的地方就会报错,大概报错内容类似于:
Building wheels for collected packages: pyopenjtalk
Building wheel for pyopenjtalk (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for pyopenjtalk (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> 【108 lines of output】
fatal: not a git repository (or any of the parent directories): .git
诸如此类,注意这个是报错的开头,报错时直接看到的是回显,得网上翻到最初才输入pip install的地方才能看到这一段。是我没装gcc或者cmake吗,不是,这些我都装好了,并且我在命令行输入的时候,都能出来,而不是“无法识别为程序”之类的报错信息。而且,我单独pip install pyopenjtalk,让他构建最新版毫无问题。只不过,到后面用最新版会导致程序运行失败,那个报错会说binary has changed之类的,一看就是硬换新版不行。总之,我就是拿不到这个0.1.3的whl文件,谷歌也搜了,无果。
最后我的解决是,用0.1.4就行了,把requirements里的==0.1.3改成0.1.4,至少在我这是能运行的。如果你那边没有这个错误就不用改了。
当然,这个是最严重的,但却不是最先遇到的报错。
Could not fetch URL https://pypi.org/simple/pyopenjtalk/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pyopenjtalk/ (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1124)'))) - skipping
更有可能是栽在类似这种的Max retries exceeded with url上。超过最大尝试次数只是结果,具体造成它的原因我遇到了两种。
一种是没有关闭系统代理(浏览器能打开谷歌),必须要关闭了(让他打不开)才能继续,这种报错里会明确提出类似cannot connect to proxy之类的字样,很好认,对应的报错我也是google出来的。
另一种是因为SSL验证失败。此时报错就是上面那种明确说出ssl问题的。这种情况下,需要信任域名。把原本简单的pip install -r requirements.txt改成:
pip install -r requirements.txt --trusted-host=pypi.python.org --trusted-host=pypi.org --trusted-host=files.pythonhosted.org
这样就可以了。
后面安装的过程其实问题不大,无论是安装cuda,还是装imageio,一路按照文档操作下去就行了。
到wget这里会有问题。windows没有wget。这里解决思路有两种:
一种是去tm的wget。我直接去浏览器手动下载那个链接的文件。这种在解决单个的wget任务上是最快的。
另一种是安装wget。可以在这里找到:https://gnuwin32.sourceforge.net/packages/wget.htm,记得装完之后让Path指向exe所在之处。这样还不够,huggingface会拒绝直接的wget,需要在后面加参数伪造成浏览器才能下载,像这样:
wget https://huggingface.co/datasets/Plachta/sampled_audio4ft/resolve/main/sampled_audio4ft_v2.zip --user-agent="Mozilla/5.0 (X11;U;Linux i686;en-US;rv:1.9.0.3) Geco/2008092416 Firefox/3.0.3" --no-check-certificate
当然后面那条unzip也是有一样的问题,windows没有unzip指令。手动解压即可,因为这个用的不多,没必要装unzip for windows。
继续按照文档进行,到后面选择预训练模型时,看清了先给出的步骤是linux的,windows的说明在后面。我的cje三语模型使用时出了点问题,暂时还没查出来到底是源数据还是模型的问题,后面我用的C的模型。记得下载之后要改名覆盖,不要保留原本的D_trilingual、config.json这样的名字。三个不能共存,用的时候想清楚用哪个,避免半途换路子。
准备素材的时候,按照文档操作即可,除了注意如果原本就有声音包的话,不要压缩了,因为到头来还是要解压缩。注意视频、长音频文件本身对文件名有要求,不能任意起。
我在第一轮准备训练的时候,可能是因为素材里有过短的音频,每次一训练就报一个少见的dim不能为0的错误。后来我整个清理了一番,把标注文件、音频文件都删了,从CJE换成了C的,就好了。目前尚不确定到底是CJE有问题,我设置有残留问题,还是我的音频有问题。但总之,我能开始训练了。
