大数跨境
0
0

简化 Kubernetes 上的 AI 模型部署 - KAITO

简化 Kubernetes 上的 AI 模型部署 - KAITO k8s技术圈
2025-10-26
0
随着大语言模型(LLM)和 AI 应用的快速发展,如何在 Kubernetes 集群中高效部署和管理这些模型成为了开发者面临的重要挑战。传统的部署方式往往需要复杂的配置、手动调整 GPU 资源,并且难以实现标准化。今天,我们将介绍一个 CNCF 沙箱项目 —— KAITO(Kubernetes AI Toolchain Operator),它能够自动化 AI/ML 模型的推理和微调工作负载,大幅简化在 Kubernetes 上部署大模型的流程。

什么是 KAITO?

KAITO 是一个 Kubernetes Operator,专门用于自动化 AI/ML 模型在 Kubernetes 集群中的推理或微调工作负载。它支持流行的开源大模型,如 phi-4、llama 等,并通过容器化的方式管理这些模型文件。

项目信息:

  • • 首次发布:2023 年 11 月 15 日(v0.1.0)
  • • 最新版本:2025 年 9 月 23 日(v0.7.0)
  • • 项目状态:CNCF 沙箱项目,AKS 上 GA 就绪
  • • GitHubkaito-project/kaito

核心特性

KAITO 相比传统的基于虚拟机的模型部署方法,具有以下显著优势:

1. 基于容器的模型管理

使用容器镜像管理大型模型文件,并提供与 OpenAI 兼容的服务器进行推理调用,确保部署的一致性和可移植性。

2. 预设配置

提供开箱即用的配置模板,无需根据 GPU 硬件手动调整工作负载参数,大幅降低配置复杂度。

3. 多运行时支持

支持流行的推理运行时,包括:

  • • vLLM:高性能的 LLM 推理引擎
  • • Transformers:Hugging Face 的标准推理框架

4. 自动资源供应

根据模型需求自动供应 GPU 节点,无需手动管理基础设施。

5. 公共镜像仓库

在许可证允许的情况下,将大型模型镜像托管在公共的 Microsoft Container Registry (MCR) 中。

6. RAG 支持

从 v0.5.0 版本开始,KAITO 引入了 RAGEngine,支持检索增强生成(Retrieval Augmented Generation),使用 LlamaIndex 和 FAISS 构建 RAG 服务。

架构设计

KAITO 遵循经典的 Kubernetes CRD/Controller 设计模式。用户通过管理 Workspace自定义资源来描述 GPU 需求和推理/微调规范,KAITO 控制器会自动协调部署。

Workspace 架构





KAITO Architecture

主要组件:

  1. 1. Workspace Controller(工作空间控制器)
    • • 协调 Workspace自定义资源
    • • 创建 NodeClaim自定义资源以触发节点自动供应
    • • 根据模型预设配置创建推理或微调工作负载(Deployment、StatefulSet 或 Job)
  2. 2. Node Provisioner Controller(节点供应控制器)
    • • 在 gpu-provisioner Helm chart 中名为 gpu-provisioner
    • • 使用源自 Karpenter 的 NodeClaimCRD 与 Workspace Controller 交互
    • • 集成云提供商 API(如 Azure Resource Manager)向集群添加新的 GPU 节点

RAGEngine 架构





RAGEngine Architecture

RAGEngine Controller协调 ragengine自定义资源并创建 RAGService部署,提供以下能力:

  • • 编排:使用 LlamaIndex 编排器
  • • 嵌入:支持本地和远程嵌入服务
  • • 向量数据库:内置 FAISS 内存向量数据库
  • • 后端推理:支持任何 OAI 兼容的推理服务

安装部署

前置条件

在开始之前,请确保具备以下条件:

  • • 一个现有的 Kubernetes 集群(带有 NVIDIA GPU 节点)
  • • Helm用于安装 Operator
  • • kubectl用于与集群交互

安装 KAITO Workspace Controller

使用 Helm 安装 KAITO 工作空间控制器:


  
   
  export CLUSTER_NAME=kaito

helm repo add kaito https://kaito-project.github.io/kaito/charts/kaito
helm repo update

helm upgrade --install kaito-workspace kaito/workspace \
  --namespace kaito-workspace \
  --create-namespace \
  --set clusterName="$CLUSTER_NAME" \
  --wait

验证安装

检查 KAITO 工作空间控制器是否正常运行:


  
   
  kubectl get pods -n kaito-workspace
kubectl describe deploy kaito-workspace -n kaito-workspace

您应该看到工作空间控制器 Pod 处于 Running状态。

快速入门:部署第一个模型

方式一:使用现有 GPU 节点

如果您已有 GPU 节点,首先获取节点列表:


  
   
  kubectl get nodes -l accelerator=nvidia

为节点添加标签:


  
   
  kubectl label node <node-name-1> apps=llm-inference
kubectl label node <node-name-2> apps=llm-inference

创建 Workspace 配置文件 phi-4-workspace.yaml


  
   
  apiVersion: kaito.sh/v1beta1
kind:
 Workspace
metadata:

  name:
 workspace-phi-4-mini
resource:

  preferredNodes:

    -
 <node-name-1>
    -
 <node-name-2>
  labelSelector:

    matchLabels:

      apps:
 llm-inference
inference:

  preset:

    name:
 phi-4-mini-instruct

应用配置:


  
   
  kubectl apply -f phi-4-workspace.yaml

方式二:自动供应 GPU 节点

对于支持自动供应的云提供商(Azure、AWS),可以使用以下配置:


  
   
  apiVersion: kaito.sh/v1beta1
kind:
 Workspace
metadata:

  name:
 workspace-phi-4-mini
resource:

  instanceType:
 "Standard_NC6s_v3"  # 将触发节点创建
  labelSelector:

    matchLabels:

      apps:
 phi-4-mini
inference:

  preset:

    name:
 phi-4-mini-instruct

监控部署状态

跟踪工作空间状态:


  
   
  kubectl get workspace workspace-phi-4-mini

当 WORKSPACESUCCEEDED列变为 True时,表示模型已成功部署:


  
   
  NAME                   INSTANCE                   RESOURCEREADY   INFERENCEREADY   WORKSPACESUCCEEDED   AGE
workspace-phi-4-mini   Standard_NC24ads_A100_v4   True            True             True                 4h15m

测试模型推理

获取服务端点


  
   
  kubectl get svc workspace-phi-4-mini
export
 CLUSTERIP=$(kubectl get svc workspace-phi-4-mini -o jsonpath="{.spec.clusterIPs[0]}")

列出可用模型


  
   
  kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- \
  curl -s http://$CLUSTERIP/v1/models | jq

预期输出:


  
   
  {
  "object"
: "list",
  "data"
: [
    {
      "id"
: "phi-4-mini-instruct",
      "object"
: "model",
      "created"
: 1733370094,
      "owned_by"
: "vllm",
      "root"
: "/workspace/vllm/weights",
      "parent"
: null,
      "max_model_len"
: 16384
    }
  ]
}

进行推理调用


  
   
  kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- \
  curl -X POST http://$CLUSTERIP/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "phi-4-mini-instruct",
    "messages": [{"role": "user", "content": "What is kubernetes?"}],
    "max_tokens": 50,
    "temperature": 0
  }'

高级功能:模型微调

KAITO 支持参数高效微调(PEFT)方法,包括 LoRA 和 QLoRA。以下是一个微调示例:

创建微调 Workspace


  
   
  apiVersion: kaito.sh/v1alpha1
kind:
 Workspace
metadata:

  name:
 workspace-phi-4-mini-tuned
  namespace:
 mcp-dev
  annotations:

    kaito.sh/enablelb:
 "false"
    kaito.sh/runtime:
 "transformers"
resource:

  count:
 1
  instanceType:
 "Standard_NC24ads_A100_v4"
  labelSelector:

    matchLabels:

      apps:
 phi-4-mini-tuned
tuning:

  preset:

    name:
 phi-4-mini-instruct
  method:
 qlora
  input:

    urls:

      -
 "https://huggingface.co/datasets/orsharon/kaito/resolve/main/kaito_training_dataset.parquet?download=true"
  output:

    image:
 myacr.azurecr.io/phi-4-mini-tuned:1.0.0
    imagePushSecret:
 myregistrysecret

微调参数配置

可以通过 ConfigMap 调整微调参数:


  
   
  training_config:
  ModelConfig:

    torch_dtype:
 "bfloat16"
    local_files_only:
 true
    device_map:
 "auto"
  
  QuantizationConfig:

    load_in_4bit:
 true
    bnb_4bit_quant_type:
 "nf4"
    bnb_4bit_compute_dtype:
 "bfloat16"
    bnb_4bit_use_double_quant:
 true
  
  LoraConfig:

    r:
 8
    lora_alpha:
 8
    lora_dropout:
 0.0
    target_modules:

      -
 q_proj
      -
 k_proj
      -
 v_proj
      -
 o_proj
      -
 gate_proj
      -
 up_proj
      -
 down_proj
  
  TrainingArguments:

    output_dir:
 "/mnt/results"
    save_strategy:
 "epoch"
    per_device_train_batch_size:
 1
    num_train_epochs:
 300
    learning_rate:
 0.0002

使用微调后的适配器


  
   
  apiVersion: kaito.sh/v1alpha1
kind:
 Workspace
metadata:

  name:
 workspace-phi-4-mini-adapter
inference:

  preset:

    name:
 phi-4-mini-instruct
  adapters:

    -
 source:
        name:
 myadapter
        image:
 myacr.azurecr.io/phi-4-mini-tuned:1.0.0
        imagePullSecrets:

          -
 myregistrysecret
      strength:
 "1.0"

strength字段指定适配器权重相对于原始模型权重的乘数,通常为 0 到 1 之间的浮点数。

运行时选择

KAITO 支持两种主要运行时,通过注解进行配置:


  
   
  annotations:
  kaito.sh/enablelb:
 "false"
  kaito.sh/runtime:
 "transformers"  # 或 "vllm"

vLLM 运行时端点


  
   
  /openapi.json
/docs
/health
/tokenize
/detokenize
/v1/models
/version
/v1/chat/completions
/v1/completions
/v1/embeddings

Transformers 运行时端点


  
   
  /chat

根据您的需求选择合适的运行时。

与其他工具的集成

KAITO 可以与其他 MLOps 工具无缝集成,形成完整的 AI 工作流:

KitOps + Cog + KAITO 工作流

  1. 1. KitOps:标准化 AI 项目的组织、版本控制和存储
  2. 2. Cog:标准化 AI 项目的设置/测试,提供本地模型推理的样板代码
  3. 3. KAITO:自动化生产环境中的模型推理服务部署和底层计算资源

这种组合消除了 MLOps 的典型瓶颈:环境漂移、手动配置错误以及仅在供应生产基础设施后才发现问题的昂贵循环。

生产环境最佳实践

1. 防止 OOM 错误

KAITO 在 LLM 服务引擎中强制执行智能默认值,以防止内存溢出错误,避免工作负载中断。

2. 高可用性配置

对于生产环境,建议:

  • • 使用自动供应功能确保资源可用性
  • • 配置适当的资源请求和限制
  • • 实施监控和告警机制

3. 安全性

  • • 使用 OCI 兼容的注册表安全管理和分发容器化模型工件
  • • 为私有镜像配置 imagePullSecrets
  • • 实施 RBAC 策略控制访问权限

支持的模型

KAITO 支持多种流行的开源模型,包括但不限于:

  • • phi-4-mini-instruct
  • • phi-3.5-mini-instruct
  • • llama系列
  • • falcon系列

完整的支持模型列表请参考 预设文档

总结

KAITO 作为一个成熟的 Kubernetes 原生 AI 工具链,无缝处理从自动化 GPU 供应到模型微调和适配器部署的所有环节。作为 CNCF 沙箱项目并在 AKS 上达到 GA 可用性,它已为企业采用做好准备。

主要优势:

✅ 简化部署:通过简单的 YAML 配置即可部署复杂的 AI 模型
✅ 自动化管理:自动供应 GPU 资源,无需手动干预
✅ 标准化:基于容器和 OCI 标准,确保一致性
✅ 灵活性:支持多种运行时和模型
✅ 可扩展:支持微调、RAG 等高级功能 

随着即将发布的版本不断增强 RAG 能力,KAITO 正在从传统的推理和微调扩展为在 Kubernetes 环境中管理完整 AI 模型生命周期的综合平台。

如果您正在寻找一种简化 Kubernetes 上 AI 模型部署的解决方案,KAITO 无疑是一个值得尝试的优秀选择。


参考资liao:

  • • KAITO GitHub 仓库 https://github.com/kaito-project/kaito
  • • KAITO 官方文档 https://kaito-project.github.io/
  •   • Standardizing AI/ML Workflows on Kubernetes with KitOps, Cog, and KAITO 

【声明】内容源于网络
0
0
k8s技术圈
专注容器、专注 kubernetes 技术......
内容 1681
粉丝 0
k8s技术圈 专注容器、专注 kubernetes 技术......
总阅读705
粉丝0
内容1.7k