在 Hugging Face 推理端点上部署语音到语音
Hugging Face 已推出一种使用自定义 Docker 镜像在 Inference Endpoints 上部署其 Speech-to-Speech(S2S)流水线的方法。该方案通过利用可扩展的 GPU 基础设施,在无需管理底层硬件的情况下,实现计算密集型多模型流水线的低延迟运行。
Speech-to-Speech(S2S)流水线
Speech-to-Speech 项目使用 Transformers 库中的模型实现了级联流水线。系统使用户能够说话并通过四个主要组件获得合成语音响应:
- Voice Activity Detection (VAD)
- Speech to Text (STT)
- Language Model (LM)
- Text to Speech (TTS)
该流水线支持英语、法语、西班牙语、中文、日语和韩语,并提供 auto 标志用于自动语言检测。
通过自定义 Docker 镜像进行部署
由于 S2S 需要大量计算资源,Hugging Face 建议使用 Inference Endpoints(IE)配合自定义 Docker 镜像,而不是使用预构建模型或自定义处理器。此方法通过将所有依赖和数据封装在镜像中,优化了性能。
构建自定义镜像
创建部署镜像的过程首先克隆 huggingface-inference-toolkit 仓库,以建立一个针对推理工作负载的预优化基础。自定义过程包括:
- 集成代码和数据:将 S2S 代码库以及所需数据集(如
fast-unidic)作为 git 子模块添加。将数据直接放入容器可通过消除端点实例化时下载数据集的需求来缩短启动时间。 - 精简依赖:修改 Dockerfile,移除无关的包,并将
requirements.txt的安装从入口点移动到构建阶段,确保在运行时之前预先安装依赖。
部署配置
自定义镜像可通过 Inference Endpoints 的 GUI 或 API 部署。关键配置要求包括:
- 硬件:推荐使用 AWS GPU L4 实例(约每小时 $0.80)。
- 容器设置:容器端口必须设为 80,以匹配 Inference Endpoint 的期望,因为默认的 toolkit 入口点使用 5000 端口。
- 安全性:必须提供
HF_TOKEN作为 secret,以允许容器下载受限模型,例如 Meta-Llama-3.1-8B-Instruct。
低延迟的技术架构
为实现低延迟,部署采用自定义 Web 服务器和专用客户端,而非标准 HTTP 请求。
WebSocket Web 服务器
该服务器使用 Starlette 实现,支持 WebSocket 连接以实现音频流式传输。服务器在启动时运行 prepare_handler 来初始化并预热模型。运行期间,inference_handler.process_streaming_data 方法接收音频,将其分块供 VAD 处理,并管理一个队列用于处理和返回合成语音响应。
音频流式客户端
专用客户端负责用户硬件与服务器之间的接口。其职责分为四个主要任务:
- 录音:通过
audio_input_callback捕获音频并将块提交到队列。 - 提交:使用
send_audio方法将音频发送到服务器。 - 接收:通过
on_message方法接收服务器响应,判断服务器是否已完成响应或是否需要将更多数据加入播放队列。 - 播放:通过
audio_output_callback播放音频响应,确保音量在安全范围内,以防硬件受损。