生成DeepSeek部署定义yaml
基于KubeInfer的部署,关键是定义部署所需的yaml文件,参考获取部署版本包中提供的gen_pd_deploy_kubeinfer_yaml.py脚本通过执行下述命令生成基于KubeInfer部署的yaml文件:
python3 gen_pd_deploy_kubeinfer_yaml.py [--device-type=xx] [--num-roles=xx] [--replicas=xx] [--custom-labels=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文件默认包含下述能力:
- 针对该kubeinfer实例默认创建NodePort类型的K8s service,对外nodePort默认为30090。如果您要在同一个K8s集群中部署多个kubeinfer实例,注意非单kubeinfer多instance,则要确保这个nodePort为不同的值。其中推理实例端口信息详见推理部署端口规划与冲突操作指导。
 - 故障恢复机制默认为instance级重调度,默认配置KubeInfer自动感知恢复机制和K8s的三大探针。
 - 容器默认配置了优雅退出时间,默认为120s。如果您的业务有需求需要修改这个时间,需要修改yaml中每个role定义里的优雅退出时间配置,详见基于KubeInfer的部署yaml文件说明。
 - 存储配置规划的存储路径默认为”/mnt/deepseek”,会以相同路径挂载至Pod。如果您的路径不一致需要修改yaml文件中每个role定义里的挂载路径信息,详见基于KubeInfer的部署yaml文件说明,参考如下:
     
containers: - ... volumeMounts: - mountPath: /mnt/deepseek/ # 容器中权重挂载目录 name: deepseek ... volumes: ... - hostPath: path: /mnt/deepseek/ # 模型权重在外部存储上的路径 type: Directory name: deepseek - 推理服务日志、CANN NPU plog和ray的日志默认挂载至主机上的目录,详细说明见推理层日志采集与转储。
 - 默认配置升级策略为”一上一下”的滚动升级策略,如果您的业务有需要修改这个策略,需要修改yaml中定义,详见基于KubeInfer的部署yaml文件说明。
 - yaml中默认调用了版本包中的启动脚本,该脚本支持可传入的参数参考表2,除此之外,用户还可以追加标准的vLLM启动参数。示例:如果用户部署DeepSeek系列想开启Multi Step功能,可以新增以下启动参数:
     
--num-scheduler-steps=4
 
| 
       参数  | 
     
       约束  | 
     
       描述  | 
     
       默认值  | 
    
|---|---|---|---|
| 
       --device-type  | 
     
       可选  | 
     
       节点类型,值为A2或者A3。  | 
     
       A3  | 
    
| 
       --num-roles  | 
     
       必选  | 
     
       KubeInfer角色个数,例如2P1D则为3,详见KubeInfer部署方案介绍。  | 
     
       NA  | 
    
| 
       --replicas  | 
     
       可选  | 
     
       kubeinfer实例instance数,对应K8s概念中的副本数。  | 
     
       1  | 
    
| 
       --custom-labels  | 
     
       可选  | 
     
       kubeinfer部署支持自定义标签,格式为json。  | 
     
       NA  | 
    
| 
       --image-name  | 
     
       必选  | 
     
       推理镜像名称,即为获取推理镜像中制作的镜像。  | 
     
       NA  | 
    
| 
       --mount-path  | 
     
       可选  | 
     
       存储配置中挂载的目录,该目录下存放权重和脚本文件。  | 
     
       /mnt/deepseek  | 
    
| 
       --script-path  | 
     
       可选  | 
     
       部署推理服务依赖的脚本文件路径。 
        须知: 
        必须是--mount-path指定的目录的子目录。  | 
     
       /mnt/deepseek/deploy  | 
    
| 
       --common-params  | 
     
       必选  | 
     
       部署推理服务的特性参数和公共的启动参数,参考表2及参数类型。 
        须知: 
        值必须用双引号包裹。  | 
     
       NA  | 
    
| 
       --scheduler-params  | 
     
       必选  | 
     
       部署推理服务scheduler、prefill、decode分别对应的启动参数,参考表2及参数类型。 
        须知: 
        值必须用双引号包裹。  | 
     
       NA  | 
    
| 
       --prefill-params  | 
     
       必选  | 
     
       NA  | 
    |
| 
       --decode-params  | 
     
       必选  | 
     
       NA  | 
    |
| 
       --file-name  | 
     
       可选  | 
     
       生成的yaml文件名。  | 
     
       infer_vllm_kubeinfer.yaml  | 
    
| 
       参数  | 
     
       约束  | 
     
       参数类型  | 
     
       描述  | 
    
|---|---|---|---|
| 
       --tmpfs-path  | 
     
       可选  | 
     
       特性参数  | 
     
       基于tmpfs配置内存缓存(可选)配置的内存缓存权重文件。 
        须知: 
        
  | 
    
| 
       --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。 
        须知: 
        值必须用单引号包裹,多个环境变量以逗号分隔。  | 
    
| 
       --scheduler-extra-env-vars  | 
     
       可选  | 
     
       特性参数  | 
     
       部署推理服务scheduler、prefill、decode要额外设置的特殊环境变量,参考表3。 
        须知: 
        值必须用单引号包裹,多个环境变量以逗号分隔。  | 
    
| 
       --prefill-extra-env-vars  | 
     
       可选  | 
     
       特性参数  | 
    |
| 
       --decode-extra-env-vars  | 
     
       可选  | 
     
       特性参数  | 
    |
| 
       --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  | 
     
       NA  | 
    ||
| 
       参数  | 
     
       描述  | 
    
|---|---|
| 
       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 \
    ${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 \
    ${DECODE_PARAMS} ${mtp_param} "${EXTRA_ARGS[@]}"