更新时间:2026-08-26 GMT+08:00
分享

部署AI应用模板

简介

AI应用模板是基于华为云CCE(云容器引擎)“AI推理框架插件”打造的便捷化模型部署工具。

传统的AI大模型部署往往涉及复杂的容器配置、硬件资源(GPU/NPU)调度、网络网关设置以及存储挂载等繁琐步骤。为了大幅降低大模型部署的门槛,现为您提供了一键式的推理预置模板:

  • 预置配置:底层已内置针对主流AI模型(如DeepSeek-R1)的预定义配置,涵盖运行参数、NPU资源需求及硬件适配。
  • 极简操作:只需通过可视化前端界面,选择模板并简单配置,即可快速将大模型转化为高可用、低延迟的API推理服务。

核心优势

  • 开箱即用:无需编写复杂的Kubernetes YAML文件,参数已针对昇腾(Ascend)底层硬件进行深度适配与优化。
  • 一键部署:通过前端UI勾选即可完成从模型加载、资源调度到服务拉起的全生命周期管理。
  • 高并发低延迟:底层自动结合vLLM等高性能执行引擎,提供生产级别的推理能力。

前提条件

在开始部署前,请确保满足以下条件:

  • 集群准备:已创建v1.28及以上版本的CCE Standard或CCE Turbo集群。
  • 依赖插件:集群已安装1.21.7及以上版本的Volcano调度器插件。
  • 网络访问:推理节点需可访问外网,以便拉取镜像和模型,请参见配置公网访问

操作步骤

  1. 进入AI应用模板页签。

    1. 登录CCE控制台
    2. 在左侧导航栏中选择“AI容器”,单击“AI应用模板”页签。

  2. “AI应用模板”页签,选择需要部署的模板(本文选择的是DeepSeek-R1-Distill-Qwen-1.5B ),然后单击“部署”
  3. 在部署应用页面,配置以下参数。

    表1 基础配置

    参数

    描述

    应用名称

    部署的AI应用唯一标识符。

    AI应用模板

    预定义的应用模板。

    选择此应用模板将决定模型类型(如DeepSeek-R1模型)及部署架构(如vLLM PD分离)。

    注意:

    切换应用模板会导致已填写的部分关联数据被更改或清空,请谨慎操作。

    镜像

    使用第三方镜像时,需确保实例可访问公网。当第三方镜像仓库支持公网访问时,Pod可以通过公网拉取镜像。此时,需确保Pod具备访问公网的能力。您可以通过以下方式,确保Pod具备访问公网的能力:

    说明:

    当使用公网访问方式拉取镜像时,请确保EIP的带宽充足,以避免因带宽不足导致镜像拉取失败或拉取速度过慢。

    • 为集群配置SNAT规则(Standard/Turbo集群):配置SNAT规则后,集群中的Pod实例都将具备访问公网的能力。此时,创建新的工作负载,可以直接通过公网拉取镜像。具体操作步骤,请参见从容器访问公网
    • 为节点绑定弹性公网IP(Standard集群):为工作负载运行的节点绑定弹性公网IP(EIP)。绑定EIP后,该节点上所有工作负载都能够访问公网。具体操作步骤,请参见绑定弹性公网IP

    当前预置适配华为昇腾(Ascend)NPU的vLLM推理引擎镜像(v0.13.0)。

    集群名称

    选择需要部署服务的集群。该集群需预装Volcano调度器及NPU设备插件,否则任务提交后将部署失败。

    命名空间

    选择用于部署该推理服务的命名空间。

    实例数

    指定需要部署的推理服务实例数量。

  4. (可选)配置角色信息。推理负载通过Role(角色) 组织容器,实现分布式推理。每个Role包含且仅包含一个Entry节点,以及多个Worker节点。

    表2 角色配置

    参数

    描述

    角色名称

    自定义标识,创建后不可修改。

    角色副本数

    该角色在部署时需要创建的实例数量。

    entry容器

    entry容器为角色的入口节点,每个Role仅包含一个entry实例,负责接收推理请求并统筹该角色下的计算任务。

    • 容器名称:默认为container-entry,用于标识容器职责。
    • 资源配额:如果默认配置不满足您的实际需求,可单击图标,调整CPU、内存及NPU等资源。
    • 启动命令:容器启动时执行的操作,用于定义容器的主进程,其运行状态直接决定容器的生命周期,详情请参见启动命令
    • 端口:填写容器提供服务的端口号。

    worker容器

    worker容器为角色的工作节点,每个Role可包含多个worker实例,负责响应entry调度并执行实际推理任务。

    • worker副本数:同一个推理服务组内该角色的实例数量。通过灵活调整不同角色的副本数,可以实现算力的最优配比。
    • 容器名称:默认为container-worker。
    • 容器配置:当选择“配置与entry容器一致”时,除容器名称外都会复用entry容器配置。您也可以选择“自定义配置,独立配置资源、启动命令与端口。
    • 启动命令:容器启动时执行的操作,用于定义容器的主进程,其运行状态直接决定容器的生命周期,详情请参见启动命令
    • 端口:填写容器提供服务的端口号。

  5. (可选)填写高级配置。

    表3 高级配置

    参数

    描述

    推理引擎自定义指标采集

    开启后,云原生监控插件将会自动采集推理实例相关指标。将会自动为Pod打上云原生监控插件所需要的Annotations,方便采集相关推理实例相关指标,具体配置详见使用云原生监控插件监控自定义指标

    升级策略

    指定负载的升级方式:

    • 不配置:不使用升级策略。
    • 配置:
      • 分区更新(partition):用于灰度发布,控制升级的ServingGroup分组。

        设置为0时,表示全量升级所有的ServingGroup;设置为N(N>0)时,仅升级序号 ≥ N的ServingGroup。

      • 最大不可用数目(maxUnavailable):升级期间允许同时不可用的Pod数量,用于控制服务可用性。

    调度策略

    支持以下调度策略:

    • Gang调度:确保一组Pod(如分布式任务的多个角色)同时调度成功或失败。
      • 不配置:不使用Gang调度。
      • 角色最小副本数:定义角色的最小副本数,调度器在资源满足时才会调度Pod。
    • 拓扑感知调度
      • 不配置:不使用拓扑感知调度。
      • 配置:支持选择推理实例亲和和推理角色亲和。
        • 推理实例亲和tier:ServingGroup实例调度亲和tier层级,例如,希望配置PD分离组在同一通信域内。
        • 角色实例内亲和tier:Role实例调度亲和tier层级,例如,希望配置entry和多个worker组成的分布式推理实例在同一通信域内。

    容忍策略

    与节点的污点能力配合使用,允许(不强制)负载调度到带有与之匹配的污点的节点上,也可用于控制负载所在的节点被标记污点后负载的驱逐策略,详情请参见设置容忍策略

    标签与注解

    以键值对形式为工作负载Pod添加标签或注解。关于标签与注解的作用及配置说明,请参见设置标签与注解

    描述

    填写推理负载的说明信息。

  6. 确认配置信息无误后,单击“提交”

    “推理负载”页面,可查看处于“部署中”状态的推理负载。

  7. 配置Service,访问部署的模型。本文以节点访问为例,在选择器中将modelserving.volcano.sh/name设置为推理负载名称,modelserving.volcano.sh/role设置为proxy,并将容器端口和服务端口均设置为8181。更多信息请参见节点访问(NodePort)

  8. 验证模型。通过向Service暴露的端口发送标准POST请求,验证模型是否正常运行。

    curl -X POST http://<节点IP>:<节点端口>/v1/chat/completions \
       -H "Content-Type: application/json" \
       -d '{
         "model": "ds_r1",
         "messages": [
           {
             "role": "user",
             "content": "Hello, how are you?"
           }
         ],
         "max_tokens": 100
       }'

    若部署成功,应返回包含choices和message字段的JSON数据,且content字段中包含模型的回复。

    {
      "id": "chatcmpl-753ceb4c-7aa5-4a4f-94b5-dc791c*****",
      "object": "chat.completion",
      "created": 1779936213,
      "model": "ds_r1",
      "choices": [
        {
          "index": 0,
          "message": {
            "role": "assistant",
            "content": "Alright, someone just said \"Hello, how are you?\" I should respond in a friendly and approachable way.\n\nI need to keep it simple and open-ended to encourage them to share more.\n\nMaybe ask them how they're doing or if they have any questions they want to discuss.\n\nThat should make the conversation feel natural and helpful.\n</think>\n\nHello! I'm just a computer program, so I don't have feelings, but thanks for asking! How can I assist you today?",
            "refusal": null,
            "annotations": null,
            "audio": null,
            "function_call": null,
            "tool_calls": [],
            "reasoning": null,
            "reasoning_content": null
          },
          "logprobs": null,
          "finish_reason": "stop",
          "stop_reason": null,
          "token_ids": null
        }
      ],
      "service_tier": null,
      "system_fingerprint": null,
      "usage": {
        "prompt_tokens": 11,
        "total_tokens": 109,
        "completion_tokens": 98,
        "prompt_tokens_details": null
      },
      "prompt_logprobs": null,
      "prompt_token_ids": null,
      "kv_transfer_params": null
    }

相关文档