你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将关键短语提取容器部署到 Azure Kubernetes 服务
了解如何将关键短语提取 Docker 容器映像部署到 AKS Azure Kubernetes 服务 (AKS)。 此过程演示如何创建语言资源、如何关联容器映像,以及如何从浏览器开展这两者之间的业务流程。 使用容器可以将你的关注点从管理基础结构转移到应用程序开发上。 虽然本文使用关键短语提取容器作为示例,但你可以将此过程用于适用于 Azure AI 语言提供的其他容器
先决条件
此过程要求必须在本地安装和运行多个工具。 请勿使用 Azure Cloud Shell。 需要满足以下条件:
- Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- 文本编辑器,例如 Visual Studio Code。
- 已安装 Azure CLI。
- 已安装 Kubernetes CLI。
- 具有适当定价层的 Azure 资源。 并非所有定价层都适用于此容器:
- 仅具有 F0 或标准定价层的 Azure AI 语言资源。
- 具有 S0 定价层的 Azure AI 服务资源。
创建 Azure AI 语言资源
登录到 Azure 门户。
选择“创建资源”,然后中转到“AI + 机器学习” >“语言”。 或者,转到创建语言资源。
输入所有所需设置:
设置 值 名称 输入名称(2-64 个字符)。 订阅 选择适当的订阅。 位置 选择一个邻近的位置。 定价层 输入 S(标准定价层)。 资源组 选择可用的资源组。 选择“创建”,然后等待创建资源。 浏览器将自动重定向到新创建的资源页。
收集配置的
endpoint
和 API 密钥:门户中的“资源”选项卡 设置 “值” 概述 端点 复制终结点。 其外观类似于 https://my-resource.cognitiveservices.azure.com/text/analytics/v3.0
。“键” API 密钥 复制两个密钥中的一个。 它是一个 32 个字符的字母数字字符串(不包含空格或短划线):< xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>。
创建 Azure Kubernetes 服务群集资源
转到 Azure Kubernetes 服务,然后选择“创建”。
在“基本信息”选项卡中输入以下信息:
设置 “值” 订阅 选择相应的订阅。 资源组 选择可用的资源组。 Kubernetes 群集名称 输入名称(小写)。 区域 选择附近的位置。 Kubernetes 版本 标记为“(默认值)”的任何值。 DNS 名称前缀 自动创建,但可以重写。 节点大小 标准 DS2 v2: 2 vCPUs
,7 GB
节点计数 将滑块留在默认值的位置。 在“节点池”选项卡上,将“虚拟节点”和“VM 规模集”设置为其默认值。
在“身份验证”选项卡上,将“服务主体”和“启用 RBAC”设为其默认值。
在“网络”选项卡上,输入以下选择:
设置 值 HTTP 应用程序路由 否 网络配置 基本 在“集成”选项卡上,确保将“容器监视”设置为“已启用”,将“Log Analytics 工作区”保留为默认值。
在“标记”选项卡上,暂时让名称/值对保留空白。
选择“查看并创建”。
通过验证后,选择“创建”。
注意
如果验证失败,可能是由于“服务主体”错误。 返回到“身份验证”选项卡,然后回到“查看 + 创建”,应该会在其中运行验证,然后验证会通过。
将关键短语提取容器部署到 AKS 群集
打开 Azure CLI,登录到 Azure。
az login
登录到 AKS 群集。 将
your-cluster-name
和your-resource-group
替换为相应的值。az aks get-credentials -n your-cluster-name -g -your-resource-group
此命令在运行后会报告类似以下内容的消息:
Merged "your-cluster-name" as current context in /home/username/.kube/config
警告
如果在 Azure 帐户上有多个可用订阅,而
az aks get-credentials
命令返回错误,则表明你使用了错误的订阅,这是一个常见问题。 将 Azure CLI 会话的上下文设置为使用你在创建这些资源时使用的订阅,然后重试。az account set -s subscription-id
打开所选的文本编辑器。 此示例使用 Visual Studio Code。
code .
在文本编辑器中创建名为“keyphrase.yaml”的新文件,然后将以下 YAML 粘贴到其中。 请确保将
billing/value
和apikey/value
替换为自己的信息。apiVersion: apps/v1beta1 kind: Deployment metadata: name: keyphrase spec: template: metadata: labels: app: keyphrase-app spec: containers: - name: keyphrase image: mcr.microsoft.com/azure-cognitive-services/keyphrase ports: - containerPort: 5000 resources: requests: memory: 2Gi cpu: 1 limits: memory: 4Gi cpu: 1 env: - name: EULA value: "accept" - name: billing value: # {ENDPOINT_URI} - name: apikey value: # {API_KEY} --- apiVersion: v1 kind: Service metadata: name: keyphrase spec: type: LoadBalancer ports: - port: 5000 selector: app: keyphrase-app
重要
完成后,请记住将密钥从代码中删除,并且永远不要公开发布该密钥。 对于生产来说,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关详细信息,请参阅 Azure AI 服务安全性一文。
保存该文件并关闭文本编辑器。
运行 Kubernetes
apply
命令,将 keyphrase.yaml 文件作为其目标:kubectl apply -f keyphrase.yaml
当命令成功应用部署配置以后,会出现类似于以下输出的消息:
deployment.apps "keyphrase" created service "keyphrase" created
验证 Pod 是否已部署:
kubectl get pods
Pod 的运行状态输出:
NAME READY STATUS RESTARTS AGE keyphrase-5c9ccdf575-mf6k5 1/1 Running 0 1m
验证服务是否可用,然后获取 IP 地址。
kubectl get services
Pod 中 keyphrase 服务的运行状态输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2m keyphrase LoadBalancer 10.0.100.64 168.61.156.180 5000:31234/TCP 2m
验证关键短语提取容器实例
选择“概述”选项卡,并复制 IP 地址。
打开新的浏览器选项卡,并输入 IP 地址。 例如,输入
http://<IP-address>:5000 (http://55.55.55.55:5000
)。 此时将显示容器的主页,让你知道该容器正在运行。选择“服务 API 说明”链接,以转到该容器的 Swagger 页。
选择任意一个 POST API,然后选择“试用”。此时将显示参数,其中包括以下示例输入:
{ "documents": [ { "id": "1", "text": "Hello world" }, { "id": "2", "text": "Bonjour tout le monde" }, { "id": "3", "text": "La carretera estaba atascada. Había mucho tráfico el día de ayer." }, { "id": "4", "text": ":) :( :D" } ] }
将该输入替换为以下 JSON 内容:
{ "documents": [ { "language": "en", "id": "7", "text": "I was fortunate to attend the KubeCon Conference in Barcelona, it is one of the best conferences I have ever attended. Great people, great sessions and I thoroughly enjoyed it!" } ] }
将“showStats”设置为
true
。选择“执行”以确定文本的情绪。
在容器中打包的模型会生成范围为从 0 到 1 的分数,其中,0 表示消极,而 1 表示积极。
返回的 JSON 响应包括更新的文本输入的情绪:
{ "documents": [ { "id": "7", "keyPhrases": [ "Great people", "great sessions", "KubeCon Conference", "Barcelona", "best conferences" ], "statistics": { "charactersCount": 176, "transactionsCount": 1 } } ], "errors": [], "statistics": { "documentsCount": 1, "validDocumentsCount": 1, "erroneousDocumentsCount": 0, "transactionsCount": 1 } }
我们现在可以将响应有效负载的 JSON 数据的文档 id
关联到原始请求有效负载文档 id
。 生成的文档有一个 keyPhrases
数组,其中包含已从相应输入文档中提取的关键短语的列表。 此外,每个生成的文档都有各种统计信息(例如 characterCount
和 transactionCount
)。
后续步骤
- 使用更多 Azure AI 容器
- 关键短语提取概述