使用 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 CLI 预览扩展

  1. 使用 az extension add 命令安装 Azure CLI 预览扩展。

    az extension add --name aks-preview
    
  2. 使用 az extension update 命令确保拥有最新版本的扩展。

    az extension update --name aks-preview
    

注册 AI 工具链操作器附加功能标志

  1. 使用 az feature register 命令注册 AIToolchainOperatorPreview 功能标志。

    az feature register --namespace "Microsoft.ContainerService" --name "AIToolchainOperatorPreview"
    

    只需几分钟时间即可完成注册。

  2. 使用 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 群集

  1. 使用 az group create 命令创建 Azure 资源组。

    az group create --name ${AZURE_RESOURCE_GROUP} --location ${AZURE_LOCATION}
    
  2. 使用带有 --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 节点池。 需要按照以下部分中介绍的步骤手动设置适当的权限。

  3. 在现有的 AKS 群集上,可以使用 az aks update 命令启用 AI 工具链操作器加载项。

    az aks update --name ${CLUSTER_NAME} \
            --resource-group ${AZURE_RESOURCE_GROUP} \
            --enable-oidc-issuer \
            --enable-ai-toolchain-operator
    

连接到群集

  1. 使用 az aks get-credentials 命令将 kubectl 配置为连接到你的群集。

    az aks get-credentials --resource-group ${AZURE_RESOURCE_GROUP} --name ${CLUSTER_NAME}
    
  2. 使用 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 将达到运行状态,你将能够验证部署是否在以下步骤中运行。

验证部署是否正在运行

  1. 使用 kubectl rollout restart 命令在 Pod 上重启 KAITO GPU 预配程序部署:

    kubectl rollout restart deployment/kaito-gpu-provisioner -n kube-system
    
  2. 使用 kubectl get 命令验证部署是否正在运行:

    kubectl get deployment -n kube-system | grep kaito
    

部署默认托管 AI 模型

  1. 使用 kubectl apply 命令从 KAITO 模型存储库部署 Falcon 7B-instruct 模型。

    kubectl apply -f https://raw.githubusercontent.com/Azure/kaito/main/examples/inference/kaito_workspace_falcon_7b-instruct.yaml
    
  2. 使用 kubectl get 命令跟踪工作区中的实时资源更改。

    kubectl get workspace workspace-falcon-7b-instruct -w
    

    注意

    跟踪工作区中的实时资源更改时,请注意,计算机可能需要长达 10 分钟的准备时间,工作区准备时间最长为 20 分钟。

  3. 使用 kubectl get svc 命令检查服务并获取服务 IP 地址。

    export SERVICE_IP=$(kubectl get svc workspace-falcon-7b-instruct -o jsonpath='{.spec.clusterIP}')
    
  4. 使用以下 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 存储库