【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-inferdeepseek_v3_ascend310p1. 概述1.1. 介绍deepseek_v3_ascend310p专注于在Ascend 310P平台上实现DeepSeekV3模型r1 671B版本的高效推理。本项目提供了完整的推理代码及详细的部署指南旨在帮助开发者快速部署和优化模型充分发挥Ascend 310P的计算能力提升推理性能。1.2. 项目结构mlguider_llm_ascend/ ├── cpp/ # C核心推理引擎源码 | ├── 3rdparty/ # 第三方库 │ └── mlguider_llm_ascend/ # 第三方库 │ ├── common/ # 公共工具模块 │ ├── config/ # 配置管理 │ ├── core/ # 核心计算图与算子实现 │ ├── data_processor/ # 数据预处理/后处理 │ ├── runtime/ # 运行时管理 │ ├── CMakeLists.txt # C模块构建配置 │ └── main_inference.cpp # 推理主程序入口 | | ├── example/deepseek-v3-quant/ # DeepSeek-V3量化模型示例 │ ├── convert_checkpoint_rtn.py # RTN量化权重转换 │ ├── fp8_cast_int8_quantize_RTN.py # FP8转INT8量化工具 │ ├── inference_run_config_tp8_ep32_dp1.yaml # 标准推理配置 │ ├── inference_run_config_tp8_ep32_dp1_msprof.yaml # 性能分析配置 │ ├── inference_run_config_tp8_ep32_dp1_prefill.yaml # 预填充阶段配置 │ ├── inferencetp8ep32dp1.sh # 基础推理启动脚本 │ ├── inferencetp8ep32dp1_msprof.sh # 带性能分析的推理脚本 │ ├── inferencetp8ep32dp1_example.sh # 完整示例脚本 │ └── inferencetp8ep32dp1_example_prefill.sh # 预填充示例脚本2. 环境配置2.1. 硬件环境NPU: Ascend 310IDUO*20CPU: X86架构2.2. 软件环境2.2.1. CANN安装安装toolkit[必须下载指定CANN包]下载toolkit包https://ascend-cann.obs.cn-north-4.myhuaweicloud.com/CANN/20250325_newest/Ascend-cann-toolkit_8.1.RC1_linux-x86_64.runchmod x Ascend-cann-toolkit_8.1.RC1_linux-x86_64.run bash Ascend-cann-toolkit_8.1.RC1_linux-x86_64.run --full安装对应的aclnn-kernel包下载kernel包https://ascend-cann.obs.cn-north-4.myhuaweicloud.com/CANN/20250418_newest/Ascend-cann-kernels-310p_8.1.RC1_linux-x86_64.runchmod x Ascend-cann-kernels-310p_8.1.RC1_linux-x86_64.run bash Ascend-cann-kernels-310p_8.1.RC1_linux-x86_64.run --install --install-for-all --quiet激活CANN脚本source /path/to/Ascend/ascend-toolkit/set_env.sh安装自定义算子库下载自定义算子vendor包解压后将其放置在/path_to_ascend_toolkit/latest/opp/目录下。2.2.2. 安装定制HCCL请注意必须严格安装上述指定的CANN-toolkit否则将因版本不匹配导致异常。下载hccl补丁及定制HCCL通信库并解压。安装补丁。由于hccl中控制拓扑与建链等相关模块尚未完全开源需安装相应补丁方可启用20卡通信功能。cd path_to_hccl/hccl/hccl-patch cp hccl_common.h /path/to/Ascend/ascend-toolkit/8.1.RC1/x86_64-linux/include/experiment/hccl/ cp x86/libhccl* /path/to/Ascend/ascend-toolkit/8.1.RC1/x86_64-linux/lib64/安装HCCL库bash path_to_hccl/hccl/CANN-hccl_alg-7.7.t13.0.b055-linux.x86_64.run2.2.3. 安装模型运行所需环境安装配置openmpi下载并解压Open MPI软件包。参见Open MPI-4.1.7下载软件包并解压。wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.7.tar.gz tar -zxvf openmpi-4.1.7.tar.gz编译并安装Open MPI软件包。cd openmpi-4.1.7 ./configure --disable-fortran --enable-ipv6 --prefix${HOME}/.local/openmpi make make install详情参见MPI安装与配置。配置openmpi环境变量。安装完成后需要配置环境变量将openmpi的bin目录添加到PATH中例如export PATH/path/to/openmpi/bin:$PATH安装ABSL克隆absl代码git clone https://github.com/abseil/abseil-cpp.git进入 abseil-cpp 目录并创建 build 目录cd abseil-cpp mkdir build cd build使用 CMake 构建并安装 absl# 需要根据情况修改安装目录 cmake .. -DCMAKE_INSTALL_PREFIX${HOME}/.local/ make -j make install下载第三方库json库cpp-httplibwget https://download-public.tos-cn-beijing.volces.com/3rdparty.zip unzip 3rdparty.zip cp -r 3rdparty contrib/ascend310PDSV3/src/cpp/安装python依赖库pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package3. 安装/部署运行该编译安装脚本cd cpp ./buils.sh4. 快速开始4.1. 模型权重转换下载权重从HF上下载权重huggingface.co模型量化FP8-Int8cd example/deepseek-v3-quant python fp8_cast_int8_quantize_RTN.py \ --input-fp8-hf-path $INPUT_FP8_MODEL_PATH \ --output-int8-hf-path $OUTPUT_INT8_MODEL_PATH将下列四个文件从$INPUT_FP8_MODEL_PATH拷贝至$OUTPUT_INT8_MODEL_PATH目录中。config.jsonconfiguration_deepseek.pytokenizer_config.jsontokenizer.json模型转化python convert_checkpoint_rtn.py \ --model_name_or_path $OUTPUT_INT8_MODEL_PATH \ --save_path $OUTPUT_MODEL_PATH \ --world_size 32 \ --tp_size 8 \ --ep_size 32 # NOTE: # tp_size for MLA # ep_size for MOE # world_size ep_size 32 # tp_size [1,2,4,8]4.2. 模型推理运行推理脚本bash example/deepseek-v3-quant/inferencetp8ep32dp1_example.sh推理脚本解释#!/bin/bash export TM_LOG_LEVELDEBUG # 获取当前脚本的绝对路径 SCRIPT_DIR$(dirname $(realpath $0)) # 删除历史outputIds.txt每次推理会生成新的outputIds.txt rm -rf $SCRIPT_DIR/../../outputIds.txt # 构建 launch.py 的完整路径 LAUNCH_PY$SCRIPT_DIR/../../launch_inference.py # 启动推理单次推理2-Batch python $LAUNCH_PY --config $SCRIPT_DIR/inference_run_config_tp8_ep32_dp1.yaml --input-text \ Hello \ 我希望昨天是明天那么今天就是星期五。今天是星期几5. 结果5.1. 性能Decode阶段数据集采用HumanEval数据集从中选取多样化的Prompt组成测试Batch。Batch Size梯度测试[1, 2, 4] 共5个梯度。上下文长度动态范围基础长度2048 tokens。最大长度min(Single_Batch Prompts长度) 2048 512保留512 tokens作为生成缓冲。指标TPOT——平均值Mean、中位数P50典型情况、P90长尾性能。BatchSizeTPOT AVG(ms)TPOT 50%(ms)TPOT 90%(ms)AVG Decode TPS1124.129123.478124.7248.062137.175136.600138.3907.294161.050160.524162.6186.215.2. 精度采用常见数据集MMLU和HumanEvalMGSMDROP数据集进行精度测试。数据集OursBaseLineMMLU84.82 %85.09 %MMLU-stem85.63 %86.30 %MMLU-Humanities77.85 %78.30 %MMLU-other88.61 %88.67 %MMLU-social90.84 %90.64 %HumanEval70.73 %93.29 %MGSM92.11 %92.07 %DROP(3-shot)80.39 %81.05 %NOTEHumanEval基准测试的精度出现22.56%的显著下降其主要原因在于模型推理过程中因权重精度转换引入了生成偏差。具体分析如下问题根源原始模型基于BF16精度存储在PyTorch CPU环境下进行精度对比实验时发现当BF16权重转换为FP16后模型在推理特定token时会产生异常输出表现为生成内容中随机出现如“吃点”等不符合语义的中文字符。对评估基准的差异化影响HumanEval该基准依赖实际执行模型生成的代码以验证功能正确性。异常字符会直接破坏代码语法结构或逻辑导致执行失败因此对精度影响显著。MMLU该任务仅需模型输出选择题的正确答案标签如选项“A”或“B”。即使生成内容中掺杂无关字符只要正确选项能被准确识别对最终判断的影响相对有限。结论​ 权重从BF16至FP16的精度转换引发了模型输出层的分布漂移从而在生成过程中引入结构性噪声。这种噪声对强依赖生成完整性和一致性的任务如代码生成产生严重负面影响而对仅需关键信息提取的任务如选项判断影响较小。6. LICENSELICENSE【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考