你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Docker 安装和运行语音容器

使用容器时,可以在你自己的环境中使用一部分语音服务功能。 本文介绍如何下载、安装以及运行语音容器。

注意

断开连接的容器的定价和承诺层与标准容器不同。 有关详细信息,请参阅语音服务定价

先决条件

使用语音服务容器之前,必须满足以下先决条件。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。 需要:

  • 在主机上安装 Docker。 必须将 Docker 配置为允许容器连接 Azure 并向其发送账单数据。
    • 在 Windows 上,还必须将 Docker 配置为支持 Linux 容器。
    • 应基本了解 Docker 概念
  • 使用免费 (F0) 或标准 (S) 定价层语音服务资源

计费参数

如果未连接到 Azure 进行计量,则无法授权并运行语音容器。 你必须配置容器,以便始终与计量服务传递账单信息。

所有 Azure AI 容器都需要三个主要参数。 Microsoft 软件许可条款的值必须为 accept。 还需要终结点 URI 和 API 密钥。

对该容器的查询在用于 ApiKey 参数的 Azure 资源的定价层计费。

当为以下三个选项都提供了有效值时,docker run 命令会启动容器:

选项 说明
ApiKey 用于跟踪账单信息的语音资源的 API 密钥。
ApiKey 值用于启动容器,可在 Azure 门户中相应语音资源的“密钥”页上找到。 转到“密钥”页,选择“复制到剪贴板” 图标。
Billing 用于跟踪账单信息的语音资源的终结点。
可在 Azure 门户中相应语音资源的“概述”页上找到终结点。 转到“概述”页,将鼠标悬停在终结点上就会显示一个“复制到剪贴板”图标。 在需要的地方复制并使用终结点。
Eula 表示已接受容器的许可条款。
此选项的值必须设置为 accept

重要

这些订阅密钥用于访问 Azure AI 服务 API。 请勿共享密钥。 安全地存储它们。 例如,使用 Azure Key Vault。 此外,建议定期重新生成这些密钥。 发出 API 调用只需一个密钥。 重新生成第一个密钥时,可以使用第二个密钥继续访问服务。

容器需要计费参数值才能运行。 这些值使容器可以连接到计费终结点。 容器约每 10 到 15 分钟报告一次使用情况。 如果容器未在允许的时间范围内连接到 Azure,容器将继续运行,但不会为查询提供服务,直到计费终结点恢复。 尝试连接按 10 到 15 分钟的相同时间间隔进行 10 次。 如果无法在 10 次尝试内连接到计费终结点,容器会停止处理请求。 有关发送给 Microsoft 以进行计费的信息示例,请参阅 Azure AI 服务文档中的 Azure AI 容器常见问题解答

有关这些选项的详细信息,请参阅配置容器

容器要求和建议

下表显示了每个语音容器的最小和建议资源分配:

容器 最小值 建议 语音模型
语音转文本 4 核心,4-GB 内存 8 核心,8 GB 内存 +4 到 8 GB 内存
自定义语音转文本 4 核心,4-GB 内存 8 核心,8 GB 内存 +4 到 8 GB 内存
语音语言识别 1 核心,1-GB 内存 1 核心,1-GB 内存 不适用
神经文本转语音 6 核心,12-GB 内存 8 核心,16-GB 内存 不适用

每个核心必须至少为 2.6 千兆赫 (GHz) 或更快。

核心和内存对应于 --cpus--memory 设置,用作 docker run 命令的一部分。

注意

最小规格和建议分配基于 Docker 限制,而不是基于主机资源。 例如,大型语言模型的语音转文本容器内存映射部分。 建议将整个文件放入内存中。 需要额外添加 4 到 8 GB 才能加载语音模型(见上表)。 另外,由于模型要在内存中分页,因此首次运行任一容器可能需要更长的时间。

主机要求和建议

主机是运行 Docker 容器且基于 x64 的计算机。 它可以是本地计算机或 Azure 中的 Docker 托管服务,例如:

注意

容器支持使用 GStreamer 为语音 SDK 提供压缩音频输入。 若要在容器中安装 GStreamer,请按照在语音 SDK 中使用编解码器压缩的音频输入中适用于 GStreamer 的 Linux 说明操作。

高级矢量扩展支持

主机是运行 Docker 容器的计算机。 主机必须支持高级矢量扩展 (AVX2)。 可使用以下命令检查 Linux 主机是否提供 AVX2 支持:

grep -q avx2 /proc/cpuinfo && echo AVX2 supported || echo No AVX2 support detected

警告

需要主计算机来支持 AVX2。 如果没有 AVX2 支持,容器将无法正常运行。

运行容器

使用 docker run 命令运行容器。 运行后,容器将持续运行,直到你停止容器

记下使用 docker run 命令的以下最佳做法:

  • 行继续符:以下各部分中的 Docker 命令使用反斜杠 \ 作为行继续符。 根据主机操作系统的要求替换或删除此字符。
  • 参数顺序:除非熟悉 Docker 容器,否则不要更改参数顺序。

可以使用 docker images 命令列出下载的容器映像。 以下命令以表格列出每个下载的容器映像的 ID、存储库和标记:

docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

下面是示例结果:

IMAGE ID         REPOSITORY                TAG
<image-id>       <repository-path/name>    <tag-name>

验证容器是否正在运行

有几种方法可用于验证容器是否正在运行。 找到相关容器的外部 IP 地址和公开端口,并打开你常用的 Web 浏览器。 使用以下各种请求 URL 验证容器是否正在运行。

此处列出的示例请求 URL 是 http://localhost:5000,但是你的特定容器可能会有所不同。 请确保依赖容器的外部 IP 地址和公开端口。

请求 URL 用途
http://localhost:5000/ 容器提供主页。
http://localhost:5000/ready 使用 GET 对此 URL 进行请求,可以验证容器是否已准备好接受针对模型的查询。 此请求可用于 Kubernetes 运行情况和就绪情况探测
http://localhost:5000/status 同样使用 GET 对此 URL 进行请求,可以验证用于启动容器的 api-key 是否有效,而不会导致终结点查询。 此请求可用于 Kubernetes 运行情况和就绪情况探测
http://localhost:5000/swagger 容器为终结点提供一组完整的文档以及“尝试”功能。 使用此功能可以将设置输入到基于 Web 的 HTML 表单并进行查询,而无需编写任何代码。 查询返回后,将提供示例 CURL 命令,用于演示所需的 HTTP 标头和正文格式。

停止容器

若要关闭容器,请在运行容器的命令行环境中选择 Ctrl+C

在同一主机上运行多个容器

若要使用公开端口运行多个容器,请确保在运行每个容器时使用不同的公开端口。 例如,在端口 5000 上运行第一个容器,在端口 5001 上运行第二个容器。

可以让此容器和其他 Azure AI 容器一起在该主机上运行。 此外,还可以让同一 Azure AI 容器的多个容器一起运行。

主机 URL

注意

如果你要运行多个容器,请使用唯一端口号。

协议 托管 URL 容器
WS ws://localhost:5000 语音转文本

自定义语音转文本
HTTP http://localhost:5000 神经网络文本转语音

语音语言识别

有关使用 WSS 和 HTTPS 协议的详细信息,请参阅 Azure AI 服务文档中的容器安全性

疑难解答

启动或运行容器时,可能会遇到问题。 请使用输出装载点并启用日志记录。 这可以让容器生成有助于排查问题的日志文件。

提示

如需详细故障排除信息和指导,请参阅 Azure AI 服务文档中的 Azure AI 容器常见问题解答 (FAQ)

日志记录设置

语音容器附带 ASP.NET Core 日志记录支持。 下面是一个开始时默认记录到控制台的 neural-text-to-speech container 示例:

docker run --rm -it -p 5000:5000 --memory 12g --cpus 6 \
mcr.microsoft.com/azure-cognitive-services/speechservices/neural-text-to-speech \
Eula=accept \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY} \
Logging:Console:LogLevel:Default=Information

有关日志记录的详细信息,请参阅 Azure AI 服务文档中的配置语音容器使用情况记录

Microsoft 诊断容器

如果在运行 Azure AI 容器时遇到问题,可以尝试使用 Microsoft 诊断容器。 使用此容器可以诊断部署环境中可能阻止 Azure AI 容器按预期运行的常见错误。

若要获取容器,请使用以下 docker pull 命令:

docker pull mcr.microsoft.com/azure-cognitive-services/diagnostic

然后运行容器。 将 {ENDPOINT_URI} 替换为你的终结点,将 {API_KEY} 替换为你的资源的密钥:

docker run --rm mcr.microsoft.com/azure-cognitive-services/diagnostic \
eula=accept \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY}

容器会测试与计费终结点之间的网络连接性。

运行断开连接的容器

若要运行断开连接的容器(未连接到 Internet),必须提交此请求表单并等待批准。 有关应用和购买承诺计划以在断开连接的环境中使用容器的详细信息,请参阅 Azure AI 服务文档中的在断开连接的环境中使用容器

后续步骤