一种在 ArchLinux 下使用 CPU 进行训练和推理的办法
我没有高版本 Nvidia 显卡……没事,用 CPU 代替。
根据 README 文档,我发现了 MacOS 是可以使用 CPU 的,于是我寻思 Linux 应该也可以。
然后,我注意到了 https://github.com/RVC-Boss/GPT-SoVITS/issues/290 https://github.com/RVC-Boss/GPT-SoVITS/issues/165 https://github.com/RVC-Boss/GPT-SoVITS/issues/93。
以下是具体方法:
首先,跟着 README 走:
- 创建环境
conda create -n GPTSoVits python=3.9 conda activate GPTSoVits
- 安装依赖
pip install torchaudio --index-url https://download.pytorch.org/whl/cpu pip install -r requirements.txt
- 安装 FFmpeg。
pacman -S ffmpeg pacman -S libsoxr conda install -c conda-forge 'ffmpeg<7'
- 预训练模型
从 GPT-SoVITS Models 下载预训练模型,并将它们放置在
GPT_SoVITS\pretrained_models中。对于 UVR5(人声/伴奏分离和混响移除,另外),从 UVR5 Weights 下载模型,并将它们放置在
tools/uvr5/uvr5_weights中。中国地区用户可以进入以下链接并点击“下载副本”下载以上两个模型:
对于中文自动语音识别(另外),从 Damo ASR Model, Damo VAD Model, 和 Damo Punc Model 下载模型,并将它们放置在
tools/damo_asr/models中。
这里我稍稍更改了一下安装依赖和安装 FFmpeg 的内容,如果失败了,可以改为原来的。
不过,UVR5 貌似不能在纯 CPU 下使用呢。
「对于中文自动语音识别(另外)」的几个模型可以不下载()。
然后,进入 DIY 环节
像 https://github.com/RVC-Boss/GPT-SoVITS/issues/290 https://github.com/RVC-Boss/GPT-SoVITS/issues/165 https://github.com/RVC-Boss/GPT-SoVITS/issues/93 一样,修改项目文件。
设含有 README.md、LICENSE 的文件夹为 ./,只需要修改 ./GPT_SoVITS/s1_train.py 和 ./GPT_SoVITS/s2_train.py 即可。
# s1_train.py
accelerator="gpu",
# 改为
accelerator="cpu",
devices=-1,
# 改为
devices=1
strategy = "auto" if torch.backends.mps.is_available() else DDPStrategy(
process_group_backend="nccl" if platform.system() != "Windows" else "gloo"
),
# 改为
strategy = "auto" if torch.backends.mps.is_available() else DDPStrategy(
process_group_backend="nccl" if platform.system() != "Windows" and torch.cuda.is_available() else "gloo"
), # mps 不支持多节点训练
# s2_train.py
assert torch.cuda.is_available() or torch.backends.mps.is_available(), "Only GPU training is allowed."
if torch.backends.mps.is_available():
n_gpus = 1
else:
n_gpus = torch.cuda.device_count()
# 改为
n_gpus = torch.cuda.device_count()
if n_gpus == 0:
n_gpus = 1
dist.init_process_group(
backend = "gloo" if os.name == "nt" or torch.backends.mps.is_available() else "nccl",
init_method="env://",
world_size=n_gpus,
rank=rank,
)
# 改为
dist.init_process_group(
backend = "gloo" if os.name == "nt" or torch.cuda.is_available() == False or torch.backends.mps.is_available() else "nccl",
init_method="env://",
world_size=n_gpus,
rank=rank,
)
除此之外,将所有的 to("mps") 改为 to("cpu") 即可。
n_gpu 的值代表开几个进程训练,在我的小破电脑上,调成更高的数值并未显著提高训练速度,但显著提高了内存占用……。
修改完后输入 python webui.py 即可正常使用,有人做了详细教程。
注:
- 显示「很遗憾您这没有能用的显卡来支持您训练」是正常的,不用理会。
- batchsize 不建议调高,调高容易爆内存……我调成 1 都需要 4~6 G 内存。
我提交了一个 draft pr https://github.com/RVC-Boss/GPT-SoVITS/pull/376 ,希望有大佬帮忙修修。