GPT-SoVITS icon indicating copy to clipboard operation
GPT-SoVITS copied to clipboard

一种在 ArchLinux 下使用 CPU 进行训练和推理的办法

Open lalala-233 opened this issue 1 year ago • 0 comments

我没有高版本 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 即可正常使用,有人做了详细教程

注:

  1. 显示「很遗憾您这没有能用的显卡来支持您训练」是正常的,不用理会。
  2. batchsize 不建议调高,调高容易爆内存……我调成 1 都需要 4~6 G 内存。

我提交了一个 draft pr https://github.com/RVC-Boss/GPT-SoVITS/pull/376 ,希望有大佬帮忙修修。

lalala-233 avatar Feb 03 '24 07:02 lalala-233