news 2026/5/9 13:21:29

CANN LongCat-Flash推理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN LongCat-Flash推理

LongCat-Flash模型在NPU上推理

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

概述

本样例基于LongCat-Flash开源代码进行迁移,并完成对应的优化适配。

支持的产品型号

Atlas A3 系列产品

环境准备

  1. 安装CANN软件包。

    本样例的编译执行依赖CANN开发套件包(cann-toolkit)与CANN二进制算子包(A3-ops)。

    请从软件包下载地址下载Ascend-cann-toolkit_${version}_linux-${arch}.runAscend-cann-A3-ops_${version}_linux-${arch}.run软件包,并参考CANN安装文档进行安装。

    • ${version}表示CANN包版本号,如8.5.0等。
    • ${arch}表示CPU架构,如aarch64、x86_64。
  2. 安装Ascend Extension for PyTorch(torch_npu)。

    Ascend Extension for PyTorch(torch_npu)为支撑PyTorch框架运行在NPU上的适配插件。 请从软件包下载地址下载v2.6.0源码(CommitID71047a90f6e32af5de6268795b73c4cdeb07c4ea),参考源码编译安装。

  3. 下载项目源码并安装依赖的python库。

    # 下载项目源码,以master分支为例 git clone https://gitcode.com/cann/cann-recipes-infer.git # 安装依赖的python库 cd cann-recipes-infer pip3 install -r ./models/longcat-flash/requirements.txt
  4. 配置样例运行所需环境信息。

    修改executor/scripts/set_env.sh中的如下字段:

    • IPs:配置所有节点的IP,按照rank id排序,多个节点的ip通过空格分开,例如:('xxx.xxx.xxx.xxx' 'xxx.xxx.xxx.xxx')
    • cann_path: CANN软件包安装路径,例如/usr/local/Ascend/ascend-toolkit/latest

权重准备

请根据所使用的模型类型自行下载原始权重到本地路径,例如/data/models/origin/

LongCat-Flash-Chat模型的原始权重下载地址为:LongCat-Flash-Chat权重

权重转换

本样例支持LongCat-Flash模型量化,基于models/longcat-flash/utils/convert_model.py可以完成从Bfloat16到Int8的权重转换。

入参介绍:input_bf16_hf_path:原始Bfloat16权重路径;output_hf_path:转换后输出的权重路径。

如果权重转换的运行环境为NPU,需要先执行:

cann_path=/usr/local/Ascend/ascend-toolkit/latest # cann包安装路径 source ${cann_path}/bin/setenv.bash

权重转换执行示例:

# 转换为W8A8权重 python models/longcat-flash/utils/convert_model.py --input_bf16_hf_path /data/models/LongCat-Flash-Chat --output_hf_path /data/models/LongCat-Flash-Chat-W8A8

推理执行

  1. 配置推理执行需要加载的权重文件以及YAML文件。

    • 修改YAML文件中model_path参数。

      models/longcat-flash/config目录下已提供了较优性能的YAML样例供您参考,您可以根据模型类型、集群规模以及量化类型选择对应的YAML文件,本文以models\longcat-flash\config\longcat_flash_densetp8_ep32_gegraph_mtp.yaml文件为例,修改其中的model_path参数,将其设置为权重准备阶段准备好的权重文件存储路径,例如/data/models/origin/LongCat-Flash-Chat/

    • 修改models/longcat-flash/infer.sh脚本中YAML_FILE_NAME参数。

      YAML_FILE_NAME设置为config文件夹下YAML文件名称,例如longcat_flash_densetp8_ep32_gegraph_mtp.yaml

  2. 准备输入prompt。

    • 使用内置prompt。

      本样例已在dataset/default_prompt.json中内置了输入prompt,若您直接使用内置prompt,本步骤可直接跳过。

      当然,您也可以在dataset/default_prompt.json文件中自定义prompt输入。

    • 使用长序列prompt。

      本样例默认使用内置prompt,若您需要使用长序列prompt,需要执行以下操作:

      1. 修改YAML文件中的dataset参数,将其修改为dataset: "LongBench",使用LongBench数据集作为长序列prompt。

      2. 若您的机器无法联网,需要您从huggingface手动下载数据集至dataset/LongBench目录下,LongBench文件夹需手工创建,目录中包含LongBench.pydata目录,并需要在LongBench.py中修改数据集加载路径;若您的机器可正常联网,样例执行过程中会自动在线读取LongBench数据集,您无需手工下载。

      说明:

      • 使用LongBench数据集时,默认执行文本摘要任务,可在cann-recipes-infer/executor/utils/data_utils.pybuild_dataset_input函数里修改默认的system prompt。
      • 长序列请求执行中若出现out of memory问题,可参见附录中的长序列请求out of memory问题处理。
  3. 执行推理脚本。

    cd models/longcat-flash bash infer.sh

    说明:如果是多机环境,需要在每个节点上执行。

优化点参考

本样例采用的详细优化点介绍及性能Benchmark可参见基于Atlas A3训练/推理集群的LongCat-Flash模型推理性能优化实践。

Benchmark

基于 Atlas A3 环境,本实践对 Longcat-Flash W8A8量化版本进行了性能 Benchmark 测试。 在使能 AFD 特性后,模型的 TPOT 迈入了 10 ms 之内, 并且相比于同样卡数和 global batch size 的不分离场景,拥有更优的 TPOT 和吞吐。

Enable AFDQuant ModeGlobal Batch SizeSeq LengthChipsTPOT (ms)Throughput (tokens/p/s)
NW8A851246086410.37771.46
NW8A825646083210.64751.88
NW8A82564608649.95402.01
YW8A82564608649.5421.05
  1. 性能数据基于 MTP2 与 perfect eplb 配置采集。
  2. 当前 CANN 软件版本下,SuperKernel 标记范围内的部分算子尚不支持完全融合。该限制将在后续社区版本中得到解决,以进一步提升模型性能。
  3. 由于当前 Send/Recv 算子单次通信只支持1:1的发送/接收模式,不支持 M:N 模式,所以 AFD 场景部署时 Attention Instance 的 Node 个数 和 FFN Instance 的 Node 个数是一样,也即 M == N;后续会计划支持 M:N 的部署模式。

附录

常见问题处理

长序列请求out of memory问题处理

  1. 长序列请求可能导致device内存out of memory,尤其是在perfill阶段,MoE的Routing分发可能存在极端负载不均,导致个别卡上的grouped_matmul算子占用较大内存。为缓解由此引入的OOM问题,可采用以下方法:
  • 为了缓解MoE负载不均带来的峰值内存,我们可进行Chunk MoE推理,即在MoE切Chunk串行推理,降低极端场景下的峰值内存,可通过YAML中的moe_chunk_max_len开关设置chunk的大小。当前该开关只针对prefill生效,开启后,由于MoE部分将串行计算各chunk,会对prefill的性能产生相应的影响。
  1. 长序列请求的KV Cache内存占用过大,单个rank上存储完整的KV Cache导致device内存out of memory,而针对长序列低时延场景支持的KVP特性能够缓解OOM问题:
  • 通过使能KVP特性,可实现将长序列的KV Cache沿S维度交错式存储至多个rank,并在Attention计算过程中利用各个rank上分片后的KV Cache完成全局注意力计算,最终达到缓解OOM的效果。KVP切分的大小可通过YAML中的kvp_size开关设置。

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

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

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

CANN/pyasc向上取整函数

asc.language.adv.ceil 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.language.adv.ceil(dst: LocalT…

作者头像 李华
网站建设 2026/5/9 13:17:29

CANN/hcomm获取通道通知数API

HcommChannelGetNotifyNum 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 产品支持情况 Ascend 950PR/Ascend 950DT&#xf…

作者头像 李华
网站建设 2026/5/9 13:14:31

CANN/pypto reshape操作

pypto.reshape 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/…

作者头像 李华
网站建设 2026/5/9 13:13:33

CANN/ops-solver批量复数矩阵求逆

CmatinvBatched 【免费下载链接】ops-solver 本项目是CANN提供的高级数值求解算子库,实现矩阵分解、求逆、特征值求解等功能在NPU上的加速计算。 项目地址: https://gitcode.com/cann/ops-solver 产品支持情况 产品是否支持Atlas 200I/500 A2 推理产品Atlas…

作者头像 李华
网站建设 2026/5/9 13:13:32

CANN/manifest配置仓库

CANN manifest 仓库 【免费下载链接】manifest 本项目是 CANN 的 manifest 配置仓库,用于通过 repo 工具管理和同步 CANN 相关的多个代码仓,定义 CANN 组件的仓库地址、分支版本和目录结构 项目地址: https://gitcode.com/cann/manifest 项目简介…

作者头像 李华