前言

本文记录了在RTX 5080显卡上部署GPT-SoVITS的完整过程。由于Windows上PyTorch还未支持CUDA 12.8,所以采用WSL2方案来实现部署。

环境准备

WSL2安装和配置

  1. 打开PowerShell(管理员)
  2. 执行:
wsl --install Ubuntu

注意:建议在WSL2的原生文件系统中操作,而不是在mounted目录(/mnt/)下,这样可以获得更好的性能。

系统依赖安装

# 更新包管理器
sudo apt update

# 安装基础开发工具
sudo apt install -y build-essential cmake
sudo apt install -y ffmpeg
sudo apt install -y libsox-dev
sudo apt install -y git-lfs
sudo apt install -y unzip

# 如果需要编辑代码
sudo apt install -y nano

Python环境配置

# 创建项目目录(注意:使用WSL2原生文件系统以获得更好性能)
cd ~
mkdir projects
cd projects

# 克隆项目
git clone https://github.com/RVC-Boss/GPT-SoVITS.git
cd GPT-SoVITS

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 安装PyTorch (nightly版本,支持CUDA 12.8)
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128

# 安装项目依赖
pip install -r requirements.txt

代码修改

1. 修复类型注解问题

编辑 GPT_SoVITS/AR/modules/patched_mha_with_cache.py

sed -i '1s/^/from typing import Tuple\n/' GPT_SoVITS/AR/modules/patched_mha_with_cache.py

2. 修复PyTorch 2.6+兼容性问题

inference_webui.py文件顶部添加:

from torch.serialization import add_safe_globals
from utils import HParams
add_safe_globals([HParams])

并修改模型加载部分:

dict_s2 = torch.load(sovits_path, map_location="cuda", weights_only=False)

模型下载

1. 基础模型

lj1995/GPT-SoVITS 下载以下文件(建议在Windows下载后复制到WSL):

# 在Windows中下载这些文件:
- gsv-v2final-pretrained/ (文件夹)
- s2G2333k.pth
- s2D2333k.pth
- s1bert25hz-5kh-longer-epoch=12-step=369668.ckpt

# 在WSL2中创建目录并复制文件
mkdir -p ~/projects/GPT-SoVITS/GPT_SoVITS/pretrained_models/

# 假设Windows下载的文件在 C:\Users\用户名\Downloads,复制到WSL2:
cp -r /mnt/c/Users/用户名/Downloads/gsv-v2final-pretrained ~/projects/GPT-SoVITS/GPT_SoVITS/pretrained_models/
cp /mnt/c/Users/用户名/Downloads/s2G2333k.pth ~/projects/GPT-SoVITS/GPT_SoVITS/pretrained_models/
cp /mnt/c/Users/用户名/Downloads/s2D2333k.pth ~/projects/GPT-SoVITS/GPT_SoVITS/pretrained_models/
cp /mnt/c/Users/用户名/Downloads/s1bert25hz-5kh-longer-epoch=12-step=369668.ckpt ~/projects/GPT-SoVITS/GPT_SoVITS/pretrained_models/

2. 中文模型

# 确保在正确目录
cd ~/projects/GPT-SoVITS/GPT_SoVITS/pretrained_models/

# 使用git-lfs下载模型
git lfs install
git clone https://huggingface.co/hfl/chinese-roberta-wwm-ext-large
git clone https://huggingface.co/TencentGameMate/chinese-hubert-base

# 在每个模型目录中拉取LFS文件
cd chinese-roberta-wwm-ext-large
git lfs pull
cd ../chinese-hubert-base
git lfs pull

3. 目录结构确认

最终的目录结构应该是:

~/projects/GPT-SoVITS/
└── GPT_SoVITS/
    └── pretrained_models/
        ├── chinese-roberta-wwm-ext-large/
        ├── chinese-hubert-base/
        ├── gsv-v2final-pretrained/
        ├── s2G2333k.pth
        ├── s2D2333k.pth
        └── s1bert25hz-5kh-longer-epoch=12-step=369668.ckpt

启动服务

# 进入项目目录
cd ~/projects/GPT-SoVITS

# 激活虚拟环境(如果还未激活)
source venv/bin/activate

# 启动WebUI
python webui.py --host 0.0.0.0 --port 9880

验证部署

  1. 在Windows浏览器中访问:http://localhost:9880
  2. 上传参考音频(3-10秒)
  3. 输入参考文本和目标文本
  4. 点击"合成语音"测试功能

故障排除

1. 验证CUDA是否正确安装

python3 -c "import torch; print(f'PyTorch version: {torch.__version__}\nCUDA available: {torch.cuda.is_available()}\nCUDA version: {torch.version.cuda}\nGPU device: {torch.cuda.get_device_name(0)}')"

输出应该显示:

  • PyTorch nightly版本
  • CUDA 12.8
  • GPU设备为RTX 5080

2. 模型加载错误

检查:

  • 模型文件是否完整下载
  • 目录结构是否正确
  • git-lfs是否正确安装并拉取了文件

3. 文件权限问题

如遇到权限问题:

sudo chown -R $USER:$USER ~/projects/GPT-SoVITS

GPT-SoVITS API服务器修改指南

代码修改

  1. GPT_SoVITS/TTS_infer_pack/TTS.py 中添加PyTorch 2.6+兼容性支持:
# 在文件顶部导入部分添加
from torch.serialization import add_safe_globals
from utils import HParams
add_safe_globals([HParams])

# 修改init_vits_weights方法中的torch.load调用
def init_vits_weights(self, weights_path: str):
    print(f"Loading VITS weights from {weights_path}")
    self.configs.vits_weights_path = weights_path
    dict_s2 = torch.load(weights_path, map_location=self.configs.device, weights_only=False)  # 添加weights_only=False
    # ... 其余代码保持不变

配置文件

修改 GPT_SoVITS/configs/tts_infer.yaml

custom:
  bert_base_path: GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large
  cnhuhbert_base_path: GPT_SoVITS/pretrained_models/chinese-hubert-base
  device: cuda
  is_half: true
  t2s_weights_path: GPT_weights/crs-e20.ckpt         # 你的GPT模型路径
  version: v2
  vits_weights_path: SoVITS_weights/crs_e25_s2600.pth  # 你的SoVITS模型路径

启动API服务

python api_v2.py -a 0.0.0.0 -p 9880 -c GPT_SoVITS/configs/tts_infer.yaml

API调用示例

基础调用

curl "http://localhost:9880/tts?\
text=こんにちは、世界&\
text_lang=ja&\
ref_audio_path=/home/syd2333/projects/GPT-SoVITS/reference/reference.wav&\
prompt_lang=ja&\
text_split_method=cut5&\
media_type=wav" \
--output output.wav

带参数调用(推荐配置)

curl "http://localhost:9880/tts?\
text=こんにちは、世界&\
text_lang=ja&\
ref_audio_path=/home/syd2333/projects/GPT-SoVITS/reference/reference.wav&\
prompt_lang=ja&\
text_split_method=cut5&\
media_type=wav&\
top_k=5&\
top_p=0.8&\
temperature=1.0&\
speed_factor=1.2" \
--output output.wav

浏览器直接访问URL

http://localhost:9880/tts?text=こんにちは、世界&text_lang=ja&ref_audio_path=/home/syd2333/projects/GPT-SoVITS/reference/reference.wav&prompt_lang=ja&text_split_method=cut5&media_type=wav&temperature=1.0&speed_factor=1.1

关键参数说明

  • text: 要合成的文本
  • text_lang: 文本语言(ja/zh/en等)
  • ref_audio_path: 参考音频路径
  • prompt_lang: 参考音频的语言
  • text_split_method: 文本分割方法(推荐cut5)
  • media_type: 输出格式(wav/ogg/aac)
  • top_k: 采样时保留的最高概率的token数(建议5-20)
  • top_p: 采样概率阈值(建议0.6-1.0)
  • temperature: 采样温度(建议0.8-1.2)
  • speed_factor: 语速控制(建议0.8-1.5)

注意事项

  1. 参考音频需要在3-10秒之间
  2. 语言参数需要匹配
  3. WSL2环境下使用原生文件系统路径
  4. 确保模型文件路径正确
  5. 若出现NLTK库问题,需要下载对应的包,例如: import nltk nltk.download('averaged_perceptron_tagger_eng')

技术要点说明

  1. 为什么使用WSL2:因为Windows版PyTorch目前还不支持CUDA 12.8,而WSL2可以完美支持
  2. 为什么需要修改代码:
    • PyTorch 2.6+改变了weights_only参数的默认值
    • 项目代码中的类型注解需要更新以支持新版Python
  3. 为什么要在WSL2原生文件系统中操作:可以获得更好的I/O性能
  4. 为什么基础模型建议在Windows下载:避免可能的网络问题,Windows下载更稳定

参考资料