想以星铁的三月七为原型,制作一个电脑智能助手,需要用到语言合成,这里选择了Fish-Speech。
官方文档:https://speech.fish.audio/zh/
虽然官方文档比较详细,但是可能没更新,还是会遇到很多问题。
一、环境安装
首先不要运行官方的install_env脚本,我运行完后conda和python环境全乱了,而且最后还报错,跑不起来。只能把conda和python全部重装。
还是老老实实手动安装,这里需要使用到conda。先安装miniconda。
从github下载项目,在目录中运行conda。执行以下命令。
# 创建一个 python 3.10 虚拟环境, 你也可以用 virtualenv
conda create -n fish-speech python=3.10
conda activate fish-speech
# 安装 pytorch
pip3 install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu121
# 安装 fish-speech
pip3 install -e .
# (开启编译加速) 安装 triton-windows
pip install https://github.com/AnyaCoder/fish-speech/releases/download/v0.1.0/triton_windows-0.1.0-py3-none-any.whl
注意:
- pip install -e后面有个点。
- 最后的编译加速我没安装,感觉加速类的东西容易报错。后面测试了一下,果然报错,显示找不到cuda的path,不知道为什么,pytorch又能正常使用cuda。
- torch的下载速度非常慢,但是可以把链接复制出去用浏览器或其他下载工具,有科学上网会更快。把下好的whl文件复制到项目目录,执行pip install xxxxxxxx.whl。安装完成后再执行上面安装 pytorch的命令。
二、准备数据
安装好环境后,处理数据,数据需要wav文件和lab文件,lab文件中是语音对应的文本,wav和lab名字相同。格式类似下面的。mp3,wav等常见格式都支持。
fish-speech
├── data
│ ├── 21.15-26.44.lab
│ ├── 21.15-26.44.mp3
│ ├── 27.51-29.98.lab
│ ├── 27.51-29.98.mp3
│ ├── 30.1-32.71.lab
│ └── 30.1-32.71.mp3
在项目下新建一个data文件夹,将wav和lab一起放在这个文件夹。
下载预训练模型:
huggingface-cli download fishaudio/fish-speech-1.5 --local-dir checkpoints/fish-speech-1.5
也可以手动去huggingface下载,也可使用git(需要支持大文件),需要科学上网。没有的话,国内下载自行搜索教程。最后新建一个checkpoints文件夹,把模型等文件放进去。后面执行脚本应该也会自动下载模型。目录结构大概这样。
fish-speech
├── data
│ ├── 21.15-26.44.lab
│ ├── 21.15-26.44.mp3
│ ├── 27.51-29.98.lab
│ ├── 27.51-29.98.mp3
│ ├── 30.1-32.71.lab
│ └── 30.1-32.71.mp3
+---checkpoints
|
+-- fish-speech-1.5
|
下载的模型文件
提取语义token
python tools/vqgan/extract_vq.py data
如果内存不够,就调整一些参数,减少batch-size。
python tools/vqgan/extract_vq.py data --num-workers 1 --batch-size 16
打包数据,根据实际情况调整batch-size。
python tools/llama/build_dataset.py --input "data" --output "data/protos" --text-extension .lab --num-workers 16
三、微调模型
运行训练前,需要修改fish_speech/configs/text2semantic_finetune.yaml文件,根据显存修改
num_workers和batch_size,都为1,需要7.8GB左右的显存训练,我的数据集比较大,所以显存消耗多,根据实际情况自己慢慢测试,找到最合适的参数。
data:
_target_: fish_speech.datasets.semantic.SemanticDataModule
train_dataset: ${train_dataset}
val_dataset: ${val_dataset}
num_workers: 1
batch_size: 1
tokenizer: ${tokenizer}
max_length: ${max_length}
windows下运行训练
python fish_speech/train.py --config-name text2semantic_finetune project=$project +lora@model.model.lora_config=r_8_alpha_16 trainer.strategy.process_group_backend=gloo
四、合并模型
python tools/llama/merge_lora.py --lora-config r_8_alpha_16 --base-weight checkpoints/fish-speech-1.5 --lora-weight results/$project/checkpoints/step_000006400.ckpt --output checkpoints/fish-speech-1.5-mar7th-lora/
step_000006400.ckpt 替换为自己的ckpt文件
五、推理
启动http api
python -m tools.api_server --listen 0.0.0.0:8080 --llama-checkpoint-path "checkpoints/fish-speech-1.5-mar7th-lora" --decoder-checkpoint-path "checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth" --decoder-config-name firefly_gan_vq
或者
web推理界面
python -m tools.run_webui --llama-checkpoint-path "checkpoints/fish-speech-1.5-mar7th-lora" --decoder-checkpoint-path "checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth" --decoder-config-name firefly_gan_vq
修改模型目录为自己的模型目录
--decoder-checkpoint-path "checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth"这个是解码器目录,不是融合后模型的pth目录。