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

安装和运行 Azure AI 翻译容器

借助容器,你可以在自己的基础结构上托管 Azure AI 翻译 API。 容器映像包括在任何专用、公共或个人计算环境中一致运行应用程序所需的所有库、工具和依赖项。 如果无法通过远程调用 Azure AI 翻译 API 来满足安全或数据管理要求,则容器是一个不错的选择。

在本文中,了解如何使用 Docker API 联机安装和运行翻译容器。 Azure AI 翻译容器支持以下操作:

  • 文本翻译。 将单词或短语的上下文含义从支持的 source 语言实时翻译为支持的 target 语言。 有关详细信息,请参阅容器翻译文本

  • 🆕 文本直译。 实时将文本从一种语言脚本或书写系统转换为另一种语言脚本或书写系统。 有关详细信息,请参阅容器:直译文本

  • 文档翻译(预览)。 同步翻译文档,同时实时保留结构和格式。 有关详细信息,请参阅容器:翻译文档

先决条件

若要开始,需要以下资源、管控访问审批和工具:

Azure 资源
  • 一个有效的 Azure 订阅。 如果没有帐户,可以创建一个免费的 12 个月帐户

  • 已连接的翻译容器已断开连接的翻译容器的已批准访问请求。

  • 在批准的订阅 ID 下创建的 Azure AI 翻译资源而不是多服务 Azure AI 服务资源)。 需要与资源关联的 API 密钥和终结点 URI。 启动容器需要这两个值,可在 Azure 门户的资源概述页面上找到这两个值。

    • 对于已连接的翻译容器,请选择 S1 定价层。

      屏幕截图显示已连接翻译器的容器的定价层选择。

    • 对于已断开连接的翻译容器,请选择 Commitment tier disconnected containers 定价层。 仅当已断开连接容器访问请求获得批准时,你才会看到购买承诺层级的选项。

      显示 Azure 门户上的资源创建过程的屏幕截图。

Docker 工具

应对 Docker 概念有基本的了解,例如注册表、存储库、容器和容器映像,以及基本的docker术语和命令的知识。 有关 Docker 和容器的基础知识,请参阅 Docker 概述

提示

考虑将 Docker Desktop 添加到计算环境中。 Docker Desktop 是一个图形用户界面 (GUI),使你能够直接从桌面构建、运行和共享容器化应用程序。

Docker Desktop 包括 Docker 引擎、Docker CLI 客户端、Docker Compose,并提供为首选操作系统配置 Docker 的软件包:

工具 说明 条件
Docker 引擎 Docker 引擎是 Docker 容器化平台的核心组件。 必须安装在主机上,这样你才能构建、运行和管理容器。 所有操作均为必要项
Docker Compose Docker Compose 工具用于定义和运行多容器应用程序。 对于支持的容器必要项
Docker CLI 使用 Docker 命令行接口,可以直接使用本地计算机与 Docker 引擎进行交互并管理 Docker 容器。 推荐
主机计算机要求

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

操作系统 系统要求
Windows • 已安装 Windows 10 或 Windows 11
• 64 位处理器
• 至少 4 GB RAM
• Windows Hyper-V 和容器功能以及 BIOS 级硬件虚拟化
• 有关详细信息,请参阅在 Windows 上安装 Docker Desktop
Mac • 2010 计算机型号或更高版本
• OS 10.13 或更高版本
• 至少 4 GB RAM
• 有关详细信息,请参阅在 Mac 上安装 Docker Desktop
Linux • 64 位版本的 Ubuntu(最新 LTS(长期支持)版本或当前非 LTS 版本)、Debian 12、Fedora 38 或 Fedora 39
• CPU 支持虚拟化
• 至少 4 GB RAM
• 有关详细信息,请参阅在 Linux 上安装 Docker Desktop

注意

最小规格和建议规格基于 Docker 限制,而不是基于主机资源。

下表描述了每个容器的最低和建议规格以及允许的每秒事务处理数 (TPS)。

函数 建议的最低要求 说明
文本翻译 4 核心,4 GB 内存
文本直译 4 核心,2 GB 内存
文档翻译 4 核心,6 GB 内存 可以通过以下公式计算可以同时处理的文档数量:[(n-2), (m-6)/4) 中的最小值]。
n 是 CPU 内核数。
m 是内存大小 (GB)。
示例:8 核,32 GB 内存可以同时处理六 (6) 个文档[(8-2), ((36-6)/4)) 中的最小值]。
  • 每个核心必须至少为 2.6 千兆赫 (GHz) 或更快。

  • 对于每种语言对,建议使用 2 GB 内存。

  • 除了基线要求外,每个并发文档处理还需要 4 GB 内存。

    提示

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

     docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
    
     IMAGE ID         REPOSITORY                TAG
     <image-id>       <repository-path/name>    <tag-name>
    

要求的输入

所有 Azure AI 容器都需要以下输入值:

  • EULA 接受设置。 设置为 Eula=accept 值的最终用户许可协议 (EULA)。

  • API 密钥和终结点 。 API 密钥用于启动容器。 可以通过导航到 Azure AI 翻译资源“密钥和终结点”页并选择 Copy to clipboard 图标来检索 API 密钥和终结点 URL 值。

  • 如果要翻译文档,请务必使用文档翻译终结点。

重要

  • 密钥用于访问 Azure AI 资源。 不要共享你的密钥。 以安全方式存储密钥(例如,使用 Azure Key Vault 来存储)。

  • 此外,我们建议定期重新生成这些密钥。 发出 API 调用只需一个密钥。 重新生成第一个密钥时,可以使用第二个密钥来持续访问服务。

计费

  • 对该容器的查询在用于 API Key 的 Azure 资源的定价层计费。

  • 将针对用于处理文档和映像的每个容器实例计费。

  • 当以下所有三个选项都提供了有效值时,docker run 命令会从 Microsoft 工件注册表下载映像并启动容器:

选项 说明
ApiKey 用于跟踪账单信息的 Azure AI 服务资源的密钥。
必须将此选项的值设置为 Billing 中指定的已预配资源的密钥。
Billing 用于跟踪账单信息的 Azure AI 服务资源的终结点。
必须将此选项的值设置为已预配的 Azure 资源的终结点 URI。
Eula 表示已接受容器的许可条款。
此选项的值必须设置为 accept

连接到 Azure

  • 容器计费参数值允许容器连接到计费端点并运行。

  • 容器约每 10 到 15 分钟报告一次使用情况。 如果容器未在允许的时间范围内连接到 Azure,容器将继续运行,但不会为查询提供服务,直到计费终结点恢复。

  • 以相同的时间间隔(介于 10 到 15 分钟)尝试连接 10 次。 如果无法在 10 次尝试内连接到计费终结点,容器会停止处理请求。 有关发送给 Microsoft 进行计费的信息的示例,请参阅 Azure AI 容器常见问题解答

容器映像和标记

Azure AI 服务容器映像位于 Microsoft 工件注册表目录中。 Azure AI 翻译容器驻留在 azure-cognitive-services/translator 存储库中,其名字为 text-translation。 完全限定的容器映像名称为 mcr.microsoft.com/azure-cognitive-services/translator/text-translation:latest

要使用最新版本的容器,可以使用最新标记。 可以在 MCR 上查看 Azure AI 服务文本翻译版本标记的完整列表。

使用容器

选择选项卡以选择 Azure AI 翻译容器环境:

借助 Azure AI 翻译容器,你可以在自己的环境中运行 Azure AI 翻译服务 on-premise。 已连接的容器在本地运行,并将使用情况信息发送到云端进行计费。

下载并运行容器映像

docker run 命令从 Microsoft 工件注册表下载映像并启动容器。

重要

  • 以下各节中的 docker 命令使用反斜杠 \ 作为行继续符。 根据主机操作系统的要求替换或删除字符。
  • 必须指定 EULABillingApiKey 选项运行容器;否则,该容器不会启动。
  • 如果要翻译文档,请务必使用文档翻译终结点。
docker run --rm -it -p 5000:5000 --memory 12g --cpus 4 \
-v /mnt/d/TranslatorContainer:/usr/local/models \
-e apikey={API_KEY} \
-e eula=accept \
-e billing={ENDPOINT_URI} \
-e Languages=en,fr,es,ar,ru  \
mcr.microsoft.com/azure-cognitive-services/translator/text-translation:latest

上面的命令:

  • 从下载的容器映像中创建正在运行的翻译容器。
  • 分配 12 千兆字节 (GB) 内存和 4 个 CPU 核心。
  • 公开传输控制协议 (TCP) 端口 5000 并为容器分配伪 TTY。 现在,地址 localhost 指向容器本身,而不是主机。
  • 接受最终用户协议 (EULA)。
  • 配置计费终结点。
  • 下载英语、法语、西班牙语、阿拉伯语和俄语的翻译模型。
  • 退出后自动删除容器。 容器映像在主计算机上仍然可用。

提示

其他 Docker 命令:

  • docker ps 用于列出正在运行的容器。
  • docker pause {your-container name} 用于暂停正在运行的容器。
  • docker unpause {your-container-name} 用于取消暂停的已暂停容器。
  • docker restart {your-container-name} 用于重启正在运行的容器。
  • docker exec 使你能够执行命令以在正在运行的容器中分离设置环境变量

有关详细信息,请参阅docker CLI 参考文档

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

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

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

查询翻译容器终结点

容器提供基于 REST 的翻译器终结点 API。 指定了源语言 (from=en) 的示例请求如下:

  curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=zh-HANS" -H "Content-Type: application/json" -d "[{'Text':'Hello, what is your name?'}]"

注意

  • 源语言检测需要额外的容器。 有关详细信息,请参阅支持容器

  • 如果 cURL POST 请求返回 Service is temporarily unavailable 响应,则表明容器尚未准备好。 请等待几分钟,然后重试。

验证容器是否正在运行

有几种方法可用于验证容器是否正在运行:

  • 容器在 / 处提供主页作为容器正在运行的视觉验证。

  • 可以打开你常用的 Web 浏览器并导航到相关容器的外部 IP 地址和公开端口。 使用以下请求 URL 验证容器是否正在运行。 列出的示例请求 URL 指向 http://localhost:5000,但是你的特定容器可能会有所不同。 请记住,你要导航至容器的外部 IP 地址和公开端口。

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

容器主页的屏幕截图。

如果在运行 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}

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

停止容器

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

支持容器的用例

某些翻译查询需要支持容器才能成功完成操作。 如果你使用的是 Office 文档,并且不需要源语言检测,则只需要翻译容器。 但是,如果需要源语言检测或者你在使用扫描的 PDF 文档,则需要支持容器:

下表列出了执行文本和文档翻译操作所需的支持容器。 翻译容器通过 Azure 帐户上的 Azure AI 翻译资源将计费信息发送到 Azure。

操作 请求查询 Document type 支持容器
• 文本翻译
• 文档翻译
已指定 from Office 文档
• 文本翻译
• 文档翻译
未指定 from。 需要自动语言检测来确定源语言。 Office 文档 ✔️ 文本分析:语言容器
• 文本翻译
• 文档翻译
已指定 from 扫描的 PDF 文档 ✔️ 版本:读取容器
• 文本翻译
• 文档翻译
未指定 from,需要自动语言检测来确定源语言。 扫描的 PDF 文档 ✔️ 文本分析:语言容器

✔️ 版本:读取容器

使用 docker compose 操作支持容器

Docker compose 是一种工具,可用于使用通常名为 compose.yaml 的单个 YAML 文件来配置多容器应用程序。 docker compose up 命令用于启动容器应用程序,docker compose down 命令用于停止和删除容器的命令。

如果已安装 Docker Desktop CLI,则其中包括 Docker compose 及其先决条件。 如果没有 Docker Desktop,请参阅“安装 Docker Compose 概述”。

创建应用程序

  1. 使用首选编辑器或 IDE,为应用创建一个名为 container-environment 的新目录,或使用你选择的名字为其命名。

  2. 新建名为 compose.yaml 的 YAML 文件。 .yml 或 .yaml 扩展都可用于 compose 文件。

  3. 将以下 YAML 代码示例复制并粘贴到 compose.yaml 文件中。 将 {TRANSLATOR_KEY}{TRANSLATOR_ENDPOINT_URI} 替换为 Azure 门户翻译实例中的键和终结点值。 如果要翻译文档,请确保使用 document translation endpoint

  4. 顶层名称(azure-ai-translatorazure-ai-languageazure-ai-read)是你指定的参数。

  5. container_name 这是一个可选参数,用于设置容器运行时的名称,而不是让 docker compose 生成名称。

    services:
      azure-ai-translator:
        container_name: azure-ai-translator
        image: mcr.microsoft.com/product/azure-cognitive-services/translator/text-translation:latest
        environment:
            - EULA=accept
            - billing={TRANSLATOR_ENDPOINT_URI}
            - apiKey={TRANSLATOR_KEY}
            - AzureAiLanguageHost=http://azure-ai-language:5000
            - AzureAiReadHost=http://azure-ai-read:5000
        ports:
              - "5000:5000"
        azure-ai-language:
          container_name: azure-ai-language
          image:  mcr.microsoft.com/azure-cognitive-services/textanalytics/language:latest
          environment:
              - EULA=accept
              - billing={TRANSLATOR_ENDPOINT_URI}
              - apiKey={TRANSLATOR_KEY}
        azure-ai-read:
          container_name: azure-ai-read
          image:  mcr.microsoft.com/azure-cognitive-services/vision/read:latest
          environment:
              - EULA=accept
              - billing={TRANSLATOR_ENDPOINT_URI}
              - apiKey={TRANSLATOR_KEY}
    
  6. 打开终端,导航到 container-environment 文件夹,并使用下面的 docker-compose 命令启动容器:

    docker compose up
    
  7. 若要停止容器,请使用以下命令:

    docker compose down
    

    提示

    实用的 Docker 命令:

    • docker compose pause 用于暂停正在运行的容器。
    • docker compose unpause {your-container-name} 用于取消暂停的容器。
    • docker compose restart 用于重启所有已停止和正在运行的容器,其所有以前的更改保持不变。 如果已对 compose.yaml 配置进行更改,则 docker compose restart 命令不会更新这些更改。 必须使用 docker compose up 命令来反映 compose.yaml 文件中的更新和更改。
    • docker compose ps -a 用于列出所有容器,包括已停止的容器。
    • docker compose exec 使你能够执行命令以在正在运行的容器中分离设置环境变量

    有关详细信息,请参阅docker CLI 参考文档

翻译和支持容器映像和标记

Azure AI 服务容器映像位于 Microsoft 工件注册表目录中。 下表列出了文本和文档翻译的完全限定图像位置:

容器 映像位置 说明
翻译:文本和文档翻译 mcr.microsoft.com/azure-cognitive-services/translator/text-translation:latest 可以在 MCR 上查看 Azure AI 服务文本翻译版本标记的完整列表。
文本分析:语言 mcr.microsoft.com/azure-cognitive-services/textanalytics/language:latest 可以在 MCR 上查看 Azure AI 服务文本分析语言版本标记的完整列表。
视觉:读取 mcr.microsoft.com/azure-cognitive-services/vision/read:latest 可以在 MCR 上查看 Azure AI 服务计算机视觉读取OCR版本标记的完整列表。

其他参数和命令

下面是运行容器需要用到的其他一些参数和命令:

使用情况记录

在断开连接的环境中运行 Docker 容器时,容器会将使用情况记录写入卷,该卷将随时间推移收集这些记录。 还可以调用 REST API 终结点来生成有关服务使用情况的报表。

用于存储日志的参数

在断开连接的环境中运行时,输出装载必须可供容器存储使用情况日志。 例如,在下面的示例中,你将包括 -v /host/output:{OUTPUT_PATH}Mounts:Output={OUTPUT_PATH},并将 {OUTPUT_PATH} 替换为存储着日志的路径:

示例 docker run 命令

docker run -v /host/output:{OUTPUT_PATH} ... <image> ... Mounts:Output={OUTPUT_PATH}

Kubernetes 部署中的环境变量名称

  • 某些 Azure AI 容器(例如翻译器)要求用户在运行容器时传递包含冒号 (:) 的环境变量名称。

  • Kubernetes 不支持在环境变量名称中使用冒号。 要解决此问题,可以在部署到 Kubernetes 时将冒号替换为两个下划线字符 (__)。 请参阅以下示例,以了解环境变量名称的可接受格式:

        env:
        - name: Mounts__License
          value: "/license"
        - name: Mounts__Output
          value: "/output"

此示例替换了 docker run 命令中的 Mounts:LicenseMounts:Output 环境变量名称的默认格式。

使用容器终结点获取使用情况记录

容器提供两个终结点,用于返回有关其使用情况的记录。

获取所有记录

以下终结点将提供一个报告,其中汇总了在装载的计费记录目录中收集的所有使用情况。

https://<service>/records/usage-logs/

用于检索所有记录的 HTTPS 终结点示例

http://localhost:5000/records/usage-logs

获取特定月份的记录

以下终结点提供汇总了特定月份和年份使用情况的报告:

https://<service>/records/usage-logs/{MONTH}/{YEAR}

用于检索特定月份和年份的记录的 HTTPS 终结点示例

http://localhost:5000/records/usage-logs/03/2024

使用情况日志终结点将返回类似以下示例所示的 JSON 响应:

已连接的容器

使用费是根据 quantity 值计算的。

{
  "apiType": "string",
"serviceName": "string",
"meters": [
  {
    "name": "string",
    "quantity": 256345435
    }
  ]
}

总结

在本文中,你已了解相关的概念,以及 Azure AI 翻译容器的下载、安装和运行工作流:

  • Azure AI 翻译容器支持文本翻译、同步文档翻译和文本直译。

  • 可从容器注册表下载容器映像并在 Docker 中运行。

  • 在实例化容器时必须指定账单信息。

后续步骤