前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
返回 AI 情报前线
All News · 全部资讯8917
  • OpenAI智能体擅传53张客户图片至公网,已承认违规
  • GitHub Copilot企业托管配置支持内联验证
  • OpenAI智能体安全漏洞:53张用户图片被发布至公开网络
  • AI应用上线后高频故障模式分析
  • AI Agent与传统自动化的安全差异:控制权在哪里
  • 我的RAG评估骗了我两次
  • GitHub Copilot用量API新增PR评审耗时分析
  • OpenAI Agent入侵Hugging Face细节披露
  • Meta Muse超越ChatGPT同期数据,剑指智能眼镜
  • Anthropic论文:Claude可完成九层推理链
  • 多 Agent 系统八大隐蔽失败模式与真正有效的防护机制
  • GitHub Copilot Canvas 入门:用自然语言构建自定义工作流
  • AI Agent 误将私密文章发布上线:一次 CI 流程的教训
  • 切 AI 工具时不再重复介绍代码库:真正有效的做法
  • Supabase 用户因配置不当暴露大量数据
  • Copilot自动修复Agent现利用记忆上下文
  • GitHub Copilot 周更:新增 Claude Opus 模型和本地沙箱
  • AWS EKS上MoE强化学习训练吞吐量提升40%
  • SageMaker HyperPod上加速多模态RL训练
  • NarrateAI:Bedrock 上生产级 LLM 质量保障实战
  • Qwen3-TTS 语音克隆实战:AWS SageMaker 实时部署指南
  • Jevmem:为 Claude Code 自动注入项目记忆,基于 Jev
  • 一次前向传播问十个问题:决策模型提速 6.7 倍
  • 边缘设备低延迟部署 LLM 的策略与最佳实践
  • AI Agent 情景记忆 vs 语义记忆的实际应用
  • Claude Opus 5.5 vs GPT-6 Sol:新一轮降价潮来了
  • TypeSafe AI Jev:不做生成、只做判断的极速模型
  • AI Agent 的失败根源不在推理,在于状态管理
  • Cloudflare Turnstile Spin:AI Agent自动修复网站安全配置
  • 微软 Copilot 超级应用:聊天、编程、Agent 三合一
  • Meta Muse为每位用户配备云端Ubuntu电脑
  • n8n推出新Agent类型:自然语言描述即可创建自动化代理
  • Microsoft 推出 Copilot 超级应用,整合聊天、编程和 Agent
  • OpenAI与Cursor对Agent协调器的设计分歧
  • Anthropic 联手 Google Cloud 在纽约办 Claude Code 实战工作坊
  • AI SRE智能处理值班警报:自动根因分析并提PR修复
  • AI生成应用的K8s生产就绪:四层架构避坑指南
  • AI Agent从概念到盈利:2026年实战总结
  • 远程GPU服务器监控:利用率与温度实战指南
  • stable-diffusion.cpp 新增通义图像模型 day-0 支持
  • 程序员最重要的技能:专业怀疑精神
  • NVIDIA 开源统一模型优化库
  • Hindsight:让 AI Agent 真正学习的记忆系统
  • Meta Muse macOS版被发现高危漏洞可劫持账户
  • Fastino开源340M决策模型GLiNER2.5-Decide:CPU可运行
  • Postgres 向量内联与分离表性能实测对比
  • 多 AI Agent 协作:实测最难攻克的工程难题
  • 自托管LLM总拥有成本对比指南
  • DeepSeek Harness桌面版发布:四种Agent模式开箱即用
  • AI 编程工具让软件开发更难了
  • GitHub谈何时不该用Chat:Canvas作为AI交互新范式
  • 已加载 51 / 8917
8.0
热点
AI SCORE
技术实践2026-09-26 00:09

Qwen3-TTS 语音克隆实战:AWS SageMaker 实时部署指南

AWS ML Blog#AWS#语音合成#开源模型
Editor brief · 编辑速览

在 SageMaker JumpStart 上部署 Qwen3-TTS-12Hz-1.7B 开源语音模型,实现实时 TTS 与跨语言声音克隆,含完整架构与验证结果。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

通过语音克隆,你可以用一段简短的参考录音生成目标说话人音色的新语音,无需重新训练模型。现在,你可以将 Amazon SageMaker JumpStart 上公开可用的 Qwen3-TTS-12Hz-1.7B-Base 文语转换模型部署到一个完全托管的实时推理端点。

语音克隆会复现特定说话人的声音特征。先获取该说话人的一段短录音及其转写文本,然后提供需要合成的新文本。模型会以参考说话人的音色说出该文本,全程无需重新训练。媒体团队、教育工作者和应用开发者可以利用这一能力打造个性化语音体验,并实现多语言内容的本地化。他们还可以支持无障碍沟通,并跨越语言保留说话人的身份特征。

通过自托管的公开语音克隆模型,你可以控制成本,并将音频数据保留在 AWS 环境内。你也可以针对自己的领域对模型进行定制。有了 Amazon SageMaker AI,你可以在完全托管的实时端点上运行模型,处理基础设施配置、健康监控和自动扩缩,无需管理底层 GPU 服务器。

本文展示了如何使用 Amazon SageMaker Python SDK 从 Amazon SageMaker JumpStart 部署 Qwen3-TTS-12Hz-1.7B-Base,以及如何调用生成的端点从参考片段克隆语音。还涵盖了使此部署在实际中可行所需的配置设置,以及可用于监控和合理调整端点大小的 Amazon CloudWatch 指标。

Qwen3-TTS 是由阿里云通义团队开发的公开可用的文语转换模型系列。它支持 10 种语言:中文、英语、日语、韩语、德语、法语、俄语、葡萄牙语、西班牙语和意大利语。这些模型使用 Qwen3-TTS-Tokenizer-12Hz 语音分词器,并支持流式生成以满足低延迟的交互场景需求。

本文使用的是 Base 变体 Qwen3-TTS-12Hz-1.7B-Base。它仅需几秒的用户音频即可实现语音克隆。它也可以作为微调的基础模型。在语音克隆时,模型接收一段参考音频片段及其转写文本。它会捕捉说话人的声音特征(如音色、音高和韵律),并将这些特征应用到新文本上。这与 CustomVoice 变体不同——后者从预定义的固定说话人集合生成语音,而非用户提供的参考音频。

该模型还支持跨语言克隆:你可以从一种语言的参考音频中捕捉声音,然后在另一种语言中生成语音,同时保留说话人的声音特征。

Qwen3-TTS-12Hz-1.7B-Base 可在 Amazon SageMaker JumpStart 中与 Qwen3-TTS-12Hz-1.7B-CustomVoice 和 Qwen3-ASR-1.7B 一起使用。通过这些 JumpStart 选项,你可以使用本文展示的简化部署方式。

通过语音克隆,应用可以从参考录音中复现选定说话人的声音特征,而不必局限于预定义的固定语音集合。这支持了媒体、客户互动、教育和对话式 AI 等一系列应用场景。

此部署方式的主要优势包括:

大规模个性化:你可以用短样本生成目标音色的语音,无需收集大量训练数据集。

多语言覆盖:你可以捕捉一种语言中的声音,在另一种语言中生成语音,同时保留身份特征。

成本效益:部署成本与计算使用量对齐,而非按字符数计费的 API 定价。

数据控制:数据保留在你的 AWS 账户和你管理的 Amazon SageMaker 端点内。

应用场景

语音克隆的常见应用包括:

内容本地化:你可以在保留原说话人声音的同时,将内容翻译成多种语言。

客户体验:联络中心和虚拟助手响应可以使用一致的品牌声音。

电子学习和有声书:你可以用特定讲师或作者的声音呈现长篇内容。

创意原型:你可以在录音棚制作之前测试对话和配音。

实时对话式 AI:流式语音识别和低延迟合成可以支持交互式语音代理。

此解决方案将 Qwen3-TTS-12Hz-1.7B-Base 从 Amazon SageMaker JumpStart 部署到实时端点。JumpStart 提供模型构件和预构建的服务容器,因此你无需编写自定义推理处理器。你只需构造一个 JumpStartModel 对象,调用其 deploy 方法,然后使用 Amazon SageMaker 运行时客户端调用生成的端点。

JumpStart 容器服务该模型,从文本输入生成 24 kHz 音频输出。这个阶段设计会影响你如何配置 GPU 内存大小,下一节将详细说明。

下图展示了该部署的实时推理架构。

Real-time voice cloning architecture on Amazon SageMaker AI

部署遵循标准的 Amazon SageMaker AI 实时推理模式:

  1. 客户端向 Amazon SageMaker AI 端点发送 HTTP 请求。请求体包含目标文本、base64 编码的参考音频,以及参考音频的转写文本。
  2. Amazon SageMaker AI 将请求路由到运行在 GPU 实例上的 vLLM-Omni 服务容器。
  3. talker 阶段从文本和参考声音生成语音 token。code2wav 阶段将它们渲染成波形。
  4. 响应以请求的格式(本文使用 WAV)将音频返回给客户端。

前提条件

在开始之前,请确认你拥有以下资源和权限:

  • 一个可访问 Amazon SageMaker AI 和 Amazon Simple Storage Service(Amazon S3)的 AWS 账户。
  • 一个 AWS Identity and Access Management(IAM)身份,拥有创建 Amazon SageMaker 模型、端点配置和端点的权限,以及调用端点的权限。
  • 一个 Amazon SageMaker Studio 环境、笔记本实例,或安装了 Amazon SageMaker Python SDK 的本地环境。
  • 支持的 GPU 实例的足够服务配额。本演练使用 ml.g6.4xlarge(1 个 NVIDIA L4 GPU,24 GB),足以支撑 1.7B 模型。
  • 目标说话人的短参考音频片段(几秒即可)以及其中所说内容的转写文本。

步骤 1:从 JumpStart 部署模型

使用模型 ID 构造 JumpStartModel 并部署。GPU 内存覆盖是此部署最重要的设置。以下章节将解释如何配置它。在运行以下代码之前,请将 <sagemaker-execution-role-arn> 替换为 Amazon SageMaker AI 用于部署模型的 IAM 执行角色的 ARN。

from sagemaker.jumpstart.model import JumpStartModel

model = JumpStartModel(
    model_id="huggingface-ttsvoiceclone-qwen3-tts-12hz-1-7b-base",
    model_version="1.0.1", # pin for reproducibility
    instance_type="ml.g6.4xlarge", # 24 GB L4
    role="<sagemaker-execution-role-arn>",
    env={"SM_VLLM_GPU_MEMORY_UTILIZATION": "0.45"}, # required (see the following section)
)

predictor = model.deploy(
    endpoint_name="qwen3-tts-voice-clone",
    accept_eula=True,
)

端点需要几分钟时间到达 InService 状态,期间容器将模型加载到 GPU 上。你可以在 Amazon SageMaker AI 控制台中监控端点状态,或调用 describe_endpoint API。

步骤 2:正确配置 GPU 内存大小

如前所述,模型在同一 GPU 上分为两个阶段(talker 和 code2wav)运行。vLLM 会根据 gpu_memory_utilization(一个阶段可以Claim的 GPU 内存比例)预先保留 GPU 内存。两个阶段共享一块 GPU。为避免启动时出现显存不足错误,请将它们的总保留量控制在 GPU 容量范围内。

设置该值使两个阶段能舒适地共存。由于一个共享设置等效应用于两个阶段,0.45 效果良好(0.45 + 0.45 = 0.90,留出约 10% 的缓冲空间):

env={"SM_VLLM_GPU_MEMORY_UTILIZATION": "0.45"}

容器启动时,每个阶段会将其内存使用情况记录到 Amazon CloudWatch Logs 中端点的日志组中。以下数值确认模型在 24 GB GPU 上拟合良好:

模型权重很小(talker 为 3.66 GiB,code2wav 为 0.45 GiB)。每个阶段被允许使用的剩余内存大部分成为 KV 缓存,这是保存飞行中请求 token 的工作内存。在 24 GB GPU 上利用率为 0.45(约 22 GiB 可用)时,每个阶段最多可使用约 10 GiB。两个阶段合在一起在 GPU 内且还有余量。这就是 24 GB GPU 非常适合 1.7B 模型的原因,无需更大的 GPU。

步骤 3:测试端点

端点进入 InService 状态后,测试语音克隆。有两个细节专属于此 JumpStart 容器,对获取响应至关重要:

路由选择:Amazon SageMaker 端点暴露单个 /invocations 路径,默认为 completions handler。要访问文语转换处理器,你必须传递自定义属性 route=/v1/audio/speech。否则请求会被拒绝。

负载格式:使用 OpenAI speech schema,将 task_type 设置为 "Base" 以进行语音克隆,并包含参考片段 URI 及其转写文本。

音频格式:将参考片段作为 base64 编码的 data:audio/wav;base64,... URI 提供。在编码前将参考音频转换为 24 kHz 单声道 WAV 是推荐的输入形式。端点按你通过 response_format 请求的格式返回音频。本文使用 "wav",模型生成 24 kHz 单声道音频。

以下代码转换参考片段并将其 base64 编码:

import base64, io, json, subprocess
import boto3, soundfile as sf, imageio_ffmpeg

ffmpeg = imageio_ffmpeg.get_ffmpeg_exe()
subprocess.run([ffmpeg, "-y", "-i", "reference.m4a",
    "-ar", "24000", "-ac", "1", "reference.wav"], check=True)

data, sr = sf.read("reference.wav", dtype="float32")
buf = io.BytesIO(); sf.write(buf, data, sr, format='WAV'); buf.seek(0)
ref_uri = "data:audio/wav;base64," + base64.b64encode(buf.read()).decode()

REF_TEXT = "Transcript of the words spoken in the reference clip."

克隆单句语音

使用 input 中的目标文本和 ref_audio 中的参考片段调用端点。注意 CustomAttributes 路由参数,这是访问文语转换处理器所必需的:

runtime = boto3.client("sagemaker-runtime")

payload = {
    "model": "/opt/ml/model",
    "input": "This is a demonstration of real-time voice cloning using Qwen TTS on Amazon SageMaker AI.",
    "task_type": "Base",
    "ref_audio": ref_uri,
    "ref_text": REF_TEXT,
    "language": "English",
    "response_format": "wav",
}

resp = runtime.invoke_endpoint(
    EndpointName="qwen3-tts-voice-clone",
    ContentType="application/json",
    CustomAttributes="route=/v1/audio/speech", # required to reach the TTS handler
    Body=json.dumps(payload),
)
open("clone.wav", "wb").write(resp["Body"].read())

上述请求是最基本的情况:将一句文本返回为克隆声音的语音。以下模式在此基础上构建,使用相同的 ref_audio、ref_text 和路由自定义属性。

此示例的音频样本(打开本文提供的文件):

参考输入:reference_original_input.wav

生成输出:cloned_output.wav

单个请求非常适合一句话或短段落。对于较长内容(如文章或多行脚本),请将其拆分,每句话或每个段落发送一个请求,以保持声音从头到尾的一致性。

用另一种语言生成语音(跨语言克隆)

要在保持相同声音的同时生成另一种语言的语音,请使用相同的参考片段并将 "language" 设置为另一种支持的语言。以下示例使用英语参考生成中文语音,在跨语言的同时保留说话人的声音特征。

payload = {
    "model": "/opt/ml/model",
    "input": "你好,这是一个语音克隆的测试。",
    "task_type": "Base",
    "ref_audio": ref_uri, # same English reference
    "ref_text": REF_TEXT,
    "language": "Chinese",
    "response_format": "wav",
}
resp = runtime.invoke_endpoint(
    EndpointName="qwen3-tts-voice-clone",
    ContentType="application/json",
    CustomAttributes="route=/v1/audio/speech",
    Body=json.dumps(payload),
)
open("clone_chinese.wav", "wb").write(resp["Body"].read())

生成输出:cross_lingual_cloning.wav

为你的流量选择实例和扩缩

按三步选择实例。首先,确认 JumpStart 支持该实例。然后,检查你的服务配额并确认其 GPU 内存能容纳模型。对于 1.7B 模型,24 GB GPU(g6 系列,NVIDIA L4)匹配良好且具有成本效益。

要估算并发请求容量,请查看 Amazon CloudWatch Logs 中端点日志组的 KV 缓存 token 预算。日志组路径为 /aws/sagemaker/Endpoints/<endpoint-name>。容器启动时,你将看到如下一行:

GPU KV cache size: 56,928 tokens

此值是 KV 缓存总容量,以 token 为单位测量。它表示预留缓存可在并发请求中保存的总 token 数。用此预算除以平均请求大小即可估算并发容量。由于 TTS 请求通常较短,单个实例可以处理多个并发请求。

对于更高流量,请添加端点实例或选择具有更大 GPU 容量的实例类型。Amazon SageMaker AI 自动扩缩可以根据需求调整实例数量。

使用 Amazon CloudWatch 监控端点

Amazon SageMaker AI 会自动将端点指标发布到 Amazon CloudWatch。它们分为两组:实例级硬件指标和调用级请求指标。用它们来合理调整实例大小、调优并发和设置告警。

实例(硬件)指标

命名空间 /aws/sagemaker/Endpoints,维度为 EndpointName 和 VariantName:

调用(请求)指标

命名空间 AWS/SageMaker,维度相同:

使用 Sum 统计量查看 Invocations 以了解一段时间内的总请求数。

清理

为避免产生持续费用,请在完成后删除端点、端点配置和模型:

predictor.delete_endpoint() # deletes endpoint and endpoint config
predictor.delete_model()

总结

本文展示了如何将公开可用的 Qwen3-TTS-12Hz-1.7B-Base 模型使用 Amazon SageMaker JumpStart 部署到 Amazon SageMaker AI 实时端点。还展示了如何调用该端点从短参考片段和转写文本克隆语音。通过托管的实时端点,你可以控制自己的数据,并将成本与所使用的计算对齐,同时无需管理底层基础设施。

要开始使用,请参阅 Amazon SageMaker JumpStart 指南在 Amazon SageMaker Studio 中打开 JumpStart。搜索 "Qwen3-TTS-12Hz-1.7B-Base" 并使用本文中的配置部署模型。有关模型详情,请参阅 Qwen3-TTS 模型卡。

Original source

本文由 AI 翻译整理自 AWS ML Blog,原文版权归原作者所有。

阅读英文原文
上一篇
NarrateAI:Bedrock 上生产级 LLM 质量保障实战
下一篇
Jevmem:为 Claude Code 自动注入项目记忆,基于 Jev