前言
本文记录了在RTX 5080显卡上部署GPT-SoVITS的完整过程。由于Windows上PyTorch还未支持CUDA 12.8,所以采用WSL2方案来实现部署。
环境准备
WSL2安装和配置
- 打开PowerShell(管理员)
- 执行:
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
验证部署
- 在Windows浏览器中访问:
http://localhost:9880
- 上传参考音频(3-10秒)
- 输入参考文本和目标文本
- 点击"合成语音"测试功能
故障排除
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服务器修改指南
代码修改
- 在
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)
注意事项
- 参考音频需要在3-10秒之间
- 语言参数需要匹配
- WSL2环境下使用原生文件系统路径
- 确保模型文件路径正确
- 若出现NLTK库问题,需要下载对应的包,例如: import nltk nltk.download('averaged_perceptron_tagger_eng')
技术要点说明
- 为什么使用WSL2:因为Windows版PyTorch目前还不支持CUDA 12.8,而WSL2可以完美支持
- 为什么需要修改代码:
- PyTorch 2.6+改变了
weights_only
参数的默认值 - 项目代码中的类型注解需要更新以支持新版Python
- PyTorch 2.6+改变了
- 为什么要在WSL2原生文件系统中操作:可以获得更好的I/O性能
- 为什么基础模型建议在Windows下载:避免可能的网络问题,Windows下载更稳定
参考资料
- GPT-SoVITS项目:https://github.com/RVC-Boss/GPT-SoVITS
- 项目模型指南:https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/dkxgpiy9zb96hob4#nVNhX
- 预训练模型:https://huggingface.co/lj1995/GPT-SoVITS/tree/main
- PyTorch nightly构建:https://pytorch.org/get-started/locally/
- WSL2文档:https://learn.microsoft.com/zh-cn/windows/wsl/
评论区