使用 AI 工具链操作员在 Azure Kubernetes 服务 (AKS) 上部署 AI 模型(预览版)
AI 工具链操作员 (KAITO) 是 AKS 的托管加载项,可简化在 AKS 群集上运行 OSS AI 模型的体验。 AI 工具链操作员会自动预配必要的 GPU 节点,并将关联的推理服务器设置为 AI 模型的终结点服务器。 使用此加载项可缩短加入时间,使你能够专注于 AI 模型的使用和开发,而不是基础结构设置。
本文介绍如何启用 AI 工具链操作员加载项并在 AKS 上部署 AI 模型。
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
准备阶段
- 本文假定你对 Kubernetes 概念有基本的了解。 有关详细信息,请参阅 AKS 的 Kubernetes 核心概念。
- 有关所有托管的模型推理映像和建议的基础结构设置,请参阅 KAITO GitHub 存储库。
- AI 工具链操作器加载项当前支持 KAITO 版本 0.1.0,请在考虑从 KAITO 模型存储库中选择模型时注意这一点。
先决条件
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
如果有多个 Azure 订阅,请确保选择正确的订阅,其中将使用 az account set 命令创建资源并对其进行收费。
注意
使用的订阅必须具有用于部署所选模型的 GPU VM 配额。
安装并配置了 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
标志的 az aks create 命令创建启用了 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 命令将
kubectl
配置为连接到你的群集。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
使用
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
注意
跟踪工作区中的实时资源更改时,请注意,计算机可能需要长达 10 分钟的准备时间,工作区准备时间最长为 20 分钟。
使用
kubectl get svc
命令检查服务并获取服务 IP 地址。export SERVICE_IP=$(kubectl get svc workspace-falcon-7b-instruct -o jsonpath='{.spec.clusterIP}')
使用以下
curl
命令,使用所选的示例输入运行 Falcon 7B-instruct 模型:kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- curl -X POST http://$SERVICE_IP/chat -H "accept: application/json" -H "Content-Type: application/json" -d "{\"prompt\":\"YOUR QUESTION HERE\"}"
清理资源
如果不再需要这些资源,请删除它们,以免产生额外的 Azure 计算费用。
使用
kubectl delete workspace
命令删除 KAITO 工作区及其关联的资源。kubectl delete workspace workspace-falcon-7b-instruct
后续步骤
有关更多模型部署选项,请参阅上游 KAITO GitHub 存储库。
- 了解 AKS 上的适用于 AI 和机器学习工作流的 MLOps
- 了解 AKS 上的 AI 管道的 MLOps 最佳做法
- 了解如何在 AKS 上部署 GPU 工作负载