cann-recipes-infer:大模型推理配方应用场景实战
前言
上个月帮一个朋友部署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:准备模型文件
你需要:
- PyTorch格式的Llama-2-7B模型(从HuggingFace或者ModelScope下)
- 对应的tokenizer文件
# 假设模型在 /home/user/llama-2-7b-hf
ln -s /home/user/llama-2-7b-hf ./model
步骤5:运行配方脚本
配方仓库里有个run.sh,它干的事:
- 用GE图引擎优化模型
- 转成OM离线模型
- 跑推理,输出性能指标
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
更多推荐




所有评论(0)