一款神经网络音频编解码器 可用于影视角色台词二创
Autodl 部署GPT-sovits
📋 任务概述
目标:使用原音频训练声音模型,生成新台词语音
原台词:
我病了三年,四万块钱一瓶的正版药我吃了三年,房子吃没了,家人被我吃垮了,现在好不容易有了便宜药,你们非说他是假药,那药假不假,我们能不知道吗?那药才买五百块钱一瓶,药贩子根本没赚钱,谁家能不遇上个病人,你能保证你这一辈子不生病吗,啊?你们把他抓走了,我们都得等死,我不想死,我想活着
新台词:
我失业了三年,四万块钱一个月的房贷我扛了三年,房子扛没了,家人被我啃垮了,现在好不容易有了openclaw,你们非说他没用,龙虾有没有用,我们能不知道吗?那软件是开源的,原作者根本没赚钱,谁家能保证自己不失业,你能保证你这一辈子不被AI取代吗,啊?你们把AI泡沫戳破了,我们都得等死,我不想死,我想活着
第一部分:租用AutoDL实例
AutoDL 4090 社区镜像关键字RVC-Boss/GPT-sovits
1.4 获取连接信息
实例启动后,在AutoDL控制台获取:
- SSH连接命令(如:
ssh -p 12345 root@region-x.autodl.pro)
- 密码
第二部分:环境配置
2.1 连接实例
2.2 安装依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| apt update && apt upgrade -y
apt install -y ffmpeg git
mkdir -p /root/workspace cd /root/workspace
git clone https://gitee.com/RVC-Boss/GPT-SoVITS.git
cd GPT-SoVITS
|
2.3 使用Conda环境
1 2 3 4 5 6 7 8 9 10 11 12 13
| which conda
conda create -n GPTSoVits python=3.10 -y conda activate GPTSoVits
若需conda init:
```bash conda init bash source ~/.bashrc conda activate GPTSoVits
|
安装PyTorch(根据CUDA版本选择)
查看CUDA版本
nvidia-smi | grep “CUDA Version”
显示
1
| | NVIDIA-SMI 580.105.08 Driver Version: 580.105.08 CUDA Version: 13.0 |
|
查看pytorch
1
| python -c "import torch; print(torch.__version__)"
|
安装项目依赖
1 2
| cd /root/workspace/GPT-SoVITS bash install.sh --device CU128 --source ModelScope
|
torch版本未指定问题
1 2 3 4 5 6
| pip uninstall torch torchvision torchaudio triton
pip cache purge
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
|
2.4 下载预训练模型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
mkdir -p GPT_SoVITS/pretrained_models mkdir -p GPT_SoVITS/text mkdir -p tools/UVR5/UVR5_weights
pip install modelscope=1.11.0
modelscope download iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch
mv ~/.cache/modelscope/hub/iic/* ~/GPT-SoVITS/tools/asr/models
|
第三部分:准备训练数据
3.1 上传音频文件
方法1:使用AutoDL文件管理器(推荐)
- 在AutoDL控制台打开”文件管理”
- 创建目录
/root/workspace/audio/
- 上传音频文件
output.wav
方法2:使用SCP上传
1 2
| scp -P <端口> output.wav root@<地址>:/root/workspace/audio/
|
方法3:使用rclone或其他工具
3.2 音频要求
- 格式:WAV(推荐)、MP3、FLAC
- 采样率:建议16kHz以上,24kHz最佳
- 声道:单声道
- 时长:建议1-5分钟的清晰人声
- 质量:无背景音乐、无噪音、无混响
3.3 音频预处理(可选)
如果音频有背景音乐或噪音,需要先处理:
1 2 3 4 5 6 7 8
| cd /root/workspace/GPT-SoVITS
python webui.py zh_CN
|
第四部分:训练模型
4.1 方案A:快速推理(零样本,无需训练)
适合快速测试,效果可能不如微调:
1 2 3 4 5 6 7
| cd /root/workspace/GPT-SoVITS python webui.py
|
4.2 方案B:微调训练(推荐,效果更好)
步骤1:配置AutoDL端口映射
- 在AutoDL控制台 → 自定义服务 → 开启端口映射
- 添加端口
9874(WebUI默认端口)
- 获取访问链接
1
| ssh -p 19612 -L 9874:localhost:9874 root@connect.bjb2.seetacloud.com
|
步骤2:启动WebUI
1 2 3 4 5 6 7 8
| cd /root/workspace/GPT-SoVITS conda activate GPTSoVits
python webui.py --listen 0.0.0.0
python webui.py --listen 0.0.0.0 --port 9874
|
package issues
1 2
| pip install opencc==1.1.6 pip install torchcodec
|
use pytorch 2.8
1 2
| pip uninstall torch torchaudio torchvision torchcodec -y pip install torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0
|
步骤3:使用WebUI训练
打开WebUI:浏览器访问端口映射地址
音频切分(如果音频较长):
- 进入
0b-音频切片工具
- 上传音频,设置切片参数(建议每段10-15秒)
- 点击”切分”
语音识别:
- 进入
0c-中文ASR工具
- 选择切分后的音频目录
- 点击”识别”,生成文本标注
文本校对:
- 进入
0d-文本校对工具
- 校对识别结果,确保文本与音频内容一致
- 保存标注文件
训练集格式化:
- 进入
1A-训练集格式化工具
- 选择处理好的音频和标注文件
- 点击”格式化”,生成训练数据
微调训练:
- 进入
1B-微调训练
- 设置训练参数:
- SoVITS训练轮数:建议10-20轮
- GPT训练轮数:建议10-20轮
- 批量大小:根据显存调整(RTX 4090可用8-12)
- 学习率:使用默认值
- 点击”开始训练”
- 等待训练完成(约30分钟-1小时)
推理测试:
- 训练完成后,回到主页
- 选择训练好的模型
- 输入新台词,点击”生成”
- 下载生成的音频
第五部分:命令行训练(高级用户)
如果WebUI不可用,可以使用命令行:
5.1 准备训练数据
1 2 3 4 5 6 7 8 9 10
| mkdir -p /root/workspace/GPT-SoVITS/Data/your_speaker_name
cp /root/workspace/audio/output.wav /root/workspace/GPT-SoVITS/Data/your_speaker_name/
cat > /root/workspace/GPT-SoVITS/Data/your_speaker_name/esd.list << 'EOF' /root/workspace/GPT-SoVITS/Data/your_speaker_name/output.wav|your_speaker_name|我病了三年,四万块钱一瓶的正版药我吃了三年,房子吃没了,家人被我吃垮了,现在好不容易有了便宜药,你们非说他是假药,那药假不假,我们能不知道吗?那药才买五百块钱一瓶,药贩子根本没赚钱,谁家能不遇上个病人,你能保证你这一辈子不生病吗,啊?你们把他抓走了,我们都得等死,我不想死,我想活着 EOF
|
5.2 处理训练数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| cd /root/workspace/GPT-SoVITS conda activate GPTSoVits
python prepare_datasets/1-get-text.py \ --inp_text Data/your_speaker_name/esd.list \ --inp_wav_dir Data/your_speaker_name \ --opt_dir Data/your_speaker_name/processed
python prepare_datasets/2-get-hubert.py \ --inp_text Data/your_speaker_name/processed/esd.list \ --inp_wav_dir Data/your_speaker_name \ --opt_dir Data/your_speaker_name/processed
python prepare_datasets/3-get-semantic.py \ --inp_text Data/your_speaker_name/processed/esd.list \ --inp_wav_dir Data/your_speaker_name \ --opt_dir Data/your_speaker_name/processed
|
5.3 训练SoVITS模型
1 2 3 4 5 6 7 8 9 10 11
| cp configs/s2.json configs/s2_custom.json
python s2_train.py --config configs/s2_custom.json
|
5.4 训练GPT模型
1 2 3 4 5
| cp configs/s1.json configs/s1_custom.json
python s1_train.py --config configs/s1_custom.json
|
5.5 推理生成
1 2 3 4 5 6 7 8
| python inference.py \ --s2_model_path logs/s2/your_model.pth \ --s1_model_path logs/s1/your_model.ckpt \ --ref_audio /root/workspace/audio/output.wav \ --ref_text "我病了三年,四万块钱一瓶的正版药我吃了三年" \ --target_text "我失业了三年,四万块钱一个月的房贷我扛了三年" \ --output_path output.wav
|
第六部分:使用API调用
6.1 启动API服务
1 2 3 4 5 6 7 8
| cd /root/workspace/GPT-SoVITS conda activate GPTSoVits
python api_v2.py --listen 0.0.0.0 --port 9880
nohup python api_v2.py --listen 0.0.0.0 --port 9880 > api.log 2>&1 &
|
6.2 API调用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import requests
url = "http://<实例IP>:9880/tts"
data = { "text": "我失业了三年,四万块钱一个月的房贷我扛了三年,房子扛没了,家人被我啃垮了,现在好不容易有了openclaw,你们非说他没用,龙虾有没有用,我们能不知道吗?那软件是开源的,原作者根本没赚钱,谁家能保证自己不失业,你能保证你这一辈子不被AI取代吗,啊?你们把AI泡沫戳破了,我们都得等死,我不想死,我想活着", "text_lang": "zh", "ref_audio_path": "/root/workspace/audio/output.wav", "prompt_text": "我病了三年,四万块钱一瓶的正版药我吃了三年,房子吃没了,家人被我吃垮了", "prompt_lang": "zh", "top_k": 5, "top_p": 1.0, "temperature": 1.0, "text_split_method": "cut5", "batch_size": 1, "speed_factor": 1.0, "split_bucket": True }
response = requests.post(url, json=data) with open("output.wav", "wb") as f: f.write(response.content)
|
6.3 curl调用示例
1 2 3 4 5 6 7 8 9 10
| curl -X POST "http://<实例IP>:9880/tts" \ -H "Content-Type: application/json" \ -d '{ "text": "我失业了三年,四万块钱一个月的房贷我扛了三年", "text_lang": "zh", "ref_audio_path": "/root/workspace/audio/output.wav", "prompt_text": "我病了三年,四万块钱一瓶的正版药我吃了三年", "prompt_lang": "zh" }' \ --output output.wav
|
第七部分:下载生成的音频
7.1 使用AutoDL文件管理器
- 在AutoDL控制台打开”文件管理”
- 找到生成的音频文件
- 点击下载
7.2 使用SCP下载
1 2
| scp -P <端口> root@<地址>:/root/workspace/GPT-SoVITS/output.wav ./
|
7.3 使用rclone同步
1 2 3 4 5
| rclone config
rclone copy /root/workspace/GPT-SoVITS/output.wav remote:backup/
|
第八部分:常见问题
Q1:显存不足怎么办?
1 2 3 4 5 6 7 8
|
export CUDA_LAUNCH_BLOCKING=1
|
Q2:训练速度慢?
- 检查是否正确使用GPU:
nvidia-smi
- 确认CUDA版本与PyTorch版本匹配
- 使用更快的GPU(如RTX 4090)
Q3:生成的语音效果不好?
- 增加训练轮数(20-50轮)
- 使用更高质量的训练音频
- 确保训练音频与目标文本风格一致
- 调整推理参数(top_k, top_p, temperature)
Q4:WebUI无法访问?
- 检查端口映射是否正确配置
- 确认防火墙设置
- 使用
--listen 0.0.0.0 参数
Q5:模型下载失败?
- 使用国内镜像(HF-Mirror, ModelScope)
- 手动下载模型文件
第九部分:费用估算
AutoDL计费参考
| GPU型号 |
参考价格(元/小时) |
预计训练时间 |
预计费用 |
| RTX 4090 |
约 3-4 元 |
30分钟-1小时 |
约 2-4 元 |
| RTX 3090 |
约 2-3 元 |
1-2小时 |
约 3-6 元 |
| A100 |
约 10-15 元 |
20-40分钟 |
约 5-10 元 |
建议:选择RTX 4090,性价比最高,总费用约5元以内
第十部分:完整操作流程总结
快速版(零样本推理,无需训练)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| ssh -p <端口> root@<地址>
git clone https://gitee.com/RVC-Boss/GPT-SoVITS.git cd GPT-SoVITS
conda create -n GPTSoVits python=3.10 -y conda activate GPTSoVits pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt
bash install.sh --device CU118 --source HF-Mirror
python webui.py --listen 0.0.0.0
|
完整版(微调训练,效果更好)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
python webui.py --listen 0.0.0.0
|
2025最新GPT-SoVITS教程
总结 该项目对python pytorch版本要求严格 cuda向下兼容 使用cu124/cu128无差