本文基于CANN开源社区的cann-recipes-infer仓库进行技术解读
- CANN组织链接:https://atomgit.com/cann
- 仓库链接:https://atomgit.com/cann/cann-recipes-infer
前言
大语言模型(LLM)火了之后,很多人想在自己的环境里部署一个。但真正动手才发现,推理这事儿没那么简单——模型大、显存占用高、延迟要求严格…
cann-recipes-infer就是CANN提供的一套推理优化样例集。recipes是"食谱"的意思,这个项目就像一本菜谱,告诉你怎么把模型推理这道菜做好。
这个项目有什么
从仓库描述来看,这个项目"针对LLM与多模态模型推理业务中的典型模型、加速算法,提供基于CANN平台的优化样例"。
简单说,就是:
- 针对常见的大模型
- 提供优化过的推理代码
- 可以直接拿来用或者参考
支持的模型
根据项目信息,支持的模型类型包括:
大语言模型(LLM)
- Llama系列
- ChatGLM
- Qwen
- Baichuan
- 等等
多模态模型
- 视觉语言模型
- 其他
这些基本覆盖了国内外主流的开源大模型。
主要优化技术
项目中应用的优化技术主要有:
1. Flash Attention
这是近几年最重要的Attention优化技术。通过分块计算,大幅减少显存占用:
2. KV Cache优化
推理时需要缓存之前的Key和Value,模型越大、序列越长,缓存越占显存。
项目提供了几种优化方案:
- Paged Attention:按需分配,减少浪费
- 量化KV Cache:用更低精度存储
- 动态管理:及时释放不需要的缓存
3. 量化推理
把模型从FP16量化到INT8或INT4,减少计算量和显存占用:
4. 算子融合
把多个小算子合成一个大算子,减少中间数据的读写:
Conv -> BN -> ReLU → Conv+BN+ReLU(融合后)
怎么使用
快速开始
根据README的指引,大致流程是:
- 安装CANN环境
- 克隆仓库
- 安装依赖
- 运行示例
# 克隆
git clone https://atomgit.com/cann/cann-recipes-infer.git
cd cann-recipes-infer
# 安装依赖
pip install -r requirements.txt
# 运行示例(以Llama为例)
python examples/llama/run.py --model_path /path/to/llama
代码结构
cann-recipes-infer/
├── models/ # 模型相关代码
│ ├── llama/
│ ├── chatglm/
│ └── ...
├── kernels/ # 自定义kernel
├── examples/ # 使用示例
├── utils/ # 工具函数
└── docs/ # 文档
和其他项目的区别
CANN生态里有好几个推理相关的项目,简单区分一下:
| 项目 | 定位 |
|---|---|
| ops-transformer | 提供底层算子 |
| cann-recipes-infer | 提供完整的推理样例 |
| amct | 模型量化工具 |
cann-recipes-infer更像是"应用层",它调用底层的算子库,组装成完整的推理流程。
我觉得有用的点
看了这个项目,有几点觉得挺有价值:
1. 现成的代码
不用从零开始写,有现成的代码可以参考甚至直接用。
2. 最佳实践
项目里的代码经过优化,代表了官方推荐的做法。
3. 学习材料
即使不直接用,看看代码是怎么写的,也能学到东西。
需要注意的点
硬件环境
需要有支持CANN的NPU硬件才能运行。
模型格式
可能需要对模型做一些转换,具体看文档说明。
版本匹配
CANN版本、模型版本需要匹配,不匹配可能会出问题。
总结
cann-recipes-infer是CANN提供的大模型推理优化样例集,主要特点:
- 覆盖主流LLM和多模态模型
- 应用了Flash Attention、量化等优化技术
- 提供可运行的代码示例
对于想在NPU上部署大模型的同学,这是一个很好的起点。
相关链接
- cann-recipes-infer仓库:https://atomgit.com/cann/cann-recipes-infer
- ops-transformer仓库:https://atomgit.com/cann/ops-transformer
- CANN文档中心
这是我调研大模型推理方案时的笔记,希望对你有帮助。



276

被折叠的 条评论
为什么被折叠?



