你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
AI 工具链作员(KAITO)是一个托管加载项,可简化在 AKS 群集上运行开源和专用 AI 模型的体验。 KAITO 减少了载入模型和预配资源的时间,从而实现更快的 AI 模型原型制作和开发,而不是基础结构管理。
本文介绍如何启用 AI 工具链作员加载项,以及如何部署 AI 模型以在 AKS 上进行推理。
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
准备阶段
- 本文假定你对 Kubernetes 概念有基本的了解。 有关详细信息,请参阅 AKS 的 Kubernetes 核心概念。
- 有关 所有托管模型预设映像 和默认资源配置,请参阅 KAITO GitHub 存储库。
- AI 工具链作员加载项当前支持 KAITO 版本 0.4.4,请在考虑从 KAITO 模型存储库中选择的模型时注意这一点。
先决条件
如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
如果有多个 Azure 订阅,请确保选择正确的订阅,其中将使用 az account set 命令创建资源并对其进行收费。
注意
你的 Azure 订阅必须具有 GPU VM 配额,这些配额建议用于在你的 AKS 资源所在的同一 Azure 区域中进行模型部署。
安装并配置了 Azure CLI 版本 2.47.0 或更高版本。 运行
az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。已安装并配置 Kubernetes 命令行客户端 kubectl。 有关详细信息,请参阅安装 kubectl。
安装 Azure CLI 预览扩展
使用 az extension add 命令安装 Azure CLI 预览扩展。
az extension add --name aks-preview
使用 az extension update 命令确保拥有最新版本的扩展。
az extension update --name aks-preview
注册 AI 工具链操作器附加功能标志
使用 az feature register 命令注册 AIToolchainOperatorPreview 功能标志。
az feature register --namespace "Microsoft.ContainerService" --name "AIToolchainOperatorPreview"
只需几分钟时间即可完成注册。
使用 az feature show 命令验证注册。
az feature show --namespace "Microsoft.ContainerService" --name "AIToolchainOperatorPreview"
导出环境变量
若要简化本文中的配置步骤,可以使用以下命令定义环境变量。 请务必将占位符值替换为你自己的值。
export AZURE_SUBSCRIPTION_ID="mySubscriptionID" export AZURE_RESOURCE_GROUP="myResourceGroup" export AZURE_LOCATION="myLocation" export CLUSTER_NAME="myClusterName"
在 AKS 群集上启用 AI 工具链操作员加载项
以下部分介绍如何创建启用了 AI 工具链操作器加载项的 AKS 群集并部署默认托管的 AI 模型。
创建启用了 AI 工具链操作器加载项的 AKS 群集
使用 az group create 命令创建 Azure 资源组。
az group create --name $AZURE_RESOURCE_GROUP --___location $AZURE_LOCATION
使用带有 和
--enable-ai-toolchain-operator
标志的--enable-oidc-issuer
命令创建启用了 AI 工具链操作员加载项的 AKS 群集。az aks create --___location $AZURE_LOCATION \ --resource-group $AZURE_RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-oidc-issuer \ --enable-ai-toolchain-operator \ --generate-ssh-keys
注意
启用 AI 工具链操作员加载项后,AKS 会创建托管标识。 托管标识用于在托管 AKS 群集中创建 GPU 节点池。 需要按照以下部分中介绍的步骤手动设置适当的权限。
在现有的 AKS 群集上,可以使用 az aks update 命令启用 AI 工具链操作器加载项。
az aks update --name $CLUSTER_NAME \ --resource-group $AZURE_RESOURCE_GROUP \ --enable-oidc-issuer \ --enable-ai-toolchain-operator
连接到群集
-
az aks get-credentials --resource-group $AZURE_RESOURCE_GROUP --name $CLUSTER_NAME
使用
kubectl get
命令验证与群集之间的连接。kubectl get nodes
导出环境变量
使用以下命令导出 MC 资源组、主体 ID 标识和 KAITO 标识的环境变量:
export MC_RESOURCE_GROUP=$(az aks show --resource-group $AZURE_RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query nodeResourceGroup \ -o tsv) export PRINCIPAL_ID=$(az identity show --name "ai-toolchain-operator-${CLUSTER_NAME}" \ --resource-group $MC_RESOURCE_GROUP \ --query 'principalId' \ -o tsv) export KAITO_IDENTITY_NAME="ai-toolchain-operator-${CLUSTER_NAME}"
获取 AKS OpenID Connect (OIDC) 证书颁发者
获取 AKS OIDC 证书颁发者 URL 并将其导出为环境变量:
export AKS_OIDC_ISSUER=$(az aks show --resource-group $AZURE_RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query "oidcIssuerProfile.issuerUrl" \ -o tsv)
为服务主体创建角色分配
使用 az role assignment create 命令为服务主体创建新的角色分配。
az role assignment create --role "Contributor" \ --assignee $PRINCIPAL_ID \ --scope "/subscriptions/$AZURE_SUBSCRIPTION_ID/resourcegroups/$AZURE_RESOURCE_GROUP"
建立联合标识凭据
使用 az identity federated-credential create 命令在托管标识、AKS OIDC 证书颁发者和使用者之间创建联合标识凭据。
az identity federated-credential create --name "kaito-federated-identity" \ --identity-name $KAITO_IDENTITY_NAME \ -g $MC_RESOURCE_GROUP \ --issuer $AKS_OIDC_ISSUER \ --subject system:serviceaccount:"kube-system:kaito-gpu-provisioner" \ --audience api://AzureADTokenExchange
注意
在此步骤完成之前,
gpu-provisioner
控制器 Pod 将保持崩溃循环状态。 创建联合凭据后,gpu-provisioner
控制器 Pod 将达到运行状态,你将能够验证部署是否在以下步骤中运行。
验证部署是否正在运行
使用
kubectl rollout restart
命令在 Pod 上重启 KAITO GPU 预配程序部署:kubectl rollout restart deployment/kaito-gpu-provisioner -n kube-system
使用以下命令验证 GPU 预配程序部署是否正在运行
kubectl get
:kubectl get deployment -n kube-system | grep kaito
部署默认托管 AI 模型
使用
kubectl apply
命令从 KAITO 模型存储库部署 Falcon 7B-instruct 模型预设。kubectl apply -f https://raw.githubusercontent.com/Azure/kaito/main/examples/inference/kaito_workspace_falcon_7b-instruct.yaml
使用
kubectl get
命令跟踪工作区中的实时资源更改。kubectl get workspace workspace-falcon-7b-instruct -w
注意
跟踪 KAITO 工作区部署时,请注意,计算机准备可能需要长达 10 分钟,工作区准备时间最长为 20 分钟,具体取决于模型的大小。
使用
kubectl get svc
命令检查你的推理服务,并获取其 IP 地址。export SERVICE_IP=$(kubectl get svc workspace-falcon-7b-instruct -o jsonpath='{.spec.clusterIP}')
使用 OpenAI 聊天完成 API 格式,基于你选择的示例输入测试 Falcon 7B-instruct 推理服务:
kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- curl -X POST http://$SERVICE_IP/v1/completions -H "Content-Type: application/json" \ -d '{ "model": "falcon-7b-instruct", "prompt": "What is Kubernetes?", "max_tokens": 10 }'
清理资源
如果不再需要这些资源,请删除它们,以免产生额外的 Azure 计算费用。
使用
kubectl delete workspace
命令删除 KAITO 工作区。kubectl delete workspace workspace-falcon-7b-instruct
需要手动删除 KAITO 部署预配的 GPU 节点池。 使用Falcon-7b instruct workspace创建的节点标签,通过
az aks nodepool list
命令获取节点池名称。 在此示例中,节点标签为“kaito.sh/workspace”:“workspace-falcon-7b-instruct”。az aks nodepool list --resource-group $AZURE_RESOURCE_GROUP --cluster-name $CLUSTER_NAME
从 AKS 群集中删除具有此名称的节点池,并为要删除的每个 KAITO 工作区重复本部分中的步骤。
常见故障排除方案
应用 KAITO 模型推理工作区后,资源就绪状态和工作区条件可能不会更新为 True
,原因如下:
你可能没有足够的权限在 AKS 群集上运行。 确保已为
ai-toolchain-operator-$CLUSTER_NAME
标识分配了对你的 Azure 资源组的Contributor
角色。az role assignment list
运行命令并确认结果为非空:az role assignment list --scope /subscriptions/$AZURE_SUBSCRIPTION_ID/resourceGroups/$AZURE_RESOURCE_GROUP
您的 Azure 订阅未达到在您的 KAITO 工作区中指定的最低 GPU 实例类型的配额。 需要在 Azure 订阅中 请求增加 GPU VM 系列的配额。
GPU 实例类型在你的 AKS 区域中不可用。 确认 特定区域中的 GPU 实例可用性 ,如果 GPU VM 系列不可用,请切换 Azure 区域。
后续步骤
详细了解 KAITO 模型部署选项 :
- 在 AKS 上使用 AI 工具链操作员加载项来微调模型。
- 了解 AKS 上的 AI 管道的 MLOps 最佳做法
- 在 AKS 上载入 用于 KAITO 推理的自定义模型 。