Chapter 20
使用 Kaito 进行推理
使用 Kaito 进行推理
Kaito 是一个操作器,用于自动化在 Kubernetes 集群中部署 AI/ML 推理模型。
与大多数基于虚拟机基础架构的主流模型部署方法相比,Kaito 具有以下关键差异:
- 使用容器镜像管理模型文件。提供 HTTP 服务器以使用模型库执行推理调用。
- 通过提供预设配置,避免调整部署参数以适配 GPU 硬件。
- 根据模型需求自动配置 GPU 节点。
- 如果许可证允许,在公共 Microsoft 容器注册表 (MCR) 中托管大型模型镜像。
使用 Kaito 后,在 Kubernetes 中引入大型 AI 推理模型的工作流程大大简化。
架构
Kaito 遵循经典的 Kubernetes 自定义资源定义(CRD)/控制器设计模式。用户管理一个描述 GPU 需求和推理规格的 workspace 自定义资源。Kaito 控制器通过协调 workspace 自定义资源来自动化部署。
上图展示了 Kaito 架构概览。其主要组件包括:
- Workspace 控制器:协调
workspace自定义资源,创建machine(见下文)自定义资源以触发节点自动配置,并根据模型预设配置创建推理工作负载(deployment或statefulset)。 - 节点配置控制器:该控制器在 gpu-provisioner helm chart 中名为 gpu-provisioner。它使用源自 Karpenter 的
machineCRD 与 workspace 控制器交互。它集成 Azure Kubernetes Service (AKS) 的 API,向 AKS 集群中添加新的 GPU 节点。
注意:gpu-provisioner 是一个开源组件。如果其他控制器支持 Karpenter-core API,可以替换它。
安装
请查阅 此处 的安装指导。
Phi-3 推理快速开始
apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
name: workspace-phi-3-mini
resource:
instanceType: "Standard_NC6s_v3"
labelSelector:
matchLabels:
apps: phi-3
inference:
preset:
name: phi-3-mini-4k-instruct
# Note: This configuration also works with the phi-3-mini-128k-instruct preset$ cat examples/inference/kaito_workspace_phi_3.yaml
apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
name: workspace-phi-3-mini
resource:
instanceType: "Standard_NC6s_v3"
labelSelector:
matchLabels:
app: phi-3-adapter
tuning:
preset:
name: phi-3-mini-4k-instruct
method: qlora
input:
urls:
- "https://huggingface.co/datasets/philschmid/dolly-15k-oai-style/resolve/main/data/train-00000-of-00001-54e3756291ca09c6.parquet?download=true"
output:
image: "ACR_REPO_HERE.azurecr.io/IMAGE_NAME_HERE:0.0.1" # 调整输出 ACR 路径
imagePushSecret: ACR_REGISTRY_SECRET_HERE
$ kubectl apply -f examples/inference/kaito_workspace_phi_3.yaml可以通过运行以下命令跟踪 workspace 状态。当 WORKSPACEREADY 列变为 True 时,模型已成功部署。
$ kubectl get workspace kaito_workspace_phi_3.yaml
NAME INSTANCE RESOURCEREADY INFERENCEREADY WORKSPACEREADY AGE
workspace-phi-3-mini Standard_NC6s_v3 True True True 10m接下来,可以找到推理服务的集群 IP,并使用临时 curl pod 测试集群中的服务端点。
$ kubectl get svc workspace-phi-3-mini
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
workspace-phi-3-mini-adapter ClusterIP <CLUSTERIP> <none> 80/TCP,29500/TCP 10m
export CLUSTERIP=$(kubectl get svc workspace-phi-3-mini-adapter -o jsonpath="{.spec.clusterIPs[0]}")
$ kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- curl -X POST http://$CLUSTERIP/chat -H "accept: application/json" -H "Content-Type: application/json" -d "{\"prompt\":\"YOUR QUESTION HERE\"}"适配器版 Phi-3 推理快速开始
安装 Kaito 后,可以尝试以下命令启动推理服务。
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: "phi-3-adapter"
image: "ACR_REPO_HERE.azurecr.io/ADAPTER_HERE:0.0.1"
strength: "1.0"$ cat examples/inference/kaito_workspace_phi_3_with_adapters.yaml
apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
name: workspace-phi-3-mini-adapter
resource:
instanceType: "Standard_NC6s_v3"
labelSelector:
matchLabels:
app: phi-3-adapter
tuning:
preset:
name: phi-3-mini-128k-instruct
method: qlora
input:
urls:
- "https://huggingface.co/datasets/philschmid/dolly-15k-oai-style/resolve/main/data/train-00000-of-00001-54e3756291ca09c6.parquet?download=true"
output:
image: "ACR_REPO_HERE.azurecr.io/IMAGE_NAME_HERE:0.0.1" # 调整输出ACR路径
imagePushSecret: ACR_REGISTRY_SECRET_HERE
$ kubectl apply -f examples/inference/kaito_workspace_phi_3_with_adapters.yaml可以通过运行以下命令跟踪 workspace 状态。当 WORKSPACEREADY 列变为 True 时,模型已成功部署。
$ kubectl get workspace kaito_workspace_phi_3_with_adapters.yaml
NAME INSTANCE RESOURCEREADY INFERENCEREADY WORKSPACEREADY AGE
workspace-phi-3-mini-adapter Standard_NC6s_v3 True True True 10m接下来,可以找到推理服务的集群 IP,并使用临时 curl pod 测试集群中的服务端点。
$ kubectl get svc workspace-phi-3-mini-adapter
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
workspace-phi-3-mini-adapter ClusterIP <CLUSTERIP> <none> 80/TCP,29500/TCP 10m
export CLUSTERIP=$(kubectl get svc workspace-phi-3-mini-adapter -o jsonpath="{.spec.clusterIPs[0]}")
$ kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- curl -X POST http://$CLUSTERIP/chat -H "accept: application/json" -H "Content-Type: application/json" -d "{\"prompt\":\"YOUR QUESTION HERE\"}"免责声明:
本文件使用 AI 翻译服务 Co-op Translator 翻译。尽管我们力求准确,但请注意自动翻译可能包含错误或不准确之处。原始文件的原文版本应被视为权威来源。对于重要信息,建议使用专业人工翻译。因使用本翻译所产生的任何误解或曲解,我们不承担任何责任。
