←新闻详情

AWS Machine Learning更新于 10月27日 19:15

在 SageMaker AI 上用 vLLM-Omni 构建实时语音应用(上)

Build real-time voice applications with vLLM-Omni on SageMaker AI – Part 1 | Artificial Intelligence

AI 导读

AWS 发布教程,演示如何用 vLLM-Omni Deep Learning Container 在 Amazon SageMaker AI 上部署 Qwen3-TTS,通过 SageMaker 双向流式连接实现文本流入、24 kHz PCM 音频分块流出,并配套 Gradio 应用。该 DLC 基于 vLLM-Omni v1.5,新增 SageMaker AI 所需的双向流式能力标签与路由中间件,示例使用 v1/audio/speech/stream 原生 WebSocket 路由。

正文 · AI 翻译

语音智能体、互动学习应用、无障碍工具和客户服务助手都需要在响应时避免长时间静默停顿。在本教程中,您将在 Amazon SageMaker AI 上部署一个文本转语音(TTS)模型,该模型可以在生成完整响应之前就开始播放语音。您将使用 AWS vLLM-Omni 深度学习容器(DLC)部署 Qwen3-TTS,通过一条持久双向连接流式输入文本并输出音频,并通过 Gradio 应用体验该工作流。

AWS 深度学习容器提供包含深度学习框架和依赖项的 Docker 镜像,用于在 AWS 上进行训练和推理。AWS 为 vLLM 和 SGLang 等广泛采用的 serving 框架提供部署指南。本文是关于专用 DLC 系列文章的第 1 部分,涵盖 vLLM-Omni、WhisperX 和 llama.cpp。本文重点介绍面向实时语音应用的流式语音。第 2 部分将把 vLLM-Omni DLC 应用于图像和视频生成。该系列将聚焦的用例与部署示例以及可复现的基准测试相结合,在能提供有用证据时一并给出。

vLLM-Omni 项目将 vLLM 从文本生成扩展到为处理或生成文本、音频、图像和视频的模型提供服务。AWS vLLM-Omni DLC 将跟踪的 vLLM-Omni 版本打包到 AWS 镜像中,并为 SageMaker AI 添加路由中间件。您使用 SageMaker 双向流式传输,通过持久连接发送文本并接收音频分块。

之前的文章《使用 Amazon SageMaker AI 和 vLLM 构建实时语音应用》演示了语音管道的输入端。它将麦克风音频流式传输到 Voxtral-Mini-4B Realtime 语音转文本(STT)模型,并返回转录事件。本文补充输出端,将文本发送到 Qwen3-TTS,并通过 vLLM-Omni DLC 将生成的语音流式传回。

您将克隆代码示例、部署 Qwen3-TTS 模型,并通过 Gradio 应用体验流式语音。

专用推理运行时支持不同于通用文本生成的模型架构和媒体管道。AWS DLC 将这些运行时与其框架依赖项和部署配置一起打包,为您提供一条一致的基于镜像的路径,通往 AWS 计算和托管推理服务。

vLLM-Omni 将 vLLM 从以文本为中心的自回归生成扩展到处理并生成多种模态的模型。其异构管道抽象协调多阶段模型工作流,包括自回归阶段和扩散阶段。它还提供流式输出和 OpenAI 兼容 API。

该运行时并不限于 TTS。其支持的模型包括统一全模态模型、自动语音识别(ASR)、TTS、音频生成、图像生成和视频生成。本文以 Qwen3-TTS 作为一个聚焦示例,因为流式语音提供了一种直接方式来演示双向音频输出。

之前的 vLLM 文章介绍了输入路径:麦克风音频进入 Voxtral 模型,转录事件返回给应用。语音应用可以将该转录传递给其对话逻辑,然后使用本示例将响应文本转换为流式语音。两个端点之间的编排不在本演练范围内。

完整示例位于 03-features/bidirectional-streaming-vLLM-Omni。克隆该仓库,以便一起使用部署脚本、共享流式传输层和 Gradio 客户端。

SageMaker 双向流式传输暴露一个通过 HTTP/2 传输的全双工 WebSocket。客户端连接到 SageMaker Runtime 端点的 8443 端口。SageMaker 推理 sidecar 将连接转发到容器内 vLLM-Omni 的原生 WebSocket 路由。

图 1 展示了请求和响应路径。客户端发送会话配置和文本事件。Qwen3-TTS 通过同一连接返回音频生命周期事件和分块事件。

图 1:Gradio 应用使用 HTTP/2 WebSocket 通过 Amazon SageMaker AI、推理 sidecar 和 vLLM-Omni DLC 将文本事件流式传输到 Qwen3-TTS。音频事件和 24 kHz PCM 分块通过同一连接返回

vLLM-Omni v1.5 DLC 添加了 SageMaker AI 所需的双向流式传输能力标签和路由中间件。示例使用 v1/audio/speech/stream,这是 vLLM-Omni 暴露的原生 WebSocket 路由之一。

端点配置还使用 SageMaker 实例池。实例池为一个生产变体定义按优先级排序的兼容实例类型列表。SageMaker 首先尝试 ml.g6.xlarge,当容量不可用时回退到 ml.g6e.xlarge、ml.g5.xlarge 或 ml.g4dn.xlarge。它仍然只预置一个实例,而不是每个池一个实例。

SageMaker 在创建端点时会验证每个已配置池条目的配额,因此您需要为每个包含的类型提供可用配额。如果 SageMaker 选择了不同的实例,您的每小时成本也可能发生变化。使用 --instance-types 将池限制为满足您配额、价格和性能要求的类型。

开始之前,您需要:

本演练使用美国东部(弗吉尼亚北部)区域。示例会根据 AWS_REGION 构建 DLC 镜像 URI 和运行时端点。

git clone https://github.com/aws-samples/sagemaker-genai-hosting-examples.git cd sagemaker-genai-hosting-examples/03-features/bidirectional-streaming-vLLM-Omni

安装所需的 Python 包。创建虚拟环境并安装示例定义的版本。

python3.12 -m venv .venv source .venv/bin/activate python -m pip install -r requirements.txt

配置示例。设置您的 SageMaker AI 执行角色。示例默认使用 us-east-1。传入 --region 以使用其他受支持的区域。

export SAGEMAKER_EXECUTION_ROLE_ARN="arn:aws:iam:: :role/ "

处理 HTTP/2 WebSocket 的 SageMaker sidecar 需要推理 AMI 设置。模型调用路径必须省略前导斜杠,因为 SageMaker 会在转发请求之前添加它。

python deploy_bidi_stream.py \ --endpoint-name vllm-omni-bidi \ --region us-east-1 \ --keep-endpoint

等待端点达到 InService 状态。首次部署需要一些时间,因为实例会下载 DLC 镜像和模型构件。

python sagemaker_bidi_tts_client.py \ --endpoint-name vllm-omni-bidi \ --region us-east-1

在浏览器中打开 http://127.0.0.1:6006。--share 选项会创建 Gradio 公开链接,因此除非您需要该行为,否则请保持禁用。

await send_json( stream, { "type": "session.config", "voice": voice, "language": language, "response_format": "pcm", "stream_audio": True, }, ) await send_json(stream, {"type": "input.text", "text": text}) await send_json(stream, {"type": "input.done"})

Gradio 音频组件会在客户端收到每个 24 kHz PCM 分块时播放它。status 字段会报告分块数量和音频总字节数。

python deploy_bidi_stream.py \ --endpoint-name vllm-omni-bidi \ --region us-east-1 \ --delete-endpoint

清理 确认清理命令报告已删除端点、端点配置和模型。如果进程在清理完成之前停止,请通过 SageMaker AI 控制台或 API 删除资源。正在运行的 GPU 端点会继续产生费用。

通过部署文本转语音模型,您使用 SageMaker AI 上的 AWS vLLM-Omni DLC 在模型仍在生成音频时流式传输音频。此示例展示了专用 AWS DLC 如何支持执行和流式传输模式不同于通用文本生成的多模态模型。结合之前的 vLLM 语音转文本示例,这些示例展示了互补的路径:将麦克风音频流式传输到转录中,然后将应用程序的文本响应以语音形式流式返回。第 2 部分将展示如何将同一 DLC 系列用于图像和视频生成。

试用代码示例,然后浏览 vLLM-Omni DLC 文档和 SageMaker AI 双向流式传输开发人员指南,以将该模式应用于其他受支持的多模态模型。

作者感谢 Zhuofu Bai、Ayush Sharma、Christian Kamwangala 和 Jon Chua 对解决方案和发布流程的贡献。

Yadan 是 AWS 深度学习容器团队的软件开发工程师。她构建的容器为 Amazon SageMaker AI、Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Elastic Container Service (Amazon ECS) 和 Amazon Elastic Kubernetes Service (Amazon EKS) 打包经过测试的框架版本、依赖项和 AWS 部署配置,包括本文中使用的 vLLM-Omni DLC。

Dmitry 是 AWS SageMaker 推理专家解决方案架构团队的全球负责人。他帮助客户设计、构建和优化生成式 AI 和机器学习解决方案,兴趣包括深度学习和大规模部署机器学习。他热衷于持续创新,并利用数据推动业务成果。

Mona 是 AWS 的高级 AI/ML 专家解决方案架构师。她专注于生成式 AI、机器学习和云技术,撰写了三本 AI 书籍和多篇技术博客。她参与合著了关于 CORD-19 神经搜索的获奖研究。

Daniel 是 AWS 的解决方案架构师,专注于前沿 AI 初创公司。作为前初创公司 CTO,他乐于与创始人和工程领导者合作,在 AWS 上推动增长和创新。工作之余,Daniel 喜欢手捧咖啡散步、欣赏自然并学习新想法。

来源

AWS Machine Learning