更新时间:2025-09-08 GMT+08:00
分享

生成部署定义yaml

基于KubeInfer的部署,关键是定义部署所需的yaml文件,当前方案提供了相关脚本来帮助您生成基于KubeInfer部署的yaml文件(该脚本依赖kubeinfer_yaml_tools.py),通过执行下述命令生成部署所需的yaml文件:

python3 gen_pd_deploy_kubeinfer_yaml.py [--device-type=xx] [--num-roles=xx] [--replicas=xx] [--image-name=xx] [--mount-path=xx] [--script-path=xx] [--common-params="xxx"] [--scheduler-params="xxx"] [--prefill-params="xxx"] [--decode-params="xxx"] [--file-name=xx]

当前脚本自动生成的基于KubeInfer部署的yaml文件默认包含下述能力:

  1. 针对该kubeinfer实例默认创建NodePort类型的K8s service,对外nodePort默认为30090。如果您要在同一个K8s集群中部署多个kubeinfer实例,注意非单kubeinfer多instance,则要确保这个nodePort为不同的值。其中推理实例端口信息详见推理部署端口规划与冲突操作指导
  2. 故障恢复机制默认为instance级重调度,默认配置KubeInfer自动感知恢复机制和K8s的三大探针。
  3. 容器默认配置了优雅退出时间,默认为120s。如果您的业务有需求需要修改这个时间,需要修改yaml中每个role定义里的优雅退出时间配置,详见基于KubeInfer的部署yaml文件说明
  4. 获取权重文件规划的存储路径默认为”/mnt/deepseek”,会以相同路径挂载至Pod。如果您的路径不一致需要修改yaml文件中每个role定义里的挂载路径信息,详见基于KubeInfer的部署yaml文件说明,参考如下:
    containers:
      - ...
        volumeMounts:
          - mountPath: /mnt/deepseek/    # 容器中权重挂载目录
            name: deepseek
    ...
    volumes:
      ...
      - hostPath:
          path: /mnt/deepseek/           # 模型权重在外部存储上的路径
          type: Directory
        name: deepseek
  5. 推理服务日志、CANN NPU plog和ray的日志默认挂载至主机上的目录,详细说明见推理层日志采集与转储
  6. 默认配置升级策略为”一上一下”的滚动升级策略,如果您的业务有需要修改这个策略,需要修改yaml中定义,详见基于KubeInfer的部署yaml文件说明
  7. yaml中默认调用了版本包中的启动脚本,该脚本支持可传入的参数参考表2,除此之外,用户还可以追加标准的vLLM启动参数。示例:如果用户部署DeepSeek系列想开启Multi Step功能,可以新增以下启动参数:
    --num-scheduler-steps=4
表1 生成yaml脚本参数说明

参数

约束

描述

默认值

--device-type

可选

节点类型,值为A2或者A3。

A3

--num-roles

必选

KubeInfer角色个数,例如2P1D则为3,详见KubeInfer部署方案介绍

-

--replicas

可选

kubeinfer实例instance数,对应K8s概念中的副本数。

1

--image-name

必选

推理镜像名称,即为获取推理镜像中制作的镜像。

-

--mount-path

可选

存储配置中挂载的目录,该目录下存放权重和脚本文件。

/mnt/deepseek

--script-path

可选

部署推理服务依赖的脚本文件路径。

须知:

必须是--mount-path指定的目录的子目录。

/mnt/deepseek/deploy

--common-params

必选

部署推理服务的特性参数和公共的启动参数,参考表2及参数类型。

须知:

值必须用双引号包裹。

-

--scheduler-params

必选

部署推理服务scheduler、prefill、decode分别对应的启动参数,参考表2及参数类型。

须知:

值必须用双引号包裹,多个环境变量以空格分隔。

-

--prefill-params

必选

-

--decode-params

必选

-

--file-name

可选

生成的yaml文件名。

infer_vllm_kubeinfer.yaml

表2 PD分离部署脚本启动命令说明

参数

约束

参数类型

描述

--tmpfs-path

可选

特性参数

基于tmpfs配置内存缓存(可选)配置的内存缓存权重文件。

须知:
  • 该缓存能被使用的前提是已正确拷贝权重文件到tmpfs目录中,且要保证权重文件的完整性
  • 要求该目录必须是--mount-path指定的目录的子目录。

--enable-fusion-spec

可选

特性参数

MTP特性,需要使用融合权重。开启特性值为1,否则为0。

--enable-trace-log

可选

特性参数

使用trace log值为1,否则为0。开启该功能会影响部分性能。

--vllm-log-path

可选

特性参数

采集vLLM框架日志,开启特性需要指定滚动日志保存的路径。不开启时,日志保存在容器内/home/ma-user/AscendCloud/logs。

日志采集功能的使用详见推理层日志采集与转储

--torchair-cache-home

可选

特性参数

图编译缓存功能,开启特性需要指定共享盘路径。

图编译缓存功能的使用详见PD分离部署下图编译缓存使用操作

--extra-env-vars

可选

特性参数

额外要设置的环境变量,参考表3

须知:

值必须用单引号包裹,多个环境变量以逗号分隔。

--model

必选

启动参数

对应vLLM入参--model,模型权重所在路径,路径中不能包含英文符号"."。

须知:

要求该目录必须是--mount-path指定的目录的子目录。

--served-model-name

可选

启动参数

对应vLLM入参--served-model-name。

--max-model-len

可选

启动参数

对应vLLM入参--max-model-len。

--gpu-memory-utilization

可选

启动参数

对应vLLM入参--gpu-memory-utilization。

--scheduler-params

必选

启动参数

部署推理服务scheduler、prefill、decode分别对应的特殊参数。

须知:

必须显式指定各角色的--max-num-seqs,其他参数按需配置。

--prefill-params

必选

启动参数

--decode-params

必选

启动参数

其他vLLM支持的参数,用法同vLLM

-

表3 环境变量配置参考

参数

描述

LLM_WAITING_OUT

LLM_WAITING_OUT,支持请求排队超时。

ENABLE_MAX_TOKENS_EXCLUDE_REASONING

开启max_tokens参数只控制思维链之后的输出长度,值为1时开启。

DEFAULT_MAX_TOKENS

在请求中未设置max_tokens时,系统默认值。

脚本中vLLM启动命令参数如下:

# scheduler
sh ${LLM_TOOLS_PATH}/PD_separate/start_servers.sh \
    --host=0.0.0.0 \
    --port=${PORT} \
    --model=${MODEL} \
    --served-model-name=${SERVED_MODEL_NAME} \
    --max-model-len=${MAX_MODEL_LEN} \
    --max-num-batched-tokens=${MAX_MODEL_LEN} \
    --max-num-seqs=${MAX_NUM_SEQS} \
    --tensor-parallel-size=${TENSOR_PARALLEL_SIZE} \
    --dtype=auto \
    --trust-remote-code \
    --disable-log-requests ${SCHEDULER_PARAMS} ${mtp_param} "${EXTRA_ARGS[@]}"

# prefill
sh ${LLM_TOOLS_PATH}/PD_separate/start_servers.sh \
    --host=0.0.0.0 \
    --port=${PORT} \
    --model=${MODEL} \
    --served-model-name=${SERVED_MODEL_NAME} \
    --max-model-len=${MAX_MODEL_LEN} \
    --max-num-batched-tokens=${MAX_MODEL_LEN} \
    --max-num-seqs=${MAX_NUM_SEQS} \
    --tensor-parallel-size=${TENSOR_PARALLEL_SIZE} \
    --dtype=auto \
    --trust-remote-code \
    --disable-log-requests \
    --block-size=128 \
    --distributed-executor-backend=ray \
    --gpu-memory-utilization=${GPU_MEMORY_UTILIZATION} ${PREFILL_PARAMS} ${mtp_param} "${EXTRA_ARGS[@]}"

# decode
sh ${LLM_TOOLS_PATH}/PD_separate/start_servers.sh \
    --host=0.0.0.0 \
    --port=${PORT} \
    --model=${MODEL} \
    --served-model-name=${SERVED_MODEL_NAME} \
    --max-model-len=${MAX_MODEL_LEN} \
    --max-num-batched-tokens=${MAX_MODEL_LEN} \
    --max-num-seqs=${MAX_NUM_SEQS} \
    --tensor-parallel-size=${TENSOR_PARALLEL_SIZE} \
    --dtype=auto \
    --trust-remote-code \
    --disable-log-requests \
    --block-size=128 \
    --distributed-executor-backend=ray \
    --gpu-memory-utilization=${GPU_MEMORY_UTILIZATION} ${DECODE_PARAMS} ${mtp_param} "${EXTRA_ARGS[@]}"

相关文档