注意
对于 CLU 容器,单个同步 API 调用的数据限制是每个文档 5,120 个字符,且每次最多调用 10 个文档。
利用容器能够在自己的基础结构上托管 CLU API。 如果安全或数据管理要求不能通过远程调用 CLU 检测来完成,则容器可能是一个不错的选择。
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
先决条件
使用 CLU 容器前,必须满足以下先决条件。
- 有效的 Azure 订阅。 如果没有订阅,请创建一个试用帐户。
- 在主机上安装 Docker。 必须将 Docker 配置为允许容器连接 Azure 并向其发送账单数据。
- 在 Windows 上,还必须将 Docker 配置为支持 Linux 容器。
- 应基本了解 Docker 概念。
- 一个语言资源
收集必需的参数
所有 Azure AI 容器都需要三个主要参数。 Microsoft 软件许可条款的值必须为 accept。 还需要终结点 URI 和 API 密钥。
终结点 URI
可在 Azure 门户中相应 Azure AI 服务资源的“概览”页上找到 {ENDPOINT_URI} 值。 转到“概述”页,将鼠标悬停在终结点上就会显示一个“复制到剪贴板” 图标。 在需要的地方复制并使用终结点。
键
{API_KEY} 值用于启动容器,可在 Azure 门户中相应 Azure AI 服务资源的“密钥”页上找到。 转到“密钥”页,选择“复制到剪贴板” 图标。
重要
这些订阅密钥用于访问 Azure AI 服务 API。 请勿共享密钥。 安全地存储它们。 例如,使用 Azure Key Vault。 此外,建议定期重新生成这些密钥。 发出 API 调用只需一个密钥。 重新生成第一个密钥时,可以使用第二个密钥继续访问服务。
主机要求和建议
主机是运行 Docker 容器且基于 x64 的计算机。 它可以是本地计算机或 Azure 中的 Docker 托管服务,例如:
- Azure Kubernetes 服务。
- Azure 容器实例。
- 部署到 Azure Stack 的 Kubernetes 群集。 有关详细信息,请参阅将 Kubernetes 部署到 Azure Stack。
下表显示了可用容器的最小资源规范和建议资源规范。 每个 CPU 核心必须至少为 2.6 千兆赫 (GHz) 或更快。
建议使用具备 AVX-512 指令集的 CPU,以获得最佳体验(性能和准确性)。
| 处理器 | 最小主机规格 | 推荐主机规格 |
|---|---|---|
| 中央处理器 | 1 核、2 GB 内存 | 4 核、8 GB 内存 |
CPU 核心和内存对应于 --cpus 和 --memory 设置,用作 docker run 命令的一部分。
导出对话语言理解模型
在继续运行 docker 映像之前,需要导出自己经过训练的模型,将其公开给容器。 使用以下命令提取模型,并将占位符替换为自己的值:
| 占位符 | 价值 | 格式或示例 |
|---|---|---|
| {API_KEY} | 语言资源的密钥。 可以在 Azure 门户中资源的“密钥和终结点”页上找到此项。 | xxxxxxxxx |
| {ENDPOINT_URI} | 用于访问对话语言理解 API 的终结点。 可以在 Azure 门户中资源的“密钥和终结点”页上找到此项。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
| {PROJECT_NAME} | 包含要导出的模型的项目的名称。 可以在 Azure Language Studio 门户的“项目”选项卡上找到它。 | 我的项目 |
| {TRAINED_MODEL_NAME} | 要导出的训练模型的名称。 可以在 Azure Language Studio 门户中项目下的“模型评估”选项卡上找到训练的模型 | myTrainedModel |
| {EXPORTED_MODEL_NAME} | 要为新导出的模型分配的名称。 | 我的导出模型 |
curl --location --request PUT '{ENDPOINT_URI}/language/authoring/analyze-conversations/projects/{PROJECT_NAME}/exported-models/{EXPORTED_MODEL_NAME}?api-version=2024-11-15-preview' \
--header 'Ocp-Apim-Subscription-Key: {API_KEY}' \
--header 'Content-Type: application/json' \
--data-raw '{
"TrainedModelLabel": "{TRAINED_MODEL_NAME}"
}'
使用 docker pull 获取容器映像
在 mcr.microsoft.com 容器注册表联合项中可以找到 CLU 容器映像。 该映像驻留在 azure-cognitive-services/language/ 存储库中,名为 clu。 完全限定的容器映像名称为 mcr.microsoft.com/azure-cognitive-services/language/clu
若要使用最新版本的容器,可以使用用于英语的 latest 标记。 还可以使用 MCR 上的标记查找支持的语言的容器的完整列表。
最新的 CLU 检测容器以多种语言提供。 若要下载英语容器镜像,请使用以下命令:
docker pull mcr.microsoft.com/azure-cognitive-services/language/clu:latest
提示
可以使用 docker images 命令列出下载的容器映像。 例如,以下命令以表格列出每个下载的容器映像的 ID、存储库和标记:
docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID REPOSITORY TAG
<image-id> <repository-path/name> <tag-name>
在“下载模型”模式下运行容器
创建导出的模型后,用户必须运行容器来下载专门为导出的模型创建的部署包。
| 占位符 | 价值 | 格式或示例 |
|---|---|---|
| {API_KEY} | 语言资源的密钥。 可以在 Azure 门户中资源的“密钥和终结点”页上找到此项。 | 请参阅 Azure 门户 |
| {ENDPOINT_URI} | 用于访问 API 的终结点。 可以在 Azure 门户中资源的“密钥和终结点”页上找到此项。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
| {IMAGE_TAG} | 映像标记,表示要运行的容器的语言。 确保标记与 docker pull 使用的命令匹配。 |
最新 |
| {LOCAL_CLU_PORT} | 在本地计算机上为容器分配的端口号。 | 五千 |
| {LOCAL_MODEL_DIRECTORY} | 主机中保存导出模型的绝对目录。 | C:\usr\local\myDeploymentPackage |
| {PROJECT_NAME} | 导出模型所属项目的名称 | 我的项目 |
| {EXPORTED_MODEL_NAME} | 要下载的导出模型 | 我的导出模型 |
docker run --rm -it -p {LOCAL_CLU_PORT}:80 \
mcr.microsoft.com/azure-cognitive-services/language/clu:{IMAGE_TAG} \
-v {LOCAL_MODEL_DIRECTORY}:/DeploymentPackage \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY} \
downloadmodel \
projectName={PROJECT_NAME} \
exportedModelName={EXPORTED_MODEL_NAME}
请勿更改下载的文件。 即使是更改名称或文件夹结构,也可能会影响容器的完整性并导致其中断。
重复上述步骤以下载需要测试的模型数量。 模型可以属于不同的项目,并且具有不同的(导出)模型名称。
通过 docker run 运行容器
一旦容器位于主机上,请使用 docker run 命令运行容器。 容器会继续运行,直至用户将其停止。 用你自己的值替换占位符
重要
- 以下各节中的 docker 命令使用反斜杠
\作为行继续符。 根据主机操作系统的要求替换或移除反斜杠。 - 必须指定
Eula、Billing和ApiKey选项才能运行容器;否则,容器不会启动。 有关详细信息,请参阅计费。
若要运行 CLU 容器,请执行以下 docker run 命令。 用你自己的值替换占位符
| 占位符 | 价值 | 格式或示例 |
|---|---|---|
| {API_KEY} | 语言资源的密钥。 可以在 Azure 门户中资源的“密钥和终结点”页上找到此项。 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| {ENDPOINT_URI} | 用于访问 API 的终结点。 可以在 Azure 门户中资源的“密钥和终结点”页上找到此项。 | https://<your-custom-subdomain>.cognitiveservices.azure.cn |
| {IMAGE_TAG} | 映像标记,表示要运行的容器的语言。 确保标记与 docker pull 使用的命令匹配。 |
latest |
| {LOCAL_CLU_PORT} | 在本地计算机上为容器分配的端口号。 | 五千 |
| {LOCAL_NER_PORT} | 容器的 NER 端口号。 请参阅“运行 NER 容器”部分。 |
5001 (必须不同于端口号) |
| {LOCAL_LOGGING_DIRECTORY} | 主机中保存日志的绝对目录。 | C:\usr\local\mylogs |
| {LOCAL_MODEL_DIRECTORY} | 主机中保存导出模型的绝对目录。 | C:\usr\local\myDeploymentPackage |
docker run --rm -it -p 5000:5000 --memory 8g --cpus 1 \
mcr.microsoft.com/azure-cognitive-services/language/clu:{IMAGE_TAG} \
Eula=accept \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY}
此命令:
- 从容器映像运行 CLU 容器
- 分配一个 CPU 核心和 8 GB 内存
- 公开
TCP端口 5000,并为容器分配伪 TTY - 退出后自动删除容器。 容器映像在主计算机上仍然可用。
在同一主机上运行多个容器
若要使用公开端口运行多个容器,请确保在运行每个容器时使用不同的公开端口。 例如,在端口 5000 上运行第一个容器,在端口 5001 上运行第二个容器。
可以让此容器和其他 Azure AI 服务容器一起在主机上运行。 此外,还可以让同一 Azure AI 服务容器的多个容器一起运行。
运行命名实体识别 (NER) 容器
CLU 依赖 NER 来处理预生成实体。 如果用户决定不集成 NER,CLU 容器也能正常工作。 通过 CLU 访问时,NER 计费功能是关闭的,因此除非直接调用 NER 容器,否则不会产生额外的费用。
在 CLU 容器中设置 NER
- 遵循 NER 容器文档。
- 运行 CLU 容器时,确保设置参数
Ner_Url,以便Ner_Url=http://host.docker.internal:{LOCAL_NER_PORT}
查询容器的预测终结点
容器提供了基于 REST 的查询预测终结点 API。
为容器 API 使用主机 http://localhost:5000。
验证容器是否正在运行
有几种方法可用于验证容器是否正在运行。 找到相关容器的外部 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 标头和正文格式。 |
有关如何调用 CLU 的信息,请参阅我们的指南。
停止容器
若要关闭容器,请在运行容器的命令行环境中选择 Ctrl+C。
故障排除
如果同时运行启用了输出 装载 和日志记录的容器,容器将生成日志文件。 日志文件可帮助你排查启动期间或容器运行时发生的任何问题。
提示
如需更多的故障排除信息和指南,请参阅 Azure AI 容器常见问题解答 (FAQ)。
计费
CLU容器使用 Azure 帐户中的“语言”资源向 Azure 发送账单信息。
对该容器的查询在用于 ApiKey 参数的 Azure 资源的定价层计费。
Azure AI 服务容器在未连接到计量或计费终结点的情况下无权运行。 必须始终让容器可以向计费终结点传送计费信息。 Azure AI 服务容器不会将客户数据(例如,正在分析的图像或文本)发送给 Azure。
连接到 Azure
容器需要计费参数值才能运行。 这些值使容器可以连接到计费终结点。 容器约每 10 到 15 分钟报告一次使用情况。 如果容器未在允许的时间范围内连接到 Azure,容器将继续运行,但不会为查询提供服务,直到计费终结点恢复。 尝试连接按 10 到 15 分钟的相同时间间隔进行 10 次。 如果无法在 10 次尝试内连接到计费终结点,容器会停止处理请求。
计费参数
当以下三个选项都提供了有效值时,docker run 命令会启动容器:
| 选项 | 说明 |
|---|---|
ApiKey |
用于跟踪账单信息的 Azure AI 服务资源的 API 密钥。 必须将此选项的值设置为 Billing 中指定的已预配资源的 API 密钥。 |
Billing |
用于跟踪账单信息的 Azure AI 服务资源的终结点。 必须将此选项的值设置为已预配的 Azure 资源的终结点 URI。 |
Eula |
表示已接受容器的许可条款。 此选项的值必须设置为 accept。 |
有关这些选项的详细信息,请参阅配置容器。
总结
在本文中,我们已学习相关的概念,以及下载、安装和运行 CLU 容器的工作流。 综上所述:
- CLU 为 Docker 提供 Linux 容器
- 从 Microsoft 容器注册表 (MCR) 下载容器映像。
- 容器映像在 Docker 中运行。
- 必须在实例化容器时指定账单信息。
重要
如果未连接到 Azure 进行计量,则无法授权并运行 Azure AI 容器。 客户必须允许容器始终将计费信息传达给计量服务。 Azure AI 容器不会将客户数据(例如,正在分析的文本)发送给 Microsoft。
后续步骤
- 请参阅配置容器了解配置设置。