你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
NVIDIA 推理微服务 (NIC) 是经过优化、容器化的 AI 推理微服务,可简化和加速生成 AI 应用程序。 这些模型预先打包、可缩放且经过性能优化,可在 Azure 容器应用上作为安全终结点直接部署。 将 Azure 容器应用与无服务器 GPU 配合使用时,可以高效运行这些 NIC,而无需管理底层基础结构。
本教程介绍如何使用无服务器 GPU 将 Llama3 NVIDIA NIM 部署到 Azure 容器应用。
本教程使用 Azure 容器注册表的高级实例来提高使用无服务器 GPU 时的冷启动性能。 如果不想使用高级 Azure 容器注册表,请确保将本教程中的 az acr create
命令修改为将 --sku
设置为 basic
。
先决条件
资源 | DESCRIPTION |
---|---|
Azure 帐户 | 具有活动订阅的 Azure 帐户。 如果还没有,则可以免费创建一个。 |
Azure CLI(Azure 命令行界面) | 安装 Azure CLI。 |
NVIDIA NGC API 密钥 | 可以从 NVIDIA GPU Cloud (NGC) 网站获取 API 密钥。 |
设置
若要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。
az login
为了确保运行最新版本的 CLI,请运行 upgrade 命令。
az upgrade
接下来,安装或更新适用于 CLI 的 Azure 容器应用扩展。
如果在 Azure CLI 中运行 az containerapp
命令,或在 PowerShell 中运行 Az.App
模块中的 cmdlet 时收到有关缺少参数的错误,请确保已安装最新版本的 Azure 容器应用扩展。
az extension add --name containerapp --upgrade
注释
从 2024 年 5 月开始,Azure CLI 扩展不再默认启用预览功能。 要访问容器应用预览功能,请使用 --allow-preview true
安装容器应用扩展。
az extension add --name containerapp --upgrade --allow-preview true
安装当前扩展或模块后,请注册 Microsoft.App
和 Microsoft.OperationalInsights
命名空间。
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
通过为资源组命名和设置位置来设置环境变量。
RESOURCE_GROUP="my-resource-group" LOCATION="swedencentral"
接下来,生成唯一的容器注册表名称。
SUFFIX=$(head /dev/urandom | tr -dc 'a-z0-9' | head -c 6) ACR_NAME="mygpututorialacr${SUFFIX}"
最后,将变量设置为给环境命名并标识环境、工作负载配置文件类型、容器应用名称和容器。
CONTAINERAPPS_ENVIRONMENT="my-environment-name" GPU_TYPE="Consumption-GPU-NC24-A100" CONTAINER_APP_NAME="llama3-nim" CONTAINER_AND_TAG="llama-3.1-8b-instruct:latest"
创建 Azure 资源组
创建一个资源组来组织与你的容器应用部署相关的服务。
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
创建 Azure 容器注册表(ACR)。
注释
本教程使用高级 Azure 容器注册表来提高使用无服务器 GPU 时的冷启动性能。 如果不想使用高级 Azure 容器注册表,请修改以下命令并将
--sku
设置为basic
。az acr create \ --resource-group $RESOURCE_GROUP \ --name $ACR_NAME \ --location $LOCATION \ --sku premium
拉取、标记和推送映像
接下来,从 NVIDIA GPU Cloud 拉取映像并推送到 Azure 容器注册表。
注释
每个 NVIDIA NIC 都有自己的硬件要求。 请确保所选的 GPU 类型支持所选的 NIM。 本教程中使用的 Llama3 NIM 可以在 NVIDIA A100 GPU 上运行。
向 NVIDIA 容器注册表进行身份验证。
docker login nvcr.io
运行此命令后,登录过程会提示输入用户名。 输入用户名值“$oauthtoken”。
随后,系统会提示输入密码。 在此处输入 NVIDIA NGC API 密钥。 向 NVIDIA 注册表进行身份验证后,即可向 Azure 注册表进行身份验证。
向 Azure 容器注册表进行身份验证。
az acr login --name $ACR_NAME
拉取 Llama3 NIM 映像。
docker pull nvcr.io/nim/meta/$CONTAINER_AND_TAG
为映像添加标记。
docker tag nvcr.io/nim/meta/$CONTAINER_AND_TAG $ACR_NAME.azurecr.io/$CONTAINER_AND_TAG
向 Azure 容器注册表推送映像。
docker push $ACR_NAME.azurecr.io/$CONTAINER_AND_TAG
启用工件流式处理(建议但可选)
容器应用运行时,它会从容器注册表拉取容器。 如果映像较大,例如 AI 工作负载中的映像,则此映像拉取可能需要一些时间。 通过启用工件流式处理,可以缩短所需的时间,如果未启用工件流式处理,容器应用可能需要很长时间才能启动。 使用以下步骤启用工件流式处理。
注释
以下命令可能需要几分钟才能完成。
在容器注册表上启用工件流式处理。
az acr artifact-streaming update \ --name $ACR_NAME \ --repository llama-3.1-8b-instruct \ --enable-streaming True
在容器映像上启用工件流式处理。
az acr artifact-streaming create \ --name $ACR_NAME \ --image $CONTAINER_AND_TAG
创建容器应用
接下来,使用 NVIDIA GPU Cloud API 密钥创建容器应用。
创建容器应用。
az containerapp env create \ --name $CONTAINERAPPS_ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --enable-workload-profiles
将 GPU 工作负载配置文件添加到环境。
az containerapp env workload-profile add \ --resource-group $RESOURCE_GROUP \ --name $CONTAINERAPPS_ENVIRONMENT \ --workload-profile-type $GPU_TYPE \ --workload-profile-name LLAMA_PROFILE
创建容器应用。
az containerapp create \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $CONTAINERAPPS_ENVIRONMENT \ --image $ACR_NAME.azurecr.io/$CONTAINER_AND_TAG \ --cpu 24 \ --memory 220 \ --target-port 8000 \ --ingress external \ --secrets ngc-api-key=<PASTE_NGC_API_KEY_HERE> \ --env-vars NGC_API_KEY=secretref:ngc-api-key \ --registry-server $ACR_NAME.azurecr.io \ --workload-profile-name LLAMA_PROFILE \ --query properties.configuration.ingress.fqdn
此命令返回容器应用的 URL。 在文本编辑器中留出此值,以便在后续命令中使用。
验证应用程序是否正常工作
可以通过向应用程序发送请求 POST
来验证部署是否成功。
运行此命令之前,请确保将 <YOUR_CONTAINER_APP_URL>
URL 替换为上一个命令返回的容器应用 URL。
curl -X POST \
'http://<YOUR_CONTAINER_APP_URL>/v1/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "meta/llama-3.1-8b-instruct",
"prompt": [{"role":"user", "content":"Once upon a time..."}],
"max_tokens": 64
}'
使用卷装载提高性能(可选)
在启动和使用工件流式处理与 Azure 容器注册表时,Azure 容器应用仍在启动时从容器注册表拉取映像。 即使优化了工件流式处理,此操作也会导致冷启动。
为了缩短冷启动时间,许多 NIM 提供了一个卷装载路径,用于将映像存储在缓存目录中。 可以使用此缓存目录来存储模型权重以及 NIM 运行所需的其他文件。
若要为 Llama3 NIM 设置卷装载,需要在 NVIDIA Llama-3.1-8b 文档中指定的 ./opt/nim/.cache
上设置卷装载。 为此,请遵循卷装载教程中的步骤并将卷装载路径设置为 /opt/nim/.cache
。
清理资源
如果不打算继续使用此应用程序,请运行以下命令,删除资源组以及本教程中创建的所有资源。
谨慎
以下命令删除指定的资源组及其包含的所有资源。 此命令还会删除此资源组中存在的本教程范围外的任何资源。
az group delete --name $RESOURCE_GROUP
小提示
遇到问题? 通过在 Azure 容器应用存储库中创建问题,在 GitHub 上告知我们。