https://gitee.com/yinghuo302/ascend-llm
简介
本项目基于昇腾310芯片部署大语言模型,目前已经成功运行meta-llama/Llama-2-7b-hf和TinyLlama/TinyLlama-1.1B-Chat-v1.0。
本实践项目由南京大学计算机科学与技术系杜骋同学主导,由朱光辉老师进行指导,由昇腾CANN生态使能团队提供技术支持,并在昇腾开发者大会2024进行了展示。
效果预览
关键技术
静态图方案
在Transformer模型中,基于模型的自回归推理特性,业界普遍采用kvcache缓存的方式增加模型的推理性能。kvcache会缓存上一次推理得到的kv矩阵用于本次推理,大大减少了推理计算量。
由于缓存的kv矩阵要和当前输入字符计算出的kv矩阵进行拼接,因此每次推理完整的kv矩阵长度一直在增加,致使模型shape不固定,会走动态推理流程,存在大量算子编译时间,推理性能大大下降。
本方案基于原先动态图方案,将kv矩阵固定到一个最大长度,结合attention_mask屏蔽输入序列部分位置的特性实现了静态图的方案。在kvcache达到上限时通过KV缓存驱逐(StreamingLLM和Heavy-Hitter Oracle)让模型可以反复推理。
量化方案
大模型权重过大,在端侧设备由于内存限制通常难以运行,因此通常将大模型权重从fp16量化到int8甚至int4降低内存消耗.
本项目采用平滑激活(SmoothQuant),动态混合精度分解(类似LLM.int8),静态混合精度分解量化方案,通过对权重和激活值均采用int8量化,显著节省了内存并提升了推理速度。
运行方式
环境准备
- 昇腾软硬件解决方案(驱动+固件+CANN)前往昇腾社区,按照说明下载安装。
或者下载香橙派0318镜像,烧录到sd卡,启动环境,参考香橙派AIpro快速上手指南。 - 第三方依赖模型导出和推理相关文件夹下requirements.txt,使用pip 进行安装。
本项目测试环境:香橙派AI pro,CANN 7.0/7.2,python 3.9。
算子适配
protoc安装
安装protoc==1.13.0, 找一空闲目录下载
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/tiny-llama/protobuf-all-3.13.0.tar.gz --no-check-certificate
tar -zxvf protobuf-all-3.13.0.tar.gz
cd protobuf-3.13.0
apt-get update
apt-get install autoconf automake libtool
./autogen.sh
./configure
make -j4
make install
sudo ldconfig
protoc --version # 查看版本号
```算子编译部署
打开build.sh,找到下面四个环境变量,解开注释并修改如下:
编译运行
模型量化与导出
导出的模型可以从阿里云盘中下载
导出onnx:将transformer库中的modeling_llama替换为export_llama文件下的modeling_llama。通过一下命令将模型导出为onnx(相对路径均为相对export_llama.py文件)
ATC模型转换
模型推理运行
目前提供两种运行模式: