bark.cpp
路线图 / encodec.cpp / ggml
SunoAI's bark 模型 在纯 C/C++ 中的推理。
描述
使用 bark.cpp
,我们的目标是为社区带来实时真实多语言文本到语音生成。
- 无依赖的纯 C/C++ 实现
- 支持 x86 架构的 AVX、AVX2 和 AVX512
- 兼容 CPU 和 GPU 的后端
- 混合 F16 / F32 精度
- 4 位、5 位和 8 位整数量化
- 支持 Metal 和 CUDA 后端
支持的模型
我们想要实现的模型!请提交 PR :)
在 Google Colab 上体验演示 (#95)
以下是使用 bark.cpp
的典型运行:
./main -p "This is an audio generated by bark.cpp"
__ __
/ /_ ____ ______/ /__ _________ ____
/ __ \/ __ `/ ___/ //_/ / ___/ __ \/ __ \
/ /_/ / /_/ / / / ,< _ / /__/ /_/ / /_/ /
/_.___/\__,_/_/ /_/|_| (_) \___/ .___/ .___/
/_/ /_/
bark_tokenize_input: prompt: 'This is an audio generated by bark.cpp'
bark_tokenize_input: number of tokens in prompt = 513, first 8 tokens: 20795 20172 20199 33733 58966 20203 28169 20222
Generating semantic tokens: 17%
bark_print_statistics: sample time = 10.98 ms / 138 tokens
bark_print_statistics: predict time = 614.96 ms / 4.46 ms per token
bark_print_statistics: total time = 633.54 ms
生成粗糙 token: 100%
bark_print_statistics: sample time = 3.75 ms / 410 tokens
bark_print_statistics: predict time = 3263.17 ms / 7.96 ms per token
bark_print_statistics: total time = 3274.00 ms
生成精细 token: 100%
bark_print_statistics: sample time = 38.82 ms / 6144 tokens
bark_print_statistics: predict time = 4729.86 ms / 0.77 ms per token
bark_print_statistics: total time = 4772.92 ms
write_wav_on_disk: Number of frames written = 65600.
main: load time = 324.14 ms
main: eval time = 8806.57 ms
main: total time = 9131.68 ms
这是 Bark 在 iPhone 上运行的视频:
https://github.com/PABannier/bark.cpp/assets/12958149/bc807c0b-adfa-4c47-a05b-a2d8ba157dd8
用法
下面是使用 Bark.cpp 的步骤
获取代码
git clone --recursive https://github.com/PABannier/bark.cpp.git
cd bark.cpp
git submodule update --init --recursive
构建
要构建 bark.cpp,必须使用 CMake
:
mkdir build
cd build
# 若要启用 nvidia gpu,请使用以下选项
# cmake -DGGML_CUBLAS=ON ..
cmake ..
cmake --build . --config Release
准备数据并运行
# 安装 Python 依赖
python3 -m pip install -r requirements.txt
# 下载 Bark 模型检查点和词汇表
python3 download_weights.py --out-dir ./models --models bark-small bark
# 将模型转换为 ggml 格式
python3 convert.py --dir-model ./models/bark-small --use-f16
# 运行推理
./build/examples/main/main -m ./models/bark-small/ggml_weights.bin -p "this is an audio generated by bark.cpp" -t 4
(可选)量化权重
可以使用以下策略对权重进行量化:q4_0
、q4_1
、q5_0
、q5_1
、q8_0
。
注意,为了保持音频质量,我们不会对编解码器模型进行量化。大部分计算在 GPT 模型的前向传递中进行。
./build/examples/quantize/quantize ./ggml_weights.bin ./ggml_weights_q4.bin q4_0
重要论文
- Bark
- Encodec
- GPT-3
贡献
bark.cpp
是一个持续性的项目,依赖社区的努力才能持久和发展。您的贡献是受欢迎且非常有价值的。它可以是
- 错误报告:在使用
bark.cpp
时,您可能会遇到错误。请在问题区报告。 - 功能请求:您希望添加新模型或支持新平台。可以在问题区提出建议。
- 拉取请求:您可能修复了某个错误,添加了某个功能,或修正了文档中的小错别字,...您可以提交拉取请求,审核者会与您联系。
编码指南
- 避免添加第三方依赖、额外文件、额外头文件等。
- 始终考虑与其他操作系统和架构的跨兼容性。