
# AI推理框架插件
#### 插件简介
AI推理框架插件是一款面向AI模型全生命周期管理的云原生插件，支持用户通过声明式API自定义注册、部署及调度AI大模型，并高效执行推理任务。
 #### 前提条件
- 已创建v1.28及以上版本的CCE Standard/Turbo集群，且集群内已有Snt9B类型的NPU节点。
- 已安装LeaderWorkerSet插件，具体操作请参见[LeaderWorkerSet插件](https://support.huaweicloud.com/usermanual-cce/cce_10_1004.html)。
- 已安装CCE AI套件（Ascend NPU）插件和Volcano插件，具体操作请参见[CCE AI套件（NVIDIA GPU）](https://support.huaweicloud.com/usermanual-cce/cce_10_0141.html)和[Volcano调度器](https://support.huaweicloud.com/usermanual-cce/cce_10_0193.html)。
- 已购买DDS服务，或已在集群中自行部署MongoDB数据库，用于存储推理实例产生的相关数据，具体操作请参见[购买DDS实例](https://support.huaweicloud.com/helppanel-dds/dds_help_second_0004.html)和[通过Helm Chart部署MongoDB数据库](https://github.com/mongodb/helm-charts/tree/main/charts/community-operator)。
- 在[模型部署]中，需要提前购买OBS桶，具体操作请参见[通过控制台快速使用OBS](https://support.huaweicloud.com/qs-obs/obs_qs_0001.html)。
 
#### 约束与限制
- 该特性当前正处于上线阶段，**已发布区域请以控制台实际为准**。
- **该插件处于公测阶段** ，您可体验最新插件特性，但**需要注意该版本的稳定性未得到完全的验证，不适用于CCE服务SLA**。
 
#### 安装插件
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏中选择"插件中心"，在右侧找到**AI推理框架插件**，单击"安装"。
3. 在安装插件页面，进行相关配置。 
   表1插件规格配置 
   | 参数                 | 参数说明                                                                                                                                                                                                                                                         |
   |:---|:---|
   | 选择版本               | 表示插件版本，请按需选择。                                                                                                                                                                                                                                                |
   | 插件规格               | 当前仅支持"默认"规格。                                                                                                                                                                                                                                                 |
   | mongodbUrl         | 表示DDS服务访问地址或集群中MongoDB数据库服务访问地址，请参见[前提条件]。                                                                                                                                                                                |
   | enableLocalStorage | 表示是否使用本地数据库。 - true：表示使用集群中的MongoDB数据库。  - false：表示使用DDS服务。   |
      
   
   
4. 配置完成后，请在右下角单击"安装"。AI推理框架插件状态变为"运行中"时，则说明安装成功。
 
#### 组件说明
表2AI推理框架组件 
| 容器组件                  | 说明                                                                                                                            | 资源类型       |
|:---|:---|:---|
| 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直接调用模板并快速部署模型。模板中已适配常见模型的参数、资源需求及硬件配置，能够有效降低部署的门槛。
该插件已提供以下主流模型的预置模板，您可以参考[模型部署]示例，部署并使用相关模型。
表3预置模板 
| 模型类型                          | 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模型，涵盖从准备工作到部署验证的完整流程。
1. 登录集群对应的NPU节点，并[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
2. 执行以下步骤，创建PVC，并将模型权重文件存储至PVC中，本步骤以**对象存储PVC** 形式为例。在后续步骤中，模型权重将通过PVC挂载至对应的推理实例中，以提高推理性能。
   
   ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
   本步骤支持使用两种PVC，具体对比如下：
   - **对象存储PVC**：用于长期存储模型权重文件，成本较低但访问速度较慢。使用"对象存储"类型PVC（如OBS等）时，建议额外挂载"极速文件存储"类型PVC作为缓存，以加速模型加载速度。
   
   - **极速文件存储PVC**：用于缓存模型权重文件，提供低延迟访问，缩短模型加载时间。
    
   1. 创建对象存储类型的PVC，具体请参考[通过静态存储卷使用已有对象存储](https://support.huaweicloud.com/usermanual-cce/cce_10_0379.html#cce_10_0379__section5984163201919)。
   
   2. 登录[OBS控制台](https://console.huaweicloud.com/obs/#/obs/manager/buckets)，在左侧导航栏单击"桶列表"，右侧单击对应的桶名称，进入该桶的"对象"页面。在当前页面，右侧单击"上传对象"，将模型权重文件上传至对应路径。**上传操作将产生[请求费用](https://support.huaweicloud.com/price-obs/obs_42_0004.html)，上传成功后将产生[存储费用](https://support.huaweicloud.com/price-obs/obs_42_0003.html)。**
      图1上传模型权重文件   
      ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002294270485.png "点击放大")
      
      
   
   
   
   
3. 执行以下命令，通过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）。 当超过设置的性能目标后，系统将自动进行推理实例的弹性伸缩。关于推理实例弹性伸缩的具体介绍，请参见[模型实例弹性伸缩]。 |
      
   
   
4. 执行以下命令，通过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"}}
   ```
   
   
5. 执行以下命令，向已注册的模型实例发送推理请求。 
   ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/caution_3.0-zh-cn.png)
   请求推理前，需等待模型状态已就绪，否则请求可能失败或返回错误。
   ```
   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生成后一次性返回。   |
      
   回显结果如下：
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002264135524.png "点击放大")
   
   
6. 如果当前模型实例已无法满足需要，请通过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"}}
   ```
   
   
7. 当模型实例使用完成时，您可以通过DELETE请求删除该实例，释放相关资源。**删除操作不可逆，需谨慎操作，建议先停止服务再删除** 。
   
   ```
   curl --location --request DELETE 'https://{endpoint}/v1/models/a3c390d311f0455f8e0bc18074404a44'
   ```
   如无报错信息，则表示正常删除。
   
   
通过以上步骤，用户可完成模型从注册到删除的全生命周期管理。
#### 插件特性
AI推理框架插件支持模型实例自动弹性伸缩和KV Cache能力，具体介绍如下：
#### 模型实例弹性伸缩
AI推理框架插件支持实时采集模型实例的SLO指标，并计算各指标的P95分位值。当实际性能指标超出SLO指标阈值时，插件将自动对模型实例进行扩缩容操作。
- **扩容逻辑**
  任一SLO指标超标时，AI推理框架插件将根据期望副本数对模型实例进行扩容操作，期望副本数计算公式如下：
  期望副本数 = min(ceil(当前副本数 \* 当前P95 / 期望P95)，max_instance）
  其中，当前P95 = sum(各个实例30秒内的P95) / 实例数，期望P95为用户指定的SLO指标阈值，min_instance为模型注册时指定的弹性伸缩最大副本数。
  

- **缩容场景**
  当所有SLO指标在阈值以下且持续5分钟，且当前副本数\>min_instance，则逐步缩容，直至不满足缩容条件。
  
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/caution_3.0-zh-cn.png)
- **扩容阈值：**扩容上限不超过max_instance（模型注册时定义），缩容下限不低于min_instance。
- **冷启动延迟**：扩容时新Pod启动需时间，建议设置min_instance为预期最小负载的2倍。
- **资源预留**：确保集群有足够资源（CPU/GPU）支持max_instance的扩容需求。
 
#### KV Cache
KV Cache（Key-Value Cache）是大模型推理的关键优化技术，主要用于缓存Transformer解码过程中的中间结果（如Keys和Values），避免重复计算，显著提升推理效率。
- **适用场景**：适用于需要序列化生成的模型（如Qwen、Llama等）。
- **优势** ：
  - **降低计算开销**：仅需计算新输入token的注意力，而非重新计算整个历史序列。
  
  - **减少内存占用**：通过分块（Blocking）技术复用内存，支持更大模型的部署。
   
 
**vLLM 框架的KV Cache实现**
AI推理框架插件基于**vLLM**（高性能推理框架）实现KV Cache，其核心特性包括：
- **动态分块**
  - 分块策略：将输入序列划分为固定大小的块（--block-size 参数），每个块独立计算并缓存KV值。
  
  - 优势：
    - 支持灵活调整块大小，平衡内存占用与计算效率。
    
    - 适用于不同长度的输入序列（如对话历史、长文本生成）。
     
   
- **内存优化**
  - 显存利用率：通过--gpu-memory-utilization参数（默认0.9）动态分配显存，最大化GPU资源利用率。
  
  - 共享缓存：多个并行请求可共享KV缓存，减少重复计算。
   

- **并行推理**
  - 多序列支持：--max-num-seqs 参数定义单个实例可并行处理的最大请求数（如256）。
  
  - 分片部署：对于超大规模模型（如70B参数），通过模型分片和KV Cache分片实现分布式推理。
   
#### 版本记录
表6AI推理框架插件版本记录 
| 插件版本  | 支持的集群版本                                                                                                                                                                                                                                                                            | 更新特性                             |
|:---|:---|:---|
| 1.0.0 | v1.28 v1.29 v1.30 v1.31 v1.32 | CCE Standard/Turbo集群支持使用AI推理框架插件 |
   
