前言

上个月帮一个朋友部署Llama-2-7B到昇腾NPU上,遇到了一堆坑。模型转成OM离线模型后,推理速度只有官方宣称的一半。后来发现是没用对推理配方——cann-recipes-infer这个仓库里,其实已经有人踩过这些坑了,照着它的配方来,速度直接翻倍。

环境准备:先把NPU驱动和CANN装对

别笑,真有人驱动装错了,跑出来的性能只有标准的30%。

步骤1:确认NPU型号

# 查看NPU型号
npu-smi info

# 输出示例:
# NPU: Ascend 910
# Chip Count: 4

如果是Atlas 800T A2,芯片是Ascend 910;如果是Atlas 900 PoD,是Ascend 950DT。不同芯片要用不同的CANN版本,别下错了。

步骤2:安装CANN

去昇腾社区版下载页,按你的NPU型号选CANN版本:

  • Ascend 910 → CANN 8.0.RC1
  • Ascend 950DT → CANN 8.5

安装时选"全量安装",别只装runtime——你要跑推理,需要图编译和算子库。

# 安装CANN
chmod +x CANN-8.0.RC1-linux.x86_64.run
./CANN-8.0.RC1-linux.x86_64.run --full

# 装完后source环境
source /usr/local/Ascend/ascend-toolkit/setenv.sh

⚠️ 踩坑预警:如果你用的是Atlas A3服务器,上面的镜像名不一样,去CANN社区版下载页按A3选对应包。

逐步推进:用cann-recipes-infer的配方跑Llama-2-7B

cann-recipes-infer这个仓库,就是把"模型转OM → 推理优化 → 性能调优"这套流程做成可复现的配方

步骤3:拉取配方仓库

git clone https://atomgit.com/cann/cann-recipes-infer.git
cd cann-recipes-infer/llama2-7b

步骤4:准备模型文件

你需要:

  1. PyTorch格式的Llama-2-7B模型(从HuggingFace或者ModelScope下)
  2. 对应的tokenizer文件
# 假设模型在 /home/user/llama-2-7b-hf
ln -s /home/user/llama-2-7b-hf ./model

步骤5:运行配方脚本

配方仓库里有个run.sh,它干的事:

  1. 用GE图引擎优化模型
  2. 转成OM离线模型
  3. 跑推理,输出性能指标
bash run.sh

# 输出示例:
# [INFO] GE优化完成,耗时12.3s
# [INFO] 转OM完成,模型大小:13.2GB
# [INFO] 推理测试:18.5 tokens/s (标准:29 tokens/s)

⚠️ 踩坑预警:如果推理速度只有18.5 tokens/s,别慌,这是没开"通算融合"的默认性能。接下来我们调优。

调优环节:让性能跑到官方宣称的29 tokens/s

cann-recipes-infer的配方里,已经包含了调优脚本,但默认没开。你要手动改config.json

步骤6:开启通算融合

// config.json
{
  "enable_pass_calc": true,  // 开启通算融合
  "tile_size": 128,           // Tiling大小,按你的seq_len调
  "pipeline_depth": 2         // 流水线深度,Atlas 800T A2设为2
}

重新跑run.sh,性能应该能到25-27 tokens/s。

步骤7:调整batch size和seq_len

Llama-2-7B的推理性能,跟batch size和seq_len强相关:

batch_size seq_len 性能 (tokens/s) 说明
1 512 31 超过官方宣称
1 2048 24 长文本性能下降
4 512 28 多batch要调pipeline_depth
4 2048 19 多batch+长文本,性能下降明显

⚠️ 踩坑预警:batch_size>1时,要把pipeline_depth调到4,否则NPU的AI Core利用率上不去。

验证环节:确认性能达标

步骤8:跑标准benchmark

cann-recipes-infer里有标准的benchmark脚本,照着跑就行:

python benchmark.py \
  --model ./model.om \
  --batch_size 1 \
  --seq_len 512 \
  --num_iterations 100

# 输出:
# Average latency: 32ms
# Throughput: 31.2 tokens/s
# NPU utilization: 93%

如果NPU利用率不到90%,说明还有优化空间。去cann-recipes-infer的Issues里搜你的NPU型号,一般都有人发过优化方案。

结尾

cann-recipes-infer这个仓库,核心价值是把"模型部署→性能调优"的坑都踩过了,你照着配方来,能省至少一周的调试时间

如果你在搞大模型推理部署,建议直接去 https://atomgit.com/cann/cann-recipes-infer 把这个仓库拉下来,先跑通Llama-2-7B的配方,再搞你自己的模型。自己从零开始调,容易陷入"性能上不去,又不知道哪里出问题"的死循环。


仓库:https://atomgit.com/cann/cann-recipes-infer

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐