更新时间:2025-08-19 GMT+08:00

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数据库,用于存储推理实例产生的相关数据。
  • 模型部署中,需要提前购买OBS桶,具体操作请参见通过控制台快速使用OBS

约束与限制

  • 该特性当前正处于上线阶段,已发布区域请以控制台实际为准
  • 该插件处于公测阶段,您可体验最新插件特性,但需要注意该版本的稳定性未得到完全的验证,不适用于CCE服务SLA

安装插件

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“插件中心”,在右侧找到AI推理框架插件,单击“安装”
  3. 在安装插件页面,进行相关配置。

    表1 插件规格配置

    参数

    参数说明

    选择版本

    表示插件版本,请按需选择。

    插件规格

    当前仅支持“默认”规格。

    mongodbUrl

    表示DDS服务访问地址或集群中MongoDB数据库服务访问地址,请参见前提条件

    enableLocalStorage

    表示是否使用本地数据库。

    • true:表示使用集群中的MongoDB数据库。
    • false:表示使用DDS服务。

  4. 配置完成后,请在右下角单击“安装”。AI推理框架插件状态变为“运行中”时,则说明安装成功。

组件说明

表2 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直接调用模板并快速部署模型。模板中已适配常见模型的参数、资源需求及硬件配置,能够有效降低部署的门槛。

该插件已提供以下主流模型的预置模板,您可以参考模型部署示例,部署并使用相关模型。

表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连接集群
  2. 执行以下步骤,创建PVC,并将模型权重文件存储至PVC中,本步骤以对象存储PVC形式为例。在后续步骤中,模型权重将通过PVC挂载至对应的推理实例中,以提高推理性能。

    本步骤支持使用两种PVC,具体对比如下:
    • 对象存储PVC :用于长期存储模型权重文件,成本较低但访问速度较慢。使用“对象存储”类型PVC(如OBS等)时,建议额外挂载“极速文件存储”类型PVC作为缓存,以加速模型加载速度。
    • 极速文件存储PVC :用于缓存模型权重文件,提供低延迟访问,缩短模型加载时间。
    1. 创建对象存储类型的PVC,具体请参考通过静态存储卷使用已有对象存储
    2. 登录OBS控制台,在左侧导航栏单击“桶列表”,右侧单击对应的桶名称,进入该桶的“对象”页面。在当前页面,右侧单击“上传对象”,将模型权重文件上传至对应路径。上传操作将产生请求费用,上传成功后将产生存储费用
      图1 上传模型权重文件

  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. 执行以下命令,向已注册的模型实例发送推理请求。

    请求推理前,需等待模型状态已就绪,否则请求可能失败或返回错误。

    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生成后一次性返回。

    回显结果如下:

  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能力,具体介绍如下:

vLLM 框架的KV Cache实现

AI推理框架插件基于vLLM(高性能推理框架)实现KV Cache,其核心特性包括:

  • 动态分块
    • 分块策略:将输入序列划分为固定大小的块(--block-size 参数),每个块独立计算并缓存KV值。
    • 优势:
      • 支持灵活调整块大小,平衡内存占用与计算效率。
      • 适用于不同长度的输入序列(如对话历史、长文本生成)。
  • 内存优化
    • 显存利用率:通过--gpu-memory-utilization参数(默认0.9)动态分配显存,最大化GPU资源利用率。
    • 共享缓存:多个并行请求可共享KV缓存,减少重复计算。
  • 并行推理
    • 多序列支持:--max-num-seqs 参数定义单个实例可并行处理的最大请求数(如256)。
    • 分片部署:对于超大规模模型(如70B参数),通过模型分片和KV Cache分片实现分布式推理。

版本记录

表6 AI推理框架插件版本记录

插件版本

支持的集群版本

更新特性

1.0.0

v1.28

v1.29

v1.30

v1.31

CCE Standard/Turbo集群支持使用AI推理框架插件