ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

DeepSeek-V4 昇腾 NPU 推理部署实践:基于 CANN cann-recipes-infer 的完整环境搭建与多卡推理指南

DeepSeek-V4 昇腾 NPU 推理部署实践:基于 CANN cann-recipes-infer 的完整环境搭建与多卡推理指南 DeepSeek-V4 昇腾 NPU 推理部署实践基于 CANN cann-recipes-infer 的完整环境搭建与多卡推理指南【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer本文以 CANN 开源样例仓库 cann-recipes-infer 中的 DeepSeek-V4 推理实践 为核心系统讲解如何在昇腾 Atlas A3 Pod 与 Ascend 950 系列平台上完成 DeepSeek-V4 Flash / Pro 的权重准备、量化转换、环境部署与多卡推理拉起并深入拆解convert_config.py、convert_model.py、YAML 配置与infer.sh启动脚本等源码实现。读者读完即可独立完成 DeepSeek-V4 在 CANN 平台上的端到端推理部署并掌握 W8A8-INT8、Hybrid INT8-INT4、Hybrid MXFP8-MXFP4、Hybrid HiF8-MXFP8-MXFP4 等多种量化策略与 DSpark 投机推理的配置方法。概述DeepSeek-V4 与 CANN 平台的 0 Day 适配DeepSeek 团队发布了最新的 DeepSeek-V4 系列模型包含DeepSeek-V4 Flash与DeepSeek-V4 Pro两种规格。本实践基于 DeepSeek 开源代码进行迁移并在 CANN 平台上完成性能优化支持在昇腾Atlas A3 Pod平台和Ascend 950系列平台部署。与上一代 DeepSeek-V3.2 相比DeepSeek-V4 在稀疏 AttentionDeepSeek Sparse Attention基础上在不同层间进一步引入KV Cache 滑窗Window Cache与压缩算法KV Cache Compress显著降低 Attention 的计算与访存开销可大幅提升长序列计算效率、降低推理成本。本实践对模型推理代码、融合算子、量化方案与投机推理路径均做了 NPU 适配整体优化特性、融合 Kernel 细节与性能 Benchmark 可参见 NPU DeepSeek-V4 推理优化实践。硬件与环境要求部署前请先核对目标硬件的产品型号、操作系统与驱动版本项目要求产品型号Atlas A3 Pod 系列、Ascend 950 系列操作系统Linux ARMAtlas A3 Pod、Linux x86Ascend 950驱动版本Ascend HDK 25.5.1安装或升级驱动后可通过npu-smi info检查 Ascend NPU 固件和驱动是否正确安装并确认版本是否为25.5.1。如果未安装或版本不符请先从昇腾社区固件驱动下载页面获取与Ascend HDK 25.5.1匹配的固件和驱动包并根据社区安装指导自行安装。CANNLab 一站式开发平台指南CANNLab 一站式开发平台已预置部署运行环境使用该平台时请以本章节为准无需重复执行标准流程中的软件包安装步骤。与自建环境的关键差异如下模型支持CANNLab 一站式开发平台环境为 Atlas A3 8 卡环境仅支持部署 DeepSeek-V4 Flash。环境部署平台已搭建好运行环境无需重复安装 CANN、PyTorch 和 torch_npu。CANN 路径CANN 安装路径为/home/developer/Ascend/cann涉及cann_path的脚本如权重转换前的source命令均需使用此路径。YAML 配置CANNLab 一站式开发平台请使用 deepseek_v4_flash_rank_16_16ep_w8a8_platform.yaml 作为配置文件。由于 CANNLab 一站式开发平台和 A3 Pod 硬件核数差异本实践不支持多流控核yaml 配置中enable_limit_core需设置为False。以下「环境准备」和「快速启动」章节适用于非 CANNLab 一站式开发平台环境CANNLab 一站式开发平台用户请根据上述差异调整对应步骤。环境准备Atlas A3 Docker 部署A3 使用预置 ARM 镜像镜像中已包含本实践所需的 PyTorch、torch_npu、torchair 和 CANN 运行环境。从 A3 ARM 镜像地址下载 docker 镜像后上传到 A3 服务器的每个节点并在每个节点执行docker load -i cann9.2.0.pt2.9.0_dsv4_aarch_a3_image_custom_20260827.tar拉起 docker 容器在各个节点上通过如下脚本拉起容器默认容器名为cann_recipes_infer。请将权重路径和源码路径挂载到容器中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.2.0.pt2.9.0_dsv4_aarch_a3_image_custom_20260827:latest /bin/bash要点说明通过--device/dev/davinci0/dev/davinci15将 16 张 NPU 设备逐一映射进容器同时需要映射davinci_manager、devmm_svm、hisi_hdc等管理设备--nethost用于多机通信--shm-size128g保障大 batch 与长序列场景下的共享内存需求容器名和镜像 tag 必须与上述命令保持一致。进入容器后将源码挂载或放置在/home/code/cann-recipes-infer并按后续「修改配置」和「拉起多卡推理」章节执行。Atlas A5 部署非预置镜像环境对于没有预置镜像的 x86 环境对应 Ascend 950 系列按以下步骤从零搭建1. 安装 PyTorch 与 torch_nputorch_npu为 PyTorch 在 NPU 上运行提供适配执行python -m pip install torch2.9.0 --index-url https://download.pytorch.org/whl/cpu mkdir -p /tmp/torch_npu_290_daily cd /tmp/torch_npu_290_daily wget -O pytorch_v2.9.0_py311.tar.gz \ https://pytorch-package.obs.cn-north-4.myhuaweicloud.com/pta/Daily/v2.9.0/20260903.1/pytorch_v2.9.0_py311.tar.gz tar -xzf pytorch_v2.9.0_py311.tar.gz python -m pip install --no-deps \ ./torch_npu-2.9.0.post7.dev20260903-cp311-cp311-manylinux_2_28_x86_64.whl2. 下载项目源码并安装 Python 依赖git clone https://gitcode.com/cann/cann-recipes-infer.git cd cann-recipes-infer python -m pip install -r ./models/deepseek_v4/requirements.txtrequirements.txt 中固定了关键依赖版本例如torch2.9.0、transformers4.53.3、compressed-tensors0.6.0、torchao0.15.0等其中compressed-tensors用于解析权重中的量化配置quantization_configtorchao提供 MX 量化基础算子与后续权重转换脚本utils/convert_model.py直接相关。3. 安装 CANN 软件包本实践依赖 CANN 开发套件包toolkit和与目标硬件匹配的二进制算子包ops支持 CANN 9.2.0。请从 CANN 下载页面选择对应架构的 weekly 版本下载后按以下命令依次安装 toolkit 和 ops 软件包chmod x Ascend-cann-toolkit_version_linux-arch.run ./Ascend-cann-toolkit_version_linux-arch.run --install chmod x Ascend-cann-kernels-product_version_linux.run ./Ascend-cann-kernels-product_version_linux.run --install多节点部署时各节点应使用相同的 CANN、驱动和固件版本。CANN 安装完成后根据实际安装路径加载环境变量cann_path/usr/local/Ascend/cann source ${cann_path}/bin/setenv.bash新建终端后重新加载 CANN 环境脚本即可。4. 配置样例运行环境修改 executor/scripts/set_env.sh 中的节点 IP 和 CANN 安装路径。其中cann_path需与实际的 CANN 安装路径保持一致例如/usr/local/Ascend/cann。快速启动下载数据集从公开数据集仓库下载长序列输入数据集longbook_qa_engInfiniteBench 子集并上传到各个节点上新建的路径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。转换权重中的 config.json使用原生 Hybrid FP8-MXFP4 版本权重执行推理时需要执行此步骤其他场景可跳过。在各个节点上进入models/deepseek_v4目录使用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原始权重路径--hif可选标志生成 HiF8 量化配置而非默认的 MXFP4 配置对应 convert_config.py 中的参数解析。拉起示例python utils/convert_config.py --input_fp8_hf_path /data/models/deepseek_v4从源码实现看convert_config.py 的核心逻辑是读取权重目录下的config.json获取num_hidden_layers与compress_ratios依据每层的压缩倍率1 / 4 / 128生成需要跳过量化的层名列表如attn.wq_a、attn.wkv、indexer.compressor.wkv等见generate_ignore_item生成标准quantization_configquant_method: compressed-tensors、quantization_status: compressed其中 KV Cache 与 LI Cache 均按 8bit float 格式配置将新生成的quantization_config写回原 config.json。这意味着转换后的权重目录可直接被推理框架按 compressed-tensors 规范解析从而识别出每个算子的量化位宽与策略。转换权重原生 Hybrid FP8-MXFP4 权重执行推理时可跳过此步骤。若需要使用INT8、Hybrid INT8-INT4、Hybrid MXFP8-MXFP4 或 Hybrid HiF8-MXFP8-MXFP4权重执行推理需在各个节点上进入models/deepseek_v4目录使用utils/convert_model.py脚本完成从 Hybrid FP8-MXFP4 到目标量化格式的权重转换。入参介绍--input_fp8_hf_path原始权重路径--output_hf_path转换后输出的权重路径--quant_type量化模式。源码 convert_model.py 支持的可选值为w8a8-int、w4a8-int、bfloat16、w4a8-mx、w4a8-mx-hif默认w8a8-int--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 量化权重需要预先从量化参数下载地址获取并解压缩对应的量化参数文件每个层对应一个quant_params_{layer_idx}.pt文件源码通过load_clip_params按层加载用于 INT4 量化时的 clip factor 搜索。权重转换拉起示例# 转换为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权重适用于Ascend 950系列 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权重适用于Ascend 950系列 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结合 convert_model.py 源码可以进一步理解各量化模式的区别反量化回全精度脚本首先将 FP8含 MXFP4 打包格式权重按对应 scale 反量化为 BF16其中 MXFP4 权重通过unpack_mxfloat4_to_fp32拆包、按 block_size32 反量化见weight_dequantW8A8-INT8w8a8-int对 MoE 路由/共享专家、Attention 的wq_b/wo_b等按 Per-Channel 静态量化调用int_weight_quant得到 INT8 权重与 FP32 scaleHybrid INT8-INT4w4a8-int路由专家 Linear 使用 4bit 量化per_channel_searching搜索最优 clip 比例并生成 W4A8 MoEGMM 所需的 assistance bias 与打包后的 UINT64 scalepack_4bit、int4_assistance_bias、scale_fp32_to_u64Hybrid MXFP8-MXFP4w4a8-mxAttention 相关 Linear 使用 MXFP8MoE 路由专家使用 MXFP4quantize_mxpack_uint4Hybrid HiF8-MXFP8-MXFP4w4a8-mx-hif在 MX 模式基础上对 Attention / MTP 的 8bit Linear 使用 HiF8 离线量化hif8_weight_quant基于torch_npu.npu_dynamic_quant共享专家仍保持 MXFP8。脚本同时会复制原权重目录中的.py/.json/.jinja文件到输出目录并重写model.safetensors.index.json与config.json保证转换后的权重目录结构可直接被加载。修改配置公共环境脚本executor/scripts/set_env.sh在各个节点上修改公共环境脚本cann-recipes-infer/executor/scripts/set_env.sh中的如下字段IPs离线模式配置所有节点的 IP按照 rank id 排序多个节点的 ip 通过空格分开例如(xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx)PREFILL_IPS/DECODE_IPS在线 PD 模式分别配置 prefill 和 decode 节点 IPcann_pathCANN 软件包安装路径例如/usr/local/Ascend/cann。模型私有环境脚本models/deepseek_v4/set_env.shexecutor/scripts/infer.sh 会先加载公共环境脚本executor/scripts/set_env.sh然后再继续加载模型私有环境脚本 models/deepseek_v4/set_env.sh。后者负责 source 自定义算子包的环境变量${ASCEND_HOME_PATH}/opp/vendors/customize/bin/set_env.bash与custom_transformer对应目录确保自定义融合算子可被正确加载。YAML 配置在 Atlas A3 Pod 各个节点上修改config/ci_a3路径下需要执行的 yaml 文件中的model_config.model_path为真实权重路径在 Ascend 950 各个节点上修改config/ci_950路径下需要执行的 yaml 文件中的model_config.model_path路径通用 YAML 配置说明可参见 YAML 参数描述。执行后端npugraph_ex在 yaml 配置中默认采用npugraph_ex执行方式例如ci_a3/deepseek_v4_flash_rank_128_128ep_w8a8.yaml中exe_mode: npugraph_ex。这一后端是 NPU 平台全新推出的高性能图计算组件其基于 CANN 的 AclGraph对标 CUDAGraph底层能力深度融合了一系列 NPU 架构亲和调度和图优化技术。从落地层面来看npugraph_ex具备以下显著优势可快速接入 PyTorch 生态、能无缝集成到 SGLang、vLLM 等主流推理框架中同时保障极致的运行性能。DeepSeek-V4 专属特性custom_params除框架统一配置之外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。以仓库中的 deepseek_v4_flash_rank_128_128ep_w8a8.yaml 为例其custom_params同时开启了enable_multi_streams: True、enable_limit_core: True与moe_chunk_max_len: 65536对应高吞吐 128 卡 EP 部署场景而 CANNLab 平台配置 deepseek_v4_flash_rank_16_16ep_w8a8_platform.yaml 则关闭了enable_limit_core以适配平台核数差异。多流并行的收益来源在于 Attention 模块天然存在的计算并行空间Query 计算流与 KV 计算流可以并行CSA 场景下 LightningIndexer 与 Compressor 无数据依赖。多流方案与相关 Benchmark 的详细分析见 多流并行优化。CANNLab 一站式开发平台 A3 场景请使用ci_a3/deepseek_v4_flash_rank_16_16ep_w8a8_platform.yaml详见 CANNLab 一站式开发平台指南。Note: 在 A3 环境下INT8 W8A8 场景支持 464 卡部署。可分别在 config 下的 yaml 文件中修改parallel_config.world_sizechips * 2配置。DSpark 投机推理配置DeepSeek-V4 Flash 支持通过 DSpark 草稿模型一次生成多个 Draft Token再由主模型批量校验。DSpark 支持 Ascend 950 系列4 卡离线推理示例为 deepseek_v4_flash_rank_4_4ep_dspark.yaml实现说明见 DSpark 方案。与原生 MTP 逐步生成候选不同DSpark 使用多级 Proposal Layer 生成 Draft Block并通过 Markov Head 建模模块内 Token 依赖、Confidence Head 给出候选置信度实现一次草稿模型执行即生成一组候选、主模型批量 Verify 的块级投机解码权重准备将model_config.model_path设置为配套 DSpark 权重目录包含主模型和mtp.*草稿权重。使用独立草稿目录时设置speculative_config.draft_model_path草稿模型仍共享主模型的 Embedding 和 LM Head需使用配套权重及相同词表。草稿配置需包含dspark_target_layer_ids主模型辅助输出层和dspark_block_size每组候选数。n_mtp_layers表示草稿 stage 数可由权重目录下的inference/config.json补充无需在 YAML 中重复设置。参数配置以下字段位于speculative_config其余配置沿用前文说明。参数名示例值含义methoddspark选择 DSpark原生 MTP 使用mtp。num_speculative_tokens5每轮最大候选 Token 数0关闭投机推理。启用 DSpark 时须与权重的dspark_block_size一致。draft_model_path草稿权重目录空字符串复用model_config.model_path。confidence_threshold0.0候选置信度阈值范围为[0, 1]0关闭前缀截断。draft_temperature空值草稿采样温度非负空值继承请求温度。主模型温度由data_config.temperature设置。仓库中的 deepseek_v4_flash_rank_4_4ep_dspark.yaml 给出了完整示例method: dspark、num_speculative_tokens: 5、confidence_threshold: 0.0并行配置world_size: 4数据配置input_truncated_len: 8192。DSpark 当前仅支持离线非 PD 分离部署要求parallel_config.cp_size1。置信度截断只调整有效候选前缀主模型校验宽度仍为num_speculative_tokens 1。原生 MTP 兼容model_config.next_n配置DSpark 示例使用speculative_config。同时设置model_config.next_n和speculative_config.num_speculative_tokens时两个参数的数值须保持一致。拉起多卡推理以下命令在仓库根目录执行。统一入口脚本位于 executor/scripts/infer.sh通过以下参数控制启动参数含义取值示例--model模型目录名对应models/下的子目录deepseek_v4--mode推理模式offline/online--yaml离线模式yaml 文件名路径相对models/deepseek_v4/config/ci_a3/deepseek_v4_flash_rank_128_128ep_w8a8.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_rank_128_128ep_w8a8.yaml # offline 模式CANNLab A3 bash executor/scripts/infer.sh --model deepseek_v4 --yaml ci_a3/deepseek_v4_flash_rank_16_16ep_w8a8_platform.yaml # offline 模式Ascend 950 bash executor/scripts/infer.sh --model deepseek_v4 --yaml ci_950/deepseek_v4_flash_rank_16_16ep.yaml # offline 模式Ascend 950系列DeepSeek-V4 Flash DSpark bash executor/scripts/infer.sh --model deepseek_v4 --yaml ci_950/deepseek_v4_flash_rank_4_4ep_dspark.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。从 infer.sh 的脚本实现看启动流程为source 公共函数与公共环境脚本 → 按参数覆盖默认值 → source 模型私有set_env.sh→ 通过validate_infer_args.py校验参数合法性 → 依据MODE导出YAML离线或P_YAML/D_YAML在线→ 调用launch函数拉起推理。使用方式二直接修改脚本默认值后执行编辑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_rank_128_128ep_w8a8.yaml保存后直接执行bash executor/scripts/infer.sh如果是多机环境需要在每个节点上同步执行拉起命令。Note不同平台最小部署单元要求如下平台模型型号推荐量化策略最小部署单元chipsAscend 950DeepSeek-V4 FlashHybrid MXFP8-MXFP44Ascend 950DeepSeek-V4 FlashHybrid HiF8-MXFP8-MXFP44Ascend 950DeepSeek-V4 ProHybrid MXFP8-MXFP416Atlas A3DeepSeek-V4 FlashINT8 W8A84Atlas A3DeepSeek-V4 ProHybrid INT8-INT432配套 YAML 与源码速览仓库为 DeepSeek-V4 提供了覆盖多场景的完整配置文件便于直接复用配置文件平台场景deepseek_v4_flash_rank_128_128ep_w8a8.yamlAtlas A3128 卡高吞吐 W8A8 离线推理deepseek_v4_flash_rank_128_128ep_128cp_w8a8.yamlAtlas A3128 卡 128 CP 长序列 prefilldeepseek_v4_flash_rank_16_16ep_w8a8_platform.yamlAtlas A3CANNLab 平台8 卡物理设备deepseek_v4_pro_rank_64_64ep_w4a8.yamlAtlas A3Pro 模型 Hybrid INT8-INT4deepseek_v4_pd/prefill.yaml / decode.yamlAtlas A3在线 PD 分离部署eager prefill npugraph_ex decodedeepseek_v4_flash_rank_16_16ep.yamlAscend 95016 卡 FlashHybrid MXFP8-MXFP4 权重deepseek_v4_flash_rank_4_4ep_dspark.yamlAscend 9504 卡 Flash DSpark 投机推理与推理直接相关的核心源码包括模型结构modeling_deepseek.py主模型与 modeling_dspark.pyDSpark 草稿模型模型模块modules/含 Indexer、Compressor、Attention 等子模块与 op_impls/ 下的 GatingTopK、mHC 算子实现权重与量化工具utils/convert_config.py、utils/convert_model.py、utils/mx_quantize.py投机推理 WorkerDSpark 与 MTP 共用投机 Worker 基类DSpark 的块级候选生成与拒绝采样校验实现在 executor/core/model_worker/dspark_worker.py 与 executor/core/model_worker/base_speculative_worker.py 中。优化特性与参考 Benchmark围绕 DeepSeek-V4 的新结构本实践在 NPU DeepSeek-V4 推理优化实践 中系统介绍了如下优化点可作为部署调优的背景参考融合 Kernel针对多 Layer 交织的 Window / Sparse / Compress Attention 提供 SparseAttnSharedKVSAS统一接口针对不同 Compress Ratio 提供 Compressor 与 CompressEpilog 融合算子强化 LightningIndexerLI算子并新增 Compress Ratio 支持针对 mHC 架构提供 HCPre / HCPost 融合算子。上述算子的 AscendC 实现与 PyPTO、TileLang 实现均已在仓内开源并行策略Prefill 长序列场景使用 Context ParallelCP并沿用zig_zag切分与 128 Token 的 all_gather 通信设计Decode 场景沿用 Attention DP MoE EP 并行LM Head 采用 TP并可选择性对o_a_proj做 TP 切分以分摊访存量化策略Atlas A3 Pod 支持 Int8 W8A8Flash 推荐与 Hybrid INT8-INT4Pro 推荐Ascend 950 系列支持原生 Hybrid FP8-MXFP4 以及硬件亲和的 Hybrid MXFP8-MXFP4、Hybrid HiF8-MXFP8-MXFP4多流并行覆盖 Attention 模块、MoE 共享路由、AICPU Scheduler 元数据生成等多个并行机会点MTP原生多 Token 预测机制Cache 侧针对 Window KV 与 Compressor 的kv_state/score_state设计 Ring Buffer实现少数 Block 的内存复用。Benchmark 均在离线推理模式不含 Serving 调度与框架负载均衡影响下采集例如950DT平台 16 卡 128K 序列 Flash 场景 TPOT 可低于 10ms、Atlas A3 Pod 64 卡 8K 序列 Decode 单卡吞吐可达 4388 TPS 量级。详细的性能数据、测试条件与接受率说明请以该文档「Benchmark」章节为准用户可按照数据集实际接受率自行折算。总结DeepSeek-V4 在 CANN 平台的部署链路已经高度工程化从预置镜像Atlas A3或手动安装Ascend 950的环境准备到convert_config.py与convert_model.py的权重量化转换再到 YAML 配置与infer.sh的统一拉起整个流程均有对应脚本与配置文件支撑。实际部署时只需把握三个关键点按平台选择正确的量化策略与最小部署单元、将model_path与cann_path等路径配置为真实环境路径、多机场景保持各节点配置一致并同步执行拉起命令。在此基础上可通过custom_params中的多流并行、PyPTO 算子路径与moe_chunk_max_len等开关以及 DSpark / MTP 投机推理进一步压榨昇腾硬件的推理性能。【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进