cann-recipes-infer DeepSeek-V4推理优化
DeepSeek-V4 Inference on NPU【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer概述DeepSeek团队发布了最新的模型DeepSeek-V4本实践基于DeepSeek开源代码进行迁移并在CANN平台上完成性能优化支持在昇腾Atlas A3 Pod平台和950PR/DT平台部署。本实践的优化特性和性能Benchmark可参见NPU DeepSeek-V4推理优化实践。硬件要求产品型号Atlas A3 Pod 系列操作系统Linux ARM镜像版本cann9.0_pt2.8.0_ds_aarch_image:v1.2驱动版本Ascend HDK 25.5.1npu-smi info 检查Ascend NPU固件和驱动是否正确安装。如果已安装通过命令npu-smi info确认版本是否为25.5.1。如果未安装或者版本不是25.5.1请先下载固件和驱动包并根据指导自行安装。CANNLab一站式开发平台指南CANNLab一站式开发平台已预置部署运行环境使用CANNLab一站式开发平台时请以本章节为准无需执行标准流程中的 docker 相关步骤。模型支持CANNLab一站式开发平台环境为 Atlas A3 8卡环境仅支持部署 DeepSeek-V4 Flash。环境部署平台已搭建好运行环境无需获取 docker 镜像也无需拉起 docker 容器。CANN 路径CANN 安装路径为/home/developer/Ascend/cann涉及cann_path的脚本如权重转换前的source命令均需使用此路径。YAML 配置CANNLab一站式开发平台请使用ci_a3/deepseek_v4_platform.yaml作为配置文件。由于CANNLab一站式开发平台和 A3 Pod 硬件核数差异本实践不支持多流控核yaml 配置中enable_limit_core需设置为False。以下快速启动章节中各步骤的标准操作适用于非CANNLab一站式开发平台环境CANNLab一站式开发平台用户请根据上述差异调整对应步骤。快速启动下载源码在各个节点上执行如下命令下载 cann-recipes-infer 源码。mkdir -p /home/code; cd /home/code/ git clone https://gitcode.com/cann/cann-recipes-infer.git cd cann-recipes-infer下载数据集从链接中下载长序列输入数据集longbook_qa_eng并上传到各个节点上新建的路径dataset/InfiniteBench下。mkdir -p dataset/InfiniteBench下载权重下载DeepSeek-V4-Flash原始Hybrid FP8-MXFP4权重或DeepSeek-V4-Pro原始Hybrid FP8-MXFP4权重并上传到各节点的某个固定的路径下比如/data/models/deepseek_v4_hybrid_fp8_mxfp4。获取 docker 镜像从ARM镜像地址中下载 docker 镜像然后上传到A3服务器的每个节点上并通过命令导入镜像docker load -i cann9.0_pt2.8.0_ds_aarch_image_v1.2.tar。拉起 docker 容器在各个节点上通过如下脚本拉起容器默认容器名为 cann_recipes_infer。注意需要将权重路径和源码路径挂载到容器里。# A3 容器拉起脚本 docker run -u root -itd --name cann_recipes_infer --ulimit nproc65535:65535 --ipchost \ --device/dev/davinci0 --device/dev/davinci1 \ --device/dev/davinci2 --device/dev/davinci3 \ --device/dev/davinci4 --device/dev/davinci5 \ --device/dev/davinci6 --device/dev/davinci7 \ --device/dev/davinci8 --device/dev/davinci9 \ --device/dev/davinci10 --device/dev/davinci11 \ --device/dev/davinci12 --device/dev/davinci13 \ --device/dev/davinci14 --device/dev/davinci15 \ --device/dev/davinci_manager --device/dev/devmm_svm \ --device/dev/hisi_hdc \ -v /home/:/home \ -v /data:/data \ -v /etc/localtime:/etc/localtime \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /etc/ascend_install.info:/etc/ascend_install.info -v /var/log/npu/:/usr/slog \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v /usr/local/dcmi:/usr/local/dcmi -v /usr/local/sbin:/usr/local/sbin \ -v /etc/hccn.conf:/etc/hccn.conf -v /root/.pip:/root/.pip -v /etc/hosts:/etc/hosts \ -v /usr/bin/hostname:/usr/bin/hostname \ --nethost \ --shm-size128g \ --privileged \ cann9.0_pt2.8.0_ds_aarch_image:v1.2 /bin/bash在各个节点上通过如下命令进入容器docker attach cann_recipes_infer cd /home/code/cann-recipes-infer/models/deepseek_v4转换权重中的config.json使用原生Hybrid FP8-MXFP4版本权重执行推理时需要执行这一步骤其他场景跳过该步骤。需要进入容器并在各个节点上使用utils/convert_config.py脚本完成权重路径下的config.json转换。注意该步骤不会对权重进行任何处理仅将新生成的config.json覆盖原始config.json如需保留原始config.json请自行备份如果权重config.json转换的运行环境为NPU需要先执行cann_path/usr/local/Ascend/cann # cann包安装路径 source ${cann_path}/bin/setenv.bash入参介绍input_fp8_hf_path原始权重路径拉起示例python utils/convert_config.py --input_fp8_hf_path /data/models/deepseek_v4转换权重原生Hybrid FP8-MXFP4权重执行推理时可跳过这一步骤若需要使用 INT8、Hybrid INT8-INT4、Hybrid MXFP8-MXFP4 或 Hybrid HiF8-MXFP8-MXFP4 权重执行推理需要进入容器并在各个节点上使用utils/convert_model.py脚本完成 Hybrid FP8-MXFP4 到 INT8/Hybrid INT8-INT4 /Hybrid MXFP8-MXFP4 /Hybrid HiF8-MXFP8-MXFP4 权重转换。入参介绍input_fp8_hf_path原始权重路径output_hf_path转换后输出的权重路径quant_type量化模式quant_param_path量化参数文件夹路径仅适用于DeepSeek-V4-Pro的Hybrid INT8-INT4量化如果权重转换的运行环境为NPU需要先执行cann_path/usr/local/Ascend/cann # cann包安装路径 source ${cann_path}/bin/setenv.bash如果想要获取DeepSeek-V4-Pro的Hybrid INT8-INT4 量化权重需要预先从Hybrid INT8-INT4 量化参数中下载量化参数并解压缩。权重转换拉起示例# 转换为W8A8-INT8权重适用于Atlas A3 Pod系列 python utils/convert_model.py --input_fp8_hf_path /data/models/deepseek_v4 --output_hf_path /data/models/deepseek_v4_int8_w8a8 --quant_type w8a8-int # 转换为Hybrid INT8-INT4权重适用于Atlas A3 Pod系列DeepSeek-V4-Pro模型 python utils/convert_model.py --input_fp8_hf_path /data/models/deepseek_v4 --output_hf_path /data/models/deepseek_v4_int4_w4a8 --quant_type w4a8-int --quant_param_path /path/to/your_quant_param_folder # 转换为Hybrid MXFP8-MXFP4权重适用于950PR/DT系列 python utils/convert_model.py --input_fp8_hf_path /data/models/deepseek_v4 --output_hf_path /data/models/deepseek_v4_hybrid_mxfp8_mxfp4 --quant_type w4a8-mx # 转换为Hybrid HiF8-MXFP8-MXFP4权重适用于950PR/DT系列 python utils/convert_model.py --input_fp8_hf_path /data/models/deepseek_v4 --output_hf_path /data/models/deepseek_v4_hybrid_hif8_mxfp8_mxfp4 --quant_type w4a8-mx-hif修改配置在各个节点上修改cann-recipes-infer/models/deepseek_v4/set_env.sh中的如下字段:IPs配置所有节点的IP按照rank id排序多个节点的ip通过空格分开例如(xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx)。cann_path: CANN软件包安装路径例如/usr/local/Ascend/cann。在Atlas A3 Pod各个节点上修改config/ci_a3路径下需要执行的yaml文件中的model_config.model_path真实路径在950PR/DT各个节点上修改config/ci_950路径下需要执行的yaml文件中的model_config.model_path路径。通用 YAML 配置说明可参见YAML参数描述。在 yaml 配置中默认采用npugraph_ex执行方式。这一后端是 NPU 平台全新推出的高性能图计算组件其基于 CANN 的 AclGraph对标 CUDAGraph底层能力深度融合了一系列 NPU 架构的亲和调度和图优化技术。从落地层面来看npugraph_ex具备以下显著优势可快速接入 PyTorch 生态、能无缝集成到 SGLang、vLLM 等主流推理框架中同时保障极致的运行性能。除框架统一配置之外DeepSeek-V4 还额外支持以下特性放置在 YAML 文件model_config的custom_params字段下参数名类型默认值含义enable_multi_streamsboolfalse启用模型内多流并行主要用于 decode 阶段 MLA、Indexer、Compressor、MoE shared expert 等模块的并行调度。enable_limit_coreboolfalse在 Atlas A3 上配合多流使用对部分算子限制 AI Core 数以提升多流重叠效果开启时要求enable_multi_streamsTrue且不支持enable_pyptoTrue。enable_pyptoboolfalse启用 PyPTO 算子路径当前与enable_limit_core互斥。moe_chunk_max_lenint65536MoE token 分发的最大 chunk 长度用于长序列 prefill 场景规避 OOM。CANNLab一站式开发平台 A3 场景请使用ci_a3/deepseek_v4_platform.yaml详见CANNLab一站式开发平台指南。Note: 在A3环境下INT8 W8A8场景支持 4~64卡部署。可分别在config下的yaml文件中修改parallel_config.world_sizechips * 2配置。拉起多卡推理以下命令在仓库根目录执行。统一入口脚本位于executor/scripts/infer.sh通过以下参数控制启动参数含义取值示例--model模型目录名对应models/下的子目录deepseek_v4--mode推理模式offline/online--yaml离线模式yaml 文件名路径相对models/deepseek_v4/config/ci_a3/deepseek_v4_flash.yaml--pd-role在线 PD 模式部署角色prefill/decode--p-yaml-name可选在线模式 prefill yaml 文件名ci_a3/deepseek_v4_pd/prefill.yaml--d-yaml-name可选在线模式 decode yaml 文件名ci_a3/deepseek_v4_pd/decode.yaml在线模式 IP 等更多配置可参考 executor 设计文档 §5.1 启动方式。使用方式一命令行传参# offline 模式A3 Flash bash executor/scripts/infer.sh --model deepseek_v4 --yaml ci_a3/deepseek_v4_flash.yaml # offline 模式CANNLab A3 bash executor/scripts/infer.sh --model deepseek_v4 --yaml ci_a3/deepseek_v4_platform.yaml # offline 模式950PR/DT bash executor/scripts/infer.sh --model deepseek_v4 --yaml ci_950/deepseek_v4.yaml # online PD 模式暂时只支持A3机型 bash executor/scripts/infer.sh --model deepseek_v4 --mode online --pd-role prefill --p-yaml-name ci_a3/deepseek_v4_pd/prefill.yaml --d-yaml-name ci_a3/deepseek_v4_pd/decode.yaml bash executor/scripts/infer.sh --model deepseek_v4 --mode online --pd-role decode --p-yaml-name ci_a3/deepseek_v4_pd/prefill.yaml --d-yaml-name ci_a3/deepseek_v4_pd/decode.yaml如需查看参数说明可执行bash executor/scripts/infer.sh --help。使用方式二直接修改脚本默认值后执行编辑executor/scripts/infer.sh按需修改MODEL/MODE/YAML_FILE/PD_ROLE/P_YAML_NAME/D_YAML_NAME等参数的默认值例如MODELdeepseek_v4 MODEoffline YAML_FILEci_a3/deepseek_v4_flash.yaml保存后直接执行bash executor/scripts/infer.sh如果是多机环境需要在每个节点上同步执行拉起命令。Note不同平台最小部署单元要求如下平台模型型号推荐量化策略最小部署单元chips950PR/DTDeepSeek-V4 FlashHybrid MXFP8-MXFP44950PR/DTDeepSeek-V4 FlashHybrid HiF8-MXFP8-MXFP44950PR/DTDeepSeek-V4 ProHybrid MXFP8-MXFP416Atlas A3DeepSeek-V4 FlashINT8 W8A84Atlas A3DeepSeek-V4 ProHybrid INT8-INT432【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考