你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何针对 AKS 使用 AI 工具链操作器加载项(预览版)微调和部署语言模型推理工作负载。 你将学习如何完成以下任务:
- 设置环境变量,以引用 Azure 容器注册表 (ACR) 和存储库详细信息。
- 创建容器注册表映像推送/拉取机密,以存储和检索专用微调适配器映像。
- 选择受支持的模型并根据数据进行微调。
- 测试推理服务终结点。
- 清理资源。
AI 工具链操作器 (KAITO) 是 AKS 的托管加载项,可简化 AKS 群集上 AI 模型的部署和操作。 从 KAITO 版本 0.3.1及更高版本开始,可以使用 AKS 托管加载项通过新数据来微调受支持的基础模型,并增强 AI 模型的准确度。 要详细了解参数高效微调方法及其用例,请参阅概念 - 在 AKS 上针对 AI 和机器学习工作流微调语言模型。
重要说明
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
开始之前
- 本文假设你有现有 AKS 群集。 如果你没有 AKS 群集,请使用 Azure CLI、Azure PowerShell 或 Azure 门户创建一个。
- 安装并配置了 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。
使用
kubectl apply
命令应用 KAITO 微调工作区 CRD。kubectl apply workspace-tuning-phi-3-mini.yaml
使用
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
使用
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”
注意
(可选)可以通过定义额外的“源”字段在不同数据集拉取使用同一模型从微调部署创建的多个适配器。 使用不同适配器进行推理,以比较微调模型在不同情况下的性能。
使用
kubectl apply
命令应用 KAITO 推理工作区 CRD。kubectl apply -f workspace-phi-3-mini-adapter.yaml
使用
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
使用
kubectl get pods
命令检查推理工作负载 pod 的状态。kubectl get pods
Pod 可能需要几分钟才能显示
Running
状态。
测试模型推理服务终结点
使用
kubectl get svc
命令检查模型推理服务并检索服务 IP 地址。export SERVICE_IP=$(kubectl get svc workspace-phi-3-mini-adapter -o jsonpath=’{.spec.clusterIP}’)
使用
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
后续步骤
- 详细了解如何使用 KAITO 微调语言模型 - AKS 工程博客
- 了解 AKS 上的适用于 AI 和机器学习工作流的 MLOps 和最佳做法
- 了解 Azure Kubernetes 服务上支持的 GPU 系列