模型结构
LLaMA2-7B采用与LLaMA-7B相同的结构,如下图所示,相较于传统的Transformer,主要区别在于:
1)采用RMS Norm代替Layernorm,并在顺序上做了前移;
2)采用SwiGLU作为激活函数;
3)采用RoPE通过动态位置编码,来解决传统位置编码处理长序列时困难的问题。
量化方案
清微骑士Knight工具链,支持INT8量化(整网算子输入输出均采用W8A8量化方式,linear权重采用per-channel方式),可以很方便的把浮点模型(比如pytorch/tensorflow/onnx/paddlepaddle等)转换、部署到指定芯片上;Knight工具链还针对硬件架构做了深度优化,在精度和性能两个维度达到较好的平衡。因为LLaMA2-7B模型较大,这里采用分块的方式转换成若干ONNX模型,对这些模型分别进行PTQ量化、编译,并在板端串联起来进行部署、测试。
推理流程
LLaMA2-7B按照模型结构分拆了几个模块Tokenizer/Embedding/LlamaLayer/LmHead,、通过Knight工具链进行转换,调度到TX536芯片上运行。
模型及权重可以通过Hugging Face提供的资源下载到本地,然后按照下面方法导出ONNX模型。
Embedding,词嵌入模块:
LmHead模块
LlamaLayer:
整体推理流程:
板端部署、性能测试
对Embedding/LlamaLayer/LmHead分别进行量化、编译后,生成可执行二进制文件,Sequence-length设置为1的条件下,完整执行过程如下:
Embedding板端运行:
LlamaLayer板端运行:
LmHead板端运行:
清微工具链目前已经完成了与百度paddlepaddle III级兼容性认证,支持30个多模型,涉及视觉,自然语言处理和推荐,无论是面向大模型还是在通用性方面,可重构软件工具都具有相当的优势。