添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

容器使你能够在自己的环境中运行翻译器服务的一些功能。 容器非常适合用于满足特定的安全性和数据管理要求。 本文介绍如何下载、安装以及运行翻译器容器。

通过翻译器容器,你可以生成翻译器应用程序体系结构,该体系结构针对可靠的云功能和边缘位置进行了优化。

请参阅使用翻译器容器时 支持的语言 列表。

  • 若要使用翻译器容器,必须提交在线请求并获得批准。 有关详细信息,请参阅下面的请求批准运行容器。
  • 与云产品/服务相比,翻译器容器支持的功能有限。 有关详细信息,请参阅 容器转换方法
  • 首先,需要一个有效的 Azure 帐户 。 如果没有帐户,可以 创建一个免费帐户

    还需要具备以下条件:

    Docker 引擎
    • 需要在 主计算机 上安装 Docker 引擎。 Docker 提供用于在 macOS Windows Linux 上配置 Docker 环境的包。 有关 Docker 和容器的基础知识,请参阅 Docker 概述
    • 必须将 Docker 配置为允许容器连接 Azure 并向其发送账单数据。
    • 在 Windows 上,还必须将 Docker 配置为支持 Linux 容器 。
    翻译器资源
    • 区域不是“全局”的 Azure 翻译器 资源、关联的 API 密钥和终结点 URI。 启动容器需要这两个值,可在资源概述页面上找到这两个值。
  • 密钥用于访问 Azure AI 资源。 不要共享你的密钥。 以安全方式存储密钥(例如,使用 Azure Key Vault 来存储)。 此外,我们建议定期重新生成这些密钥。 发出 API 调用只需一个密钥。 重新生成第一个密钥时,可以使用第二个密钥来持续访问服务。
  • 主机是运行 Docker 容器且基于 x64 的计算机。 它可以是本地计算机或 Azure 中的 Docker 托管服务,例如:

  • Azure Kubernetes 服务
  • Azure 容器实例
  • 部署到 Azure Stack Kubernetes 群集。 有关详细信息,请参阅 将 Kubernetes 部署到 Azure Stack
  • 容器要求和建议

    下表介绍了为翻译器容器分配的最小和建议的 CPU 核心数和内存量。

    请求批准以运行容器

    完成并提交 适用于封闭服务的 Azure AI 服务应用程序 ,以请求访问容器。

    通过该表单请求有关你、你的公司以及要使用该容器的用户方案的信息。 提交表单后,Azure AI 服务团队会对其进行评审,并在 10 个工作日内通过电子邮件向你发送决定。

  • 在此表单上,必须使用与 Azure 订阅 ID 关联的电子邮件地址。
  • 用于运行容器的 Azure 资源必须已使用批准的 Azure 订阅 ID 创建。
  • 请检查你的电子邮件(“收件箱”和“垃圾邮件”文件夹)以获取来自 Microsoft 的应用程序状态更新。
  • 获得批准后,便可以根据本文稍后所述从 Microsoft Container Registry (MCR) 下载该容器,然后运行该容器。

    如果你的 Azure 订阅尚未获得批准,则无法运行该容器。

    翻译器容器映像

    mcr.microsoft.com 容器注册表联合项中可以找到翻译器容器映像。 该映像驻留在 azure-cognitive-services/translator 存储库中,名为 text-translation 。 完全限定的容器映像名称为 mcr.microsoft.com/azure-cognitive-services/translator/text-translation:latest

    要使用最新版本的容器,可以使用 latest 标记。 可以 在 MCR 上找到标记 的完整列表。

    使用 docker 命令获取容器映像

  • 以下各节中的 docker 命令使用反斜杠 \ 作为行继续符。 根据主机操作系统的要求替换或删除字符。
  • 必须指定 EULA Billing ApiKey 选项运行容器;否则,该容器不会启动。
  • 使用 docker run 命令从 Microsoft 容器注册表下载容器映像并运行该影像。

    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
  • 接受最终用户协议 (EULA)
  • 配置计费终结点
  • 下载英语、法语、西班牙语、阿拉伯语和俄语的翻译模型
  • 退出后自动删除容器。 容器映像在主计算机上仍然可用。
  • 在同一主机上运行多个容器

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

    可以将此容器和不同的 Azure AI 容器一起在 HOST 上运行。 还可以运行同一 Azure AI 容器的多个容器。

    查询容器的翻译器终结点

    容器提供基于 REST 的翻译器终结点 API。 下面是一个示例请求:

    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 请求,你最终会得到“服务暂时不可用”这一响应。 等待容器准备就绪,然后重试。

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

    验证容器是否正在运行

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

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

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

    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}
    

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

    文本翻译代码示例

    使用 swagger 翻译文本

    英语 ↔ 德语

    导航到 swagger 页面:http://localhost:5000/swagger/index.html

  • 选择“POST/翻译”
  • 选择“试用”
  • 将 From 参数输入为 en
  • 将 To 参数输入为 de
  • 将 api-version 参数输入为 3.0
  • 在“文本”下,将 string 替换为以下 JSON
  • "text": "hello, how are you"

    选择“执行”,生成的翻译将输出到响应正文中 。 你应该会看到类似于下面的响应:

    "translations": [
              "text": "hallo, wie geht es dir",
              "to": "de"
    

    使用 Python 翻译文本

    import requests, json
    url = 'http://localhost:5000/translate?api-version=3.0&from=en&to=fr'
    headers = { 'Content-Type': 'application/json' }
    body = [{ 'text': 'Hello, how are you' }]
    request = requests.post(url, headers=headers, json=body)
    response = request.json()
    print(json.dumps(
        response,
        sort_keys=True,
         indent=4,
         ensure_ascii=False,
         separators=(',', ': ')))
    

    使用 C#/.NET 控制台应用翻译文本

    启动 Visual Studio,并创建新的控制台应用程序。 编辑 *.csproj 文件以添加 <LangVersion>7.1</LangVersion> 节点 - 指定 C# 7.1。 添加 Newtoonsoft.Json NuGet 包(版本 11.0.2)。

    Program.cs 中,将所有现有代码替换为以下脚本:

    using Newtonsoft.Json;
    using System;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    namespace TranslateContainer
        class Program
            const string ApiHostEndpoint = "http://localhost:5000";
            const string TranslateApi = "/translate?api-version=3.0&from=en&to=de";
            static async Task Main(string[] args)
                var textToTranslate = "Sunny day in Seattle";
                var result = await TranslateTextAsync(textToTranslate);
                Console.WriteLine(result);
                Console.ReadLine();
            static async Task<string> TranslateTextAsync(string textToTranslate)
                var body = new object[] { new { Text = textToTranslate } };
                var requestBody = JsonConvert.SerializeObject(body);
                var client = new HttpClient();
                using (var request =
                    new HttpRequestMessage
                        Method = HttpMethod.Post,
                        RequestUri = new Uri($"{ApiHostEndpoint}{TranslateApi}"),
                        Content = new StringContent(requestBody, Encoding.UTF8, "application/json")
                    // Send the request and await a response.
                    var response = await client.SendAsync(request);
                    return await response.Content.ReadAsStringAsync();
    

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

  • 翻译器为 Docker 提供 Linux 容器。
  • 可从容器注册表下载容器映像并在 Docker 中运行。
  • 可以使用 REST API 通过指定容器的主机 URI 来调用翻译器容器中的“翻译”操作。
  • 详细了解 Azure AI 容器

  •