news 2026/9/19 18:47:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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.pyconvert_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 FlashDeepSeek-V4 Pro两种规格。本实践基于 DeepSeek 开源代码进行迁移,并在 CANN 平台上完成性能优化,支持在昇腾Atlas A3 Pod平台和Ascend 950系列平台部署。

与上一代 DeepSeek-V3.2 相比,DeepSeek-V4 在稀疏 Attention(DeepSeek Sparse Attention)基础上,在不同层间进一步引入KV Cache 滑窗(Window Cache)压缩算法(KV Cache Compress),显著降低 Attention 的计算与访存开销,可大幅提升长序列计算效率、降低推理成本。本实践对模型推理代码、融合算子、量化方案与投机推理路径均做了 NPU 适配,整体优化特性、融合 Kernel 细节与性能 Benchmark 可参见 NPU DeepSeek-V4 推理优化实践。


硬件与环境要求

部署前请先核对目标硬件的产品型号、操作系统与驱动版本:

项目要求
产品型号Atlas A3 Pod 系列、Ascend 950 系列
操作系统Linux ARM(Atlas A3 Pod)、Linux x86(Ascend 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 nproc=65535:65535 --ipc=host \ --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 \ --net=host --shm-size=128g --privileged \ cann9.2.0.pt2.9.0_dsv4_aarch_a3_image_custom_20260827:latest /bin/bash

要点说明:

  • 通过--device=/dev/davinci0/dev/davinci15将 16 张 NPU 设备逐一映射进容器,同时需要映射davinci_managerdevmm_svmhisi_hdc等管理设备;
  • --net=host用于多机通信,--shm-size=128g保障大 batch 与长序列场景下的共享内存需求;
  • 容器名和镜像 tag 必须与上述命令保持一致。

进入容器后,将源码挂载或放置在/home/code/cann-recipes-infer,并按后续「修改配置」和「拉起多卡推理」章节执行。

Atlas A5 部署(非预置镜像环境)

对于没有预置镜像的 x86 环境(对应 Ascend 950 系列),按以下步骤从零搭建:

1. 安装 PyTorch 与 torch_npu

torch_npu为 PyTorch 在 NPU 上运行提供适配,执行:

python -m pip install torch==2.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.whl

2. 下载项目源码并安装 Python 依赖

git clone https://gitcode.com/cann/cann-recipes-infer.git cd cann-recipes-infer python -m pip install -r ./models/deepseek_v4/requirements.txt

requirements.txt 中固定了关键依赖版本,例如torch==2.9.0transformers==4.53.3compressed-tensors==0.6.0torchao==0.15.0等,其中compressed-tensors用于解析权重中的量化配置(quantization_config),torchao提供 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_eng(InfiniteBench 子集),并上传到各个节点上新建的路径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 的核心逻辑是:

  1. 读取权重目录下的config.json,获取num_hidden_layerscompress_ratios
  2. 依据每层的压缩倍率(1 / 4 / 128)生成需要跳过量化的层名列表(如attn.wq_aattn.wkvindexer.compressor.wkv等,见generate_ignore_item);
  3. 生成标准quantization_configquant_method: "compressed-tensors"quantization_status: "compressed"),其中 KV Cache 与 LI Cache 均按 8bit float 格式配置;
  4. 将新生成的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-intw4a8-intbfloat16w4a8-mxw4a8-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_size=32 反量化(见weight_dequant);
  • W8A8-INT8(w8a8-int:对 MoE 路由/共享专家、Attention 的wq_b/wo_b等按 Per-Channel 静态量化,调用int_weight_quant得到 INT8 权重与 FP32 scale;
  • Hybrid INT8-INT4(w4a8-int:路由专家 Linear 使用 4bit 量化(per_channel_searching搜索最优 clip 比例),并生成 W4A8 MoEGMM 所需的 assistance bias 与打包后的 UINT64 scale(pack_4bitint4_assistance_biasscale_fp32_to_u64);
  • Hybrid MXFP8-MXFP4(w4a8-mx:Attention 相关 Linear 使用 MXFP8,MoE 路由专家使用 MXFP4(quantize_mx+pack_uint4);
  • Hybrid HiF8-MXFP8-MXFP4(w4a8-mx-hif:在 MX 模式基础上,对 Attention / MTP 的 8bit Linear 使用 HiF8 离线量化(hif8_weight_quant,基于torch_npu.npu_dynamic_quant),共享专家仍保持 MXFP8。

脚本同时会复制原权重目录中的.py/.json/.jinja文件到输出目录,并重写model.safetensors.index.jsonconfig.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 节点 IP;
  • cann_path:CANN 软件包安装路径,例如/usr/local/Ascend/cann

模型私有环境脚本(models/deepseek_v4/set_env.sh

executor/scripts/infer.sh 会先加载公共环境脚本executor/scripts/set_env.sh,然后再继续加载模型私有环境脚本 models/deepseek_v4/set_env.sh。后者负责 source 自定义算子包的环境变量(${ASCEND_HOME_PATH}/opp/vendors/customize/bin/set_env.bashcustom_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.yamlexe_mode: "npugraph_ex")。这一后端是 NPU 平台全新推出的高性能图计算组件,其基于 CANN 的 AclGraph(对标 CUDAGraph)底层能力,深度融合了一系列 NPU 架构亲和调度和图优化技术。从落地层面来看,npugraph_ex具备以下显著优势:可快速接入 PyTorch 生态、能无缝集成到 SGLang、vLLM 等主流推理框架中,同时保障极致的运行性能。

DeepSeek-V4 专属特性(custom_params

除框架统一配置之外,DeepSeek-V4 还额外支持以下特性,放置在 YAML 文件model_configcustom_params字段下:

参数名类型默认值含义
enable_multi_streamsboolfalse启用模型内多流并行,主要用于 decode 阶段 MLA、Indexer、Compressor、MoE shared expert 等模块的并行调度。
enable_limit_coreboolfalse在 Atlas A3 上配合多流使用,对部分算子限制 AI Core 数以提升多流重叠效果;开启时要求enable_multi_streams=True,且不支持enable_pypto=True
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: Trueenable_limit_core: Truemoe_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 场景支持 4~64 卡部署。可分别在 config 下的 yaml 文件中修改parallel_config.world_size(chips * 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,其余配置沿用前文说明。

参数名示例值含义
method"dspark"选择 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: 5confidence_threshold: 0.0,并行配置world_size: 4,数据配置input_truncated_len: 8192

DSpark 当前仅支持离线非 PD 分离部署,要求parallel_config.cp_size=1。置信度截断只调整有效候选前缀,主模型校验宽度仍为num_speculative_tokens + 1

原生 MTP 兼容model_config.next_n配置,DSpark 示例使用speculative_config。同时设置model_config.next_nspeculative_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等参数的默认值,例如:

MODEL=deepseek_v4 MODE=offline YAML_FILE=ci_a3/deepseek_v4_flash_rank_128_128ep_w8a8.yaml

保存后直接执行:

bash executor/scripts/infer.sh

如果是多机环境,需要在每个节点上同步执行拉起命令。

Note:不同平台最小部署单元要求如下

平台模型型号推荐量化策略最小部署单元(chips)
Ascend 950DeepSeek-V4 FlashHybrid MXFP8-MXFP44
Ascend 950DeepSeek-V4 FlashHybrid HiF8-MXFP8-MXFP44
Ascend 950DeepSeek-V4 ProHybrid MXFP8-MXFP416
Atlas A3DeepSeek-V4 FlashINT8 W8A84
Atlas 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 长序列 prefill
deepseek_v4_flash_rank_16_16ep_w8a8_platform.yamlAtlas A3CANNLab 平台(8 卡物理设备)
deepseek_v4_pro_rank_64_64ep_w4a8.yamlAtlas A3Pro 模型 Hybrid INT8-INT4
deepseek_v4_pd/prefill.yaml / decode.yamlAtlas A3在线 PD 分离部署(eager prefill + npugraph_ex decode)
deepseek_v4_flash_rank_16_16ep.yamlAscend 95016 卡 Flash(Hybrid MXFP8-MXFP4 权重)
deepseek_v4_flash_rank_4_4ep_dspark.yamlAscend 9504 卡 Flash DSpark 投机推理

与推理直接相关的核心源码包括:

  • 模型结构:modeling_deepseek.py(主模型)与 modeling_dspark.py(DSpark 草稿模型);
  • 模型模块:modules/(含 Indexer、Compressor、Attention 等子模块与 op_impls/ 下的 GatingTopK、mHC 算子实现);
  • 权重与量化工具:utils/convert_config.py、utils/convert_model.py、utils/mx_quantize.py;
  • 投机推理 Worker:DSpark 与 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 提供 SparseAttnSharedKV(SAS)统一接口;针对不同 Compress Ratio 提供 Compressor 与 CompressEpilog 融合算子;强化 LightningIndexer(LI)算子并新增 Compress Ratio 支持;针对 mHC 架构提供 HCPre / HCPost 融合算子。上述算子的 AscendC 实现与 PyPTO、TileLang 实现均已在仓内开源;
  • 并行策略:Prefill 长序列场景使用 Context Parallel(CP)并沿用zig_zag切分与 128 Token 的 all_gather 通信设计;Decode 场景沿用 Attention DP + MoE EP 并行,LM Head 采用 TP,并可选择性对o_a_proj做 TP 切分以分摊访存;
  • 量化策略:Atlas A3 Pod 支持 Int8 W8A8(Flash 推荐)与 Hybrid INT8-INT4(Pro 推荐);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.pyconvert_model.py的权重量化转换,再到 YAML 配置与infer.sh的统一拉起,整个流程均有对应脚本与配置文件支撑。实际部署时只需把握三个关键点:按平台选择正确的量化策略与最小部署单元model_pathcann_path等路径配置为真实环境路径多机场景保持各节点配置一致并同步执行拉起命令。在此基础上,可通过custom_params中的多流并行、PyPTO 算子路径与moe_chunk_max_len等开关,以及 DSpark / MTP 投机推理,进一步压榨昇腾硬件的推理性能。

【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 18:46:27

SSID是什么?一文搞懂Wi-Fi网络名称的查看与设置

遇到路由器时&#xff0c;经常会看到“SSID”这个词。对很多非网络专业的朋友来说&#xff0c;这三个字母组合看着很陌生&#xff0c;但其实就是你平时在手机上看到的一堆Wi-Fi名字之一。说直白点&#xff0c;SSID就是无线网络的名称&#xff0c;就是你打开手机Wi-Fi列表后看到…

作者头像 李华
网站建设 2026/9/19 18:45:12

高中化学原子结构课件的PDF结构化与教学增强实践

简介&#xff1a;本资源是一套面向高中化学选修三课程的系统性教学课件&#xff0c;专为高二学生、一线化学教师及高考复习备考者设计&#xff0c;聚焦原子结构、分子结构与晶体结构三大核心模块&#xff0c;助力深入理解物质性质与化学反应本质。课件以PDF格式整合为1个文件&a…

作者头像 李华
网站建设 2026/9/19 18:45:01

C盘又满了?从D盘无损扩容的完整指南(含工具与避坑)

C盘又红了&#xff0c;是不是&#xff1f;这个问题我太熟了。帮朋友修电脑&#xff0c;十台里有七八台都是C盘飘红、系统卡顿、Windows更新装不上。很多人第一反应是下个清理软件扫一遍&#xff0c;能腾出几个G&#xff0c;可过段时间又满了——治标不治本。真正立得住的办法&a…

作者头像 李华
网站建设 2026/9/19 18:44:12

单卡3090微调Qwen2.5-VL实现Grounding任务实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 18:38:13

结题验收书docx自动化处理:解析、生成与提交前自检指南

简介&#xff1a;面向高校大学生创新创业训练计划项目团队&#xff0c;这份结题验收书docx模板可直接用于项目结题材料的整理与提交。内容整体覆盖项目基本信息、结题总结、成果及支撑材料目录、成果发展计划、自身体验与收获、经费使用明细、项目实施过程中存在的问题与建议、…

作者头像 李华