推理
推理支持命令行, http api, 以及 webui 三种方式.
Note
总的来说, 推理分为几个部分:
- 给定一段 ~10 秒的语音, 将它用 VQGAN 编码.
- 将编码后的语义 token 和对应文本输入语言模型作为例子.
- 给定一段新文本, 让模型生成对应的语义 token.
- 将生成的语义 token 输入 VQGAN 解码, 生成对应的语音.
命令行推理
从我们的 huggingface 仓库下载所需的 vqgan
和 llama
模型。
对于中国大陆用户,可使用 mirror 下载。
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download fishaudio/fish-speech-1.2-sft --local-dir checkpoints/fish-speech-1.2-sft
1. 从语音生成 prompt:
Note
如果你打算让模型随机选择音色, 你可以跳过这一步.
python tools/vqgan/inference.py \
-i "paimon.wav" \
--checkpoint-path "checkpoints/fish-speech-1.2-sft/firefly-gan-vq-fsq-4x1024-42hz-generator.pth"
你应该能得到一个 fake.npy
文件.
2. 从文本生成语义 token:
python tools/llama/generate.py \
--text "要转换的文本" \
--prompt-text "你的参考文本" \
--prompt-tokens "fake.npy" \
--checkpoint-path "checkpoints/fish-speech-1.2-sft" \
--num-samples 2 \
--compile
该命令会在工作目录下创建 codes_N
文件, 其中 N 是从 0 开始的整数.
Note
您可能希望使用 --compile
来融合 cuda 内核以实现更快的推理 (~30 个 token/秒 -> ~500 个 token/秒).
对应的, 如果你不打算使用加速, 你可以注释掉 --compile
参数.
Info
对于不支持 bf16 的 GPU, 你可能需要使用 --half
参数.
3. 从语义 token 生成人声:
VQGAN 解码
python tools/vqgan/inference.py \
-i "codes_0.npy" \
--checkpoint-path "checkpoints/fish-speech-1.2-sft/firefly-gan-vq-fsq-4x1024-42hz-generator.pth"
HTTP API 推理
运行以下命令来启动 HTTP 服务:
python -m tools.api \
--listen 0.0.0.0:8080 \
--llama-checkpoint-path "checkpoints/fish-speech-1.2-sft" \
--decoder-checkpoint-path "checkpoints/fish-speech-1.2-sft/firefly-gan-vq-fsq-4x1024-42hz-generator.pth" \
--decoder-config-name firefly_gan_vq
--compile
参数。
推荐中国大陆用户运行以下命令来启动 HTTP 服务:
随后, 你可以在 http://127.0.0.1:8080/
中查看并测试 API.
下面是使用tools/post_api.py
发送请求的示例。
python -m tools.post_api \
--text "要输入的文本" \
--reference_audio "参考音频路径" \
--reference_text "参考音频的文本内容" \
--streaming True
上面的命令表示按照参考音频的信息,合成所需的音频并流式返回.
如果需要通过{说话人}
和{情绪}
随机选择参考音频,那么就根据下列步骤配置:
1. 在项目根目录创建ref_data
文件夹.
2. 在ref_data
文件夹内创建类似如下结构的目录.
.
├── SPEAKER1
│ ├──EMOTION1
│ │ ├── 21.15-26.44.lab
│ │ ├── 21.15-26.44.wav
│ │ ├── 27.51-29.98.lab
│ │ ├── 27.51-29.98.wav
│ │ ├── 30.1-32.71.lab
│ │ └── 30.1-32.71.flac
│ └──EMOTION2
│ ├── 30.1-32.71.lab
│ └── 30.1-32.71.mp3
└── SPEAKER2
└─── EMOTION3
├── 30.1-32.71.lab
└── 30.1-32.71.mp3
也就是ref_data
里先放{说话人}
文件夹, 每个说话人下再放{情绪}
文件夹, 每个情绪文件夹下放任意个音频-文本对
。
3. 在虚拟环境里输入
生成参考目录.
4. 调用 api.
以上示例仅供测试.
WebUI 推理
你可以使用以下命令来启动 WebUI:
python -m tools.webui \
--llama-checkpoint-path "checkpoints/fish-speech-1.2-sft" \
--decoder-checkpoint-path "checkpoints/fish-speech-1.2-sft/firefly-gan-vq-fsq-4x1024-42hz-generator.pth" \
--decoder-config-name firefly_gan_vq
Note
你可以使用 Gradio 环境变量, 如 GRADIO_SHARE
, GRADIO_SERVER_PORT
, GRADIO_SERVER_NAME
来配置 WebUI.
祝大家玩得开心!