你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 AI 工具链操作器(预览版)在 Azure Kubernetes 服务 (AKS) 上微调和部署用于推理的 AI 模型

本文介绍如何针对 AKS 使用 AI 工具链操作器加载项(预览版)微调和部署语言模型推理工作负载。 你将学习如何完成以下任务:

AI 工具链操作器 (KAITO) 是 AKS 的托管加载项,可简化 AKS 群集上 AI 模型的部署和操作。 从 KAITO 版本 0.3.1及更高版本开始,可以使用 AKS 托管加载项通过新数据来微调受支持的基础模型,并增强 AI 模型的准确度。 要详细了解参数高效微调方法及其用例,请参阅概念 - 在 AKS 上针对 AI 和机器学习工作流微调语言模型

重要说明

AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

开始之前

  • 本文假设你有现有 AKS 群集。 如果你没有 AKS 群集,请使用 Azure CLIAzure PowerShellAzure 门户创建一个。
  • 安装并配置了 Azure CLI 版本 2.47.0 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

先决条件

  • 已安装并配置 Kubernetes 命令行客户端 kubectl。 有关详细信息,请参阅安装 kubectl
  • 配置新的或现有的 ACR 与 AKS 群集的 Azure 容器注册表 (ACR) 集成
  • 在 AKS 群集上安装 AI 工具链操作器加载项
  • 如果已安装 AI 工具链操作器加载项,请将 AKS 群集更新到最新版本,以运行 KAITO v0.3.1+ 并确保启用了 AI 工具链操作器加载项功能标志。

导出环境变量

若要简化本文中的配置步骤,可以使用以下命令定义环境变量。 请务必将占位符值替换为你自己的值。

ACR_NAME="myACRname"
ACR_USERNAME="myACRusername"
REPOSITORY="myRepository"
VERSION="repositoryVersion'
ACR_PASSWORD=$(az acr token create --name $ACR_USERNAME --registry $ACR_NAME --expiration-in-days 10 --repository $REPOSITORY content/write content/read --query "credentials.passwords[0].value" --output tsv)

为专用注册表创建新机密

在此示例中,KAITO 微调部署生成容器化适配器输出,KAITO 工作区需要新的推送机密作为授权才能将适配器映像推送到 ACR。

生成一个新机密,以提供 KAITO 微调工作区访问权限,从而使用 kubectl create secret docker-registry 命令将模型微调输出映像推送到 ACR。

kubectl create secret docker-registry myregistrysecret --docker-server=$ACR_NAME.azurecr.io --docker-username=$ACR_USERNAME --docker-password=$ACR_PASSWORD

微调 AI 模型

在此示例中,通过应用以下 Phi-3-mini KAITO 微调工作区 CRD,使用 qLoRA 优化方法对 Phi-3-mini 小型语言模型进行微调:

apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
     name: workspace-tuning-phi-3-mini
resource:
     instanceType: "Standard_NC24ads_A100_v4"
     labelSelector:
          matchLabels:
                apps: tuning-phi-3-mini-pycoder
tuning:
     preset:
         name: phi3mini128kinst
  method: qlora
  input:
      urls: 
          - “myDatasetURL”
  output:
      image: “$ACR_NAME.azurecr.io/$REPOSITORY:$VERSION”
      imagePushSecret: myregistrysecret

此示例使用输入中的 URL 指定的公共数据集。 如果选择映像作为微调数据的源,请参阅 KAITO 微调 API 规范来调整输入以从 ACR 拉取映像。

注意

GPU SKU 的选择至关重要,因为与模型推理相比,模型微调通常需要更多的 GPU 内存。 为了避免 GPU 内存不足错误,建议使用 NVIDIA A100 或更高级别的 GPU。

  1. 使用 kubectl apply 命令应用 KAITO 微调工作区 CRD。

    kubectl apply workspace-tuning-phi-3-mini.yaml
    
  2. 使用 kubectl get workspace 命令跟踪 GPU 资源、微调作业和工作区的准备情况。

    kubectl get workspace -w
    

    输出应类似于以下示例输出:

    NAME                         INSTANCE                  RESOURCE READY  INFERENCE READY  JOB STARTED  WORKSPACE SUCCEEDED  AGE
    workspace-tuning-phi-3-mini  Standard_NC24ads_A100_v4  True                             True                              3m 45s
    
  3. 使用 kubectl get pods 命令查看微调作业 pod 的状态。

    kubectl get pods
    

注意

可以将适配器作为容器映像或 Kubernetes 支持的任何存储类型存储到特定输出位置。

部署经过微调的推理模型

现在,使用在上一部分中创建的 Phi-3-mini 适配器映像来利用此模型进行新的推理部署。

下面的 KAITO 推理工作区 CRD 由以下资源和适配器组成,这些资源和适配器可部署在 AKS 群集上:

apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
  name: workspace-phi-3-mini-adapter
resource:
  instanceType: "Standard_NC6s_v3"
  labelSelector:
    matchLabels:
      apps: phi-3-adapter
inference:
  preset:
    name: “phi-3-mini-128k-instruct“
  adapters:
    -source:
       name: kubernetes-adapter
       image: $ACR_NAME.azurecr.io/$REPOSITORY:$VERSION
       imagePullSecrets:
             - myregistrysecret
     strength: “1.0”

注意

(可选)可以通过定义额外的“源”字段在不同数据集拉取使用同一模型从微调部署创建的多个适配器。 使用不同适配器进行推理,以比较微调模型在不同情况下的性能。

  1. 使用 kubectl apply 命令应用 KAITO 推理工作区 CRD。

    kubectl apply -f workspace-phi-3-mini-adapter.yaml
    
  2. 使用 kubectl get workspace 命令跟踪 GPU 资源、推理服务器和工作区的准备情况。

    kubectl get workspace -w
    

    输出应类似于以下示例输出:

    NAME                          INSTANCE          RESOURCE READY  INFERENCE READY  JOB STARTED  WORKSPACE SUCCEEDED  AGE
    workspace-phi-3-mini-adapter  Standard_NC6s_v3  True            True                          True                 5m 47s
    
  3. 使用 kubectl get pods 命令检查推理工作负载 pod 的状态。

    kubectl get pods
    

    Pod 可能需要几分钟才能显示 Running 状态。

测试模型推理服务终结点

  1. 使用 kubectl get svc 命令检查模型推理服务并检索服务 IP 地址。

    export SERVICE_IP=$(kubectl get svc workspace-phi-3-mini-adapter -o jsonpath=’{.spec.clusterIP}’)
    
  2. 使用 kubectl run 命令,通过所选的示例输入运行经过微调的 Phi-3-mini 模型。 以下示例向生成式 AI 模型询问“AKS 是什么?”

    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\":\"What is AKS?\"}"
    

    输出可能如以下示例输出所示:

    "Kubernetes on Azure" is the official name.
    https://learn.microsoft.com/en-us/azure/aks/ ...
    

清理资源

如果不再需要这些资源,请删除它们,以免产生额外的 Azure 费用。 要计算资源的估计成本,可以使用 Azure 定价计算器

使用 kubectl delete workspace 命令删除 AKS 群集上的 KAITO 工作区及其已分配资源。

kubectl delete workspace workspace-tuning-phi-3-mini
kubectl delete workspace workspace-phi-3-mini-adapter

后续步骤