一种用于实时语音的快速多模态大语言模型
最新消息
- 2024/08 — Ultravox 0.3 已发布
- 2024/08 — Ultravox API 预览版可用,更多信息请点击这里
关于
Ultravox 是一种新型多模态大语言模型,它可以理解文本和人类语音,无需单独的语音识别(ASR)阶段。基于 AudioLM、SeamlessM4T、Gazelle、SpeechGPT 等研究成果,我们在 Meta 的 Llama 3 模型 基础上扩展了一个多模态投影器,可以直接将音频转换为 Llama 3 使用的高维空间。这种直接耦合使 Ultravox 能够比结合单独 ASR 和 LLM 组件的系统响应更快。未来,这还将使 Ultravox 能够原生理解人类语音中无处不在的时间和情感等副语言线索。
当前版本的 Ultravox(v0.3)在处理音频内容时,首个标记的生成时间(TTFT)约为 150 毫秒,每秒生成约 60 个标记,这些都是基于 Llama 3.1 8B 骨干网络实现的。虽然速度已经相当快,但我们相信这些数字还有很大的提升空间。我们期待与 LLM 托管服务提供商合作,为 Ultravox 提供最先进的性能。
Ultravox 目前可以接收音频并输出流式文本。随着模型的发展,我们将训练它能够输出语音标记流,然后通过适当的单元声码器直接转换为原始音频。我们有兴趣与相关方合作开发这项功能!
演示
通过在我们的应用 ai.town 中与 AI 进行语音通话,体验 Ultravox 的实际效果。 (注意:我们的推理服务器流量很大,遇到了一些 bug。如果演示出现错误,请稍后再试。)
Discord
在这里加入我们的 Discord 服务器。
工作机会
如果你有兴趣全职从事 Ultravox 相关工作,我们正在招聘!请查看我们的招聘页面。
推理服务器
你可以使用我们的合作伙伴 BaseTen 提供的 Ultravox 实例,试用自己的音频内容(WAV 文件格式):https://www.baseten.co/library/ultravox/。他们提供免费额度让你开始使用。
如果你有兴趣以实时方式运行 Ultravox,我们还提供一套托管 API。你可以在这里了解如何获取访问权限。
模型
你可以从 Ultravox Hugging Face 页面下载最新的权重。
架构
贡献
如果你有兴趣训练自己的 Ultravox 版本,请继续阅读。
环境设置(Mac)
安装基本工具:
Homebrew
是 MacOS 的包管理器,在 Linux 上也基本可用。如果你使用 Debian 或 Ubuntu Linux,也可以使用 apt 作为替代。Just
简化了我们的 shell 工作流程。它经常作为我们与其他工具交互的接口。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew update
brew install just
创建 Python 虚拟环境并安装必要的包:
just install
我们使用 Poetry 来管理 Python 虚拟环境。
Mosaic 环境设置
你需要设置一些东西才能在 Mosaic 平台上运行。
- 安装并登录 Mosaic CLI
pip install --upgrade mosaicml-cli
mcli init
mcli set api-key <new-value>
- 设置我们使用的工具的 API 密钥:
# 用于访问受限数据和模型的 Hugging Face 令牌
mcli create secret env HF_TOKEN=hf_<your_token>
# 用于记录实验的 WandB 令牌
mcli create secret env WANDB_PROJECT=ultravox
mcli create secret env WANDB_API_KEY=<your_wandb_key>
# 用于访问数据(如 BoolQ)的 GCP 凭证
# 从 Justin/Farzad 获取 service_account.json 文件并将其放在根目录,然后
mcli create secret gcp
训练
我们大部分训练工作都在 MosaicML 平台上进行,但该平台尚未对公众开放。不过,你可以按照下面的本地训练说明在自己的 GPU 上进行相同的训练。
要使用默认配置启动 MosaicML 训练任务,只需执行:
just train
对于 DDP 训练,请确保使用:
torchrun --nproc_per_node=8 -m ultravox.training.train
本地训练
这里是使用现有配置(在本例中,使用 TinyLlama 作为 LLM 骨干网络)运行训练实验的示例命令:
python -m ultravox.training.train --config_path ultravox/training/configs/asr_tinyllama.yaml --data_set 'dummy' --device cpu --batch_size 1 --exp_name <give_your_experiment_a_name>
MosaicML 训练
在运行任何训练任务之前,你需要在 Mosaic 平台上设置 SSH 密钥:https://docs.mosaicml.com/projects/mcli/en/latest/resources/secrets/ssh.html#page-secrets-ssh
## 创建新的 SSH 密钥并将其添加到 Mosaic 平台
# ssh-keygen -f ~/.ssh/mclid_id_rsa
## 将**公钥**添加到 Github
# mcli create secret ssh ~/.ssh/mclid_id_rsa
mcli run -f mcloud.yaml --follow
其他有用的命令:
mcli get clusters
mcli util r7z2
mcli get runs
mcli get runs --cluster r7z2
mcli run -f mcloud.yaml --follow
对于交互式运行,我们不建议使用 --interactive
。相反,将 command
设置为类似 sleep 3600
的内容,然后使用 mcli connect <job_name> --tmux
连接到它。
这样,你的环境(代码和包)将与训练环境相同。
这里的值 3600
(1 小时)只是一个示例。
重要:完成任何任务后,特别是交互式任务,请确保停止机器!
运行评估
- 使用
infer_tool.py --json > file
从给定的模型/数据集组合创建 jsonl 输出,其中每行包含两个值:问题和答案。 - 使用
eval_tool.py -f file
评估 jsonl 文件,这将为模型在该数据集上的表现生成一个平均分数。
其他
有用的命令:
just update # 更新依赖
just format # 运行格式化(black, isort, autoflake)
just python # 激活虚拟环境并运行 python