AI推理框架插件
插件简介
AI推理框架插件是一款面向AI模型全生命周期管理的云原生插件,支持用户通过声明式API自定义注册、部署及调度AI大模型,并高效执行推理任务。
前提条件
- 已创建v1.28及以上版本的CCE Standard/Turbo集群,且集群内已有Snt9B类型的NPU节点。
- 已安装LeaderWorkerSet插件,具体操作请参见LeaderWorkerSet插件。
- 已安装CCE AI套件(Ascend NPU)插件和Volcano插件,具体操作请参见CCE AI套件(NVIDIA GPU)和Volcano调度器。
- 已购买DDS服务,或已在集群中自行部署MongoDB数据库,用于存储推理实例产生的相关数据,具体操作请参见购买DDS实例和通过Helm Chart部署MongoDB数据库。
- 在模型部署中,需要提前购买OBS桶,具体操作请参见通过控制台快速使用OBS。
约束与限制
- 该特性当前正处于上线阶段,已发布区域请以控制台实际为准。
- 该插件处于公测阶段,您可体验最新插件特性,但需要注意该版本的稳定性未得到完全的验证,不适用于CCE服务SLA。
安装插件
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“插件中心”,在右侧找到AI推理框架插件,单击“安装”。
- 在安装插件页面,进行相关配置。
     
     表1 插件规格配置 参数 参数说明 选择版本 表示插件版本,请按需选择。 插件规格 当前仅支持“默认”规格。 mongodbUrl 表示DDS服务访问地址或集群中MongoDB数据库服务访问地址,请参见前提条件。 enableLocalStorage 表示是否使用本地数据库。 - true:表示使用集群中的MongoDB数据库。
- false:表示使用DDS服务。
 
- 配置完成后,请在右下角单击“安装”。AI推理框架插件状态变为“运行中”时,则说明安装成功。
组件说明
| 容器组件 | 说明 | 资源类型 | 
|---|---|---|
| frontend | 提供统一的API网关服务,负责处理用户请求的路由转发。 创建该组件时,插件将自动为该组件创建名为frontend-service的ClusterIP服务,用于为该组件提供稳定的网络访问入口。 | Deployment | 
| model-job-executor | 负责AI模型全生命周期管理,包括模型的注册、部署、删除等核心功能。 | Deployment | 
| chat-job-executor | 专为AI推理任务设计的执行引擎,提供低延迟、高并发的模型推理服务。 | Deployment | 
| task-executor-manager | 根据当前系统资源的负载情况,实现 GPU/NPU 等硬件资源的动态调度和故障隔离。 | Deployment | 
模型模板
AI推理框架插件已内置针对主流AI模型的预定义部署模板,用户无需手动编写复杂配置文件,可通过声明式API直接调用模板并快速部署模型。模板中已适配常见模型的参数、资源需求及硬件配置,能够有效降低部署的门槛。
该插件已提供以下主流模型的预置模板,您可以参考模型部署示例,部署并使用相关模型。
| 模型类型 | NPU资源类型 | 
|---|---|
| DeepSeek-R1-Distill-Qwen-7B | huawei.com/ascend-1980 | 
| DeepSeek-R1-Distill-Llama-8B | huawei.com/ascend-1980 | 
| DeepSeek-R1-Distill-Qwen-14B | huawei.com/ascend-1980 | 
| DeepSeek-R1-Distill-Qwen-32B | huawei.com/ascend-1980 | 
| DeepSeek-R1-Distill-Llama-70B | huawei.com/ascend-1980 | 
| QwQ-32B | huawei.com/ascend-1980 | 
| Qwen2.5-Coder-32B-Instruct | huawei.com/ascend-1980 | 
| Qwen2.5-32B-Instruct | huawei.com/ascend-1980 | 
| Qwen2.5-72B-Instruct | huawei.com/ascend-1980 | 
AI推理框架插件内置模型的预置模板示例(AI推理框架插件已提供,用户无需操作):
apiVersion: leaderworkerset.x-k8s.io/v1
kind: LeaderWorkerSet
metadata:
  namespace: ${namespace}
  name: ${name}
  labels:
    xds/version: ${helm_revision}
spec:
  replicas: ${replicas}
  leaderWorkerTemplate:
    leaderTemplate:
      metadata:
        labels:
          xds/instanceType: head
          xds/teGroupId: ${te_group_id}
          xds/modelId: ${model_id}
          xds/teGroupType: ${te_group_type}
      spec:
        containers:
          - name: ascend-vllm-arm64
            image: ${leader_image}
            env:
              - name: HF_HUB_OFFLINE
                value: "1"
              - name: INFER_MODE
                value: DEFAULT
              - name: USE_MASKFREE_ATTN
                value: "1"
              - name: MASKFREE_ATTN_THRESHOLD
                value: "16384"
            args:
              [
                "--model",
                "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",
                "--max-num-seqs",
                "256",
                "--max-model-len",
                "2048",
                "--max-num-batched-tokens",
                "4096",
                "--block-size",
                "128",
                "--gpu-memory-utilization",
                "0.9",
                "--trust-remote-code",
                "--served-model-name",
                "${model_name}"
              ]
            imagePullPolicy: IfNotPresent
            resources:
              limits:
                cpu: "8"
                memory: 72Gi
                huawei.com/ascend-1980: "1"
              requests:
                cpu: "1"
                memory: 64Gi
                huawei.com/ascend-1980: "1"
            ports:
              - containerPort: 8000
            volumeMounts:
              - name: models
                mountPath: /workspace/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
                subPath: ${model_path}
                readOnly: true
            readinessProbe:
              initialDelaySeconds: 5
              periodSeconds: 5
              failureThreshold: 3
              httpGet:
                path: /health
                port: 8000
            livenessProbe:
              initialDelaySeconds: 180
              periodSeconds: 5
              failureThreshold: 3
              httpGet:
                path: /health
                port: 8000
        volumes:
          - name: models
            persistentVolumeClaim:
              claimName: ${pvc_name}
    size: 1
    workerTemplate:
      spec:
        containers: []
  模型部署
AI推理框架插件提供一套完整的AI模型部署方案,支持用户通过声明式API快速完成模型的注册、资源配置及部署。本章以部署“DeepSeek-R1-Distill-Qwen-7B”模型为例,介绍如何使用AI推理框架插件部署AI模型,涵盖从准备工作到部署验证的完整流程。
- 登录集群对应的NPU节点,并通过kubectl连接集群。
- 执行以下步骤,创建PVC,并将模型权重文件存储至PVC中,本步骤以对象存储PVC形式为例。在后续步骤中,模型权重将通过PVC挂载至对应的推理实例中,以提高推理性能。
     
      本步骤支持使用两种PVC,具体对比如下: 本步骤支持使用两种PVC,具体对比如下:- 对象存储PVC :用于长期存储模型权重文件,成本较低但访问速度较慢。使用“对象存储”类型PVC(如OBS等)时,建议额外挂载“极速文件存储”类型PVC作为缓存,以加速模型加载速度。
- 极速文件存储PVC :用于缓存模型权重文件,提供低延迟访问,缩短模型加载时间。
 - 创建对象存储类型的PVC,具体请参考通过静态存储卷使用已有对象存储。
- 登录OBS控制台,在左侧导航栏单击“桶列表”,右侧单击对应的桶名称,进入该桶的“对象”页面。在当前页面,右侧单击“上传对象”,将模型权重文件上传至对应路径。上传操作将产生请求费用,上传成功后将产生存储费用。
       图1 上传模型权重文件  
 
- 执行以下命令,通过API的方式注册模型元数据,从而定义模型的基本信息、资源需求、存储配置及服务等级目标(SLO)。注册成功后,AI推理框架插件将在对应集群中创建AI模型实例及Service。
     
     curl --location 'https://{endpoint}/v1/models' \ --header 'Content-Type: application/json' \ --data '{ "name": "DeepSeek-R1-Distill-Qwen-7B", # 表示创建的模型示例名称,支持自定义 "type": "DeepSeek-R1-Distill-Qwen-7B", "resource_type": "huawei.com/ascend-1980", # 硬件类型 "version": "1.0.0", "max_instance": 4, # 最大副本数 "min_instance": 2, # 最小副本数 "pvc": { "name": "release-models", "path": "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B" # 模型权重文件在PVC中的路径 }, "slo": { "target_time_to_first_token_p95": 1000, # 首次响应时间(毫秒) "target_time_per_output_token_p95": 20 # 每token处理时间(毫秒) }, "description": "This is model description." }' 表4 参数说明 参数 示例 说明 endpoint frontend-service.kube-system.cluster.local 请填入frontend-service的服务的访问地址,可通过服务名或ClusterIP进行访问。 resource_type "huawei.com/ascend-1980" 表示资源类型,仅支持huawei.com/ascend-1980。 max_instance 4 表示模型实例的弹性伸缩的最大副本数。 min_instance 2 表示模型实例的弹性伸缩的最小副本数。 pvc - "name": "release-models",
- "path": "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"
 请填写2中PVC的名称以及模型权重文件在PVC中的存储路径。 slo - "target_time_to_first_token_p95": 1000
- "target_time_per_output_token_p95": 20
 用于设置服务性能目标,如P95分位的首次响应时间(target_time_to_first_token_p95)和每token处理时间(target_time_per_output_token_p95)。 当超过设置的性能目标后,系统将自动进行推理实例的弹性伸缩。关于推理实例弹性伸缩的具体介绍,请参见模型实例弹性伸缩。 
- 执行以下命令,通过API获取已注册模型实例的状态,包括副本数量、健康状态等。
     
     curl --location 'https://{endpoint}/v1/models' # 查询所有模型状态 curl --location 'http://{endpoint}/v1/models/d97051120764490daf846053e16d4f25' # 查询指定模型状态回显结果如下,status为ACTIVE,则说明模型处于正常运行状态。 {"model":{"id":"d97051120764490daf846053e16d4f25","name":"DeepSeek-R1-Distill-Qwen-7B","type":"DeepSeek-R1-Distill-Qwen-7B","resource_type":"huawei.com/ascend-1980","max_instance":2,"min_instance":1,"pvc":{"name":"release-models","path":"deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"},"slo":{"target_time_to_first_token_p95":1000,"target_time_per_output_token_p95":20},"description":"This is model description.","status":"ACTIVE","status_code":"","status_msg":"","created_at":"2025-04-29T17:10:08.673Z","updated_at":"2025-04-29T18:31:07.164Z"}}
- 执行以下命令,向已注册的模型实例发送推理请求。
     
       请求推理前,需等待模型状态已就绪,否则请求可能失败或返回错误。 curl --location 'https://{endpoint}/v1/chat/completions' \ --header 'Content-Type: application/json' \ --data '{ "model": "DeepSeek-R1", "messages": [ { "role": "user", "content": "strawberry中有几个字母r" } ], "stream": true }' 表5 参数说明 参数 示例 说明 messages - "role": "user"
- "content": "strawberry中有几个字母r"
 提供角色、问题等信息,获取对应结果。 stream true 用于指定对话模式,具体取值如下: - true:表示启用流式输出模式,实时返回生成的token。
- false:表示关闭流式输出模式,将全部token生成后一次性返回。
 回显结果如下:  
- 如果当前模型实例已无法满足需要,请通过PUT请求更新已注册模型实例的配置。例如,将模型实例弹性伸缩的最大副本数由4调整为6。
     
     curl --location --request PUT 'https://{endpoint}/v1/models/d97051120764490daf846053e16d4f25' \ --header 'Content-Type: application/json' \ --data '{ "max_instance": 6 # 将最大副本数从4调整为6 }'回显结果如下: {"model":{"id":"d97051120764490daf846053e16d4f25","name":"DeepSeek-R1-Distill-Qwen-7B","type":"DeepSeek-R1-Distill-Qwen-7B","resource_type":"huawei.com/ascend-1980","max_instance":6,"min_instance":1,"pvc":{"name":"release-models","path":"deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"},"slo":{"target_time_to_first_token_p95":1000,"target_time_per_output_token_p95":20},"description":"This is model description.","status":"ACTIVE","status_code":"","status_msg":"","created_at":"2025-04-29T17:10:08.673Z","updated_at":"2025-04-29T18:31:07.164Z"}}
- 当模型实例使用完成时,您可以通过DELETE请求删除该实例,释放相关资源。删除操作不可逆,需谨慎操作,建议先停止服务再删除。
     
     curl --location --request DELETE 'https://{endpoint}/v1/models/a3c390d311f0455f8e0bc18074404a44'如无报错信息,则表示正常删除。 
通过以上步骤,用户可完成模型从注册到删除的全生命周期管理。
插件特性
AI推理框架插件支持模型实例自动弹性伸缩和KV Cache能力,具体介绍如下:
vLLM 框架的KV Cache实现
AI推理框架插件基于vLLM(高性能推理框架)实现KV Cache,其核心特性包括:
- 动态分块
    - 分块策略:将输入序列划分为固定大小的块(--block-size 参数),每个块独立计算并缓存KV值。
- 优势: 
      - 支持灵活调整块大小,平衡内存占用与计算效率。
- 适用于不同长度的输入序列(如对话历史、长文本生成)。
 
 
- 内存优化
    - 显存利用率:通过--gpu-memory-utilization参数(默认0.9)动态分配显存,最大化GPU资源利用率。
- 共享缓存:多个并行请求可共享KV缓存,减少重复计算。
 
- 并行推理
    - 多序列支持:--max-num-seqs 参数定义单个实例可并行处理的最大请求数(如256)。
- 分片部署:对于超大规模模型(如70B参数),通过模型分片和KV Cache分片实现分布式推理。
 
版本记录
| 插件版本 | 支持的集群版本 | 更新特性 | 
|---|---|---|
| 1.0.0 | v1.28 v1.29 v1.30 v1.31 | CCE Standard/Turbo集群支持使用AI推理框架插件 | 
 
  