0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

探索ChatGLM2在算能BM1684X上INT8量化部署,加速大模型商业落地

算能开发者社区 2023-10-10 10:18 次阅读


1. 背景介绍

在2023年7月时我们已通过静态设计方案完成了ChatGLM2-6B在单颗BM1684X上的部署工作,量化模式F16,模型大小12GB,平均速度约为3 token/s,详见《算丰技术揭秘|探索ChatGLM2-6B模型与TPU部署》。为了进一步提升模型的推理效率与降低存储空间,我们对模型进行了INT8量化部署,整体性能提升70%以上,模型大小降低到6.4GB,推理速度达到6.67 token/s。

2. 量化方案

首先TPU-MLIR原有的INT8量化方案并不适合直接应用于LLM。主要是因为无论PTQ的校准或者QAT的训练对于LLM来说成本过高,对LLM的一轮PTQ的校准可能就需要1-2天时间;另外就是量化带来的误差在LLM上无法收敛,最终会导致模型精度大量损失。

在量化方案上我们沿用了ChatGLM2使用的W8A16策略,即只对GLMBlock中Linear Layer的权重进行per-channel量化存储,在实际运算时仍将其反量化回F16进行运算。因为LLM中Linear Layer权重数值间差异非常小,对INT8量化较为友好,所以量化过后的结果与F16计算结果在余弦相似度上仍然能保持99%以上,精度上几乎可以做到0损失。

3d05fb98-6713-11ee-9788-92fbcf53809c.pngW8A16 MatMul

3. TPU-MLIR实现

在Top到Tpu层的lowering阶段,编译器会自动搜寻模型中右矩阵输入为权重,且该矩阵维数为2的MatMul,将其替换为W8A16MatMul算子。此处主要是为了与左右矩阵都为Acitvation的MatMul算子区分开(mm, bmm与linear layer在编译器中会被统一转换为MatMul算子)。以ChatGLM2中其中一个MatMul算子为例:L = (max_lengthx4096xf16), R = (4096x27392xf16),量化后的权重由原来的214MB降为107MB,额外产生的Scale (4096xf16)只占了0.008MB的存储空间,基本上可以达到减半的效果。算子替换源码与权重量化源码可在TPU-MLIR仓库中查看。

3d1228dc-6713-11ee-9788-92fbcf53809c.pngOp Replacement in TPU-MLIR

4. 后端性能提升原理

前一节介绍的量化只实现了存储空间减半的效果,而性能提升主要在于W8A16MatMul后端算子的实现。如果对TPU架构不熟悉可通过TPU原理介绍(1)TPU原理介绍(2)两期视频了解(可关注b站“算能开发者”进行观看)按照算能当前的TPU架构,W8A16的计算过程主要分为5个步骤:

1. 从Global Memory中加载数据到Local Memory
2. 将INT8权重Cast为F16
3. 与Scale数据相乘完成反量化操作
4. 与Input Activation进行矩阵乘运算
5. 将计算结果存储回Global Memory

3d277ab6-6713-11ee-9788-92fbcf53809c.pngW8A16Matmul Computation on TPU

因为Local Memory空间有限,对于大型数据通常需要进行切分,分批对数据进行加载、运算与存储。为了提升效率,通常我们会利用GDMA与BDC指令并行,同时进行数据搬运与运算操作,所以Local Mmeory大致需要被需要被划分为两部分区域,同一个循环内一个区域用于数据运算,另一个区域存储上一循环计算好的结果以及加载下一循环需要用到的数据,如下图所示。

3d378e06-6713-11ee-9788-92fbcf53809c.pngLocal Memory Partition

矩阵乘等式如下:

当矩阵乘运算中左矩阵数据量较小时,性能瓶颈主要在于右矩阵的数据加载上,即数据加载时间远比数据运算时间要长很多。W8A16通过量化能够将右矩阵的数据搬运总量缩小为原来的一半,而且额外多出的Cast与Scale运算时间可以被数据搬运时间覆盖住,因此并不会影响到整体runtime,如下图所示。

3d494614-6713-11ee-9788-92fbcf53809c.pngGDMA and BDC parallel
总而言之,从后端角度来说,当越小,越大时,W8A16带来的性能提升收益越大。

从LLM的角度来看,我们以ChatGLM2为例,一次推理的完整流程分为一轮prefill与多轮decode。在prefill阶段,基于我们当前的静态设计方案,输入词向量会被补位为当前模型所支持的最大文本长度max_length (e.g., 512, 1024, 2048)。而decode阶段则固定只取前一轮生成的一个token作为输入。

3d53d2c8-6713-11ee-9788-92fbcf53809c.pngChatGLM2 Inference
因此max_length越长,GLMBlock接收的输入数据量越大,Linear Layer的也就越大,这就会导致W8A16的性能提升越有限。而decode阶段始终保持为1,此时W8A16就能带来明显的性能提升。3d711ad6-6713-11ee-9788-92fbcf53809c.pngMatMuls in ChatGLM2 prefill and decode phase

5. 效果展示

将W8A16量化应用于ChatGLM2-6B后,整体性能如下所示:

  1. 性能:整体性能得到70%以上的提升
  2. 精度:与F16下的回答略有不同,但答案正确性仍然可以保证
  3. 模型大小:由12GB降为6.4GB

3d86cac0-6713-11ee-9788-92fbcf53809c.pngResult Comparison

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    3298

    浏览量

    49133
  • 编译器
    +关注

    关注

    1

    文章

    1642

    浏览量

    49251
  • LLM
    LLM
    +关注

    关注

    0

    文章

    298

    浏览量

    381
收藏 人收藏

    评论

    相关推荐

    源2.0-M32大模型发布量化版 运行显存仅需23GB 性能可媲美LLaMA3

    2.0-M32量化版是"源"大模型团队为进一步提高模效率,降低大模型部署运行的计算资源要求而推出的版本,通过采用领先的
    的头像 发表于 08-25 22:06 359次阅读
    源2.0-M32大<b class='flag-5'>模型</b>发布<b class='flag-5'>量化</b>版 运行显存仅需23GB 性能可媲美LLaMA3

    chatglm2-6bP40做LORA微调

    背景: 目前,大模型的技术应用已经遍地开花。最快的应用方式无非是利用自有垂直领域的数据进行模型微调。chatglm2-6b国内开源的大模型
    的头像 发表于 08-13 17:12 551次阅读
    <b class='flag-5'>chatglm2</b>-6b<b class='flag-5'>在</b>P40<b class='flag-5'>上</b>做LORA微调

    深度神经网络模型量化的基本方法

    深度神经网络模型量化是深度学习领域中的一种重要优化技术,旨在通过减少模型参数的精度(即从高精度浮点数如32位浮点数FP32降低到低精度整数如8位整数
    的头像 发表于 07-15 11:26 755次阅读

    深度学习模型量化方法

    深度学习模型量化是一种重要的模型量化技术,旨在通过减少网络参数的比特宽度来减小模型大小和加速
    的头像 发表于 07-15 11:01 546次阅读
    深度学习<b class='flag-5'>模型</b><b class='flag-5'>量化</b>方法

    RADXA微服务器试用体验】+ GPT语音与视觉交互:2,图像识别

    ├── yolov8s_opt.onnx# 导出的动态opt onnx模型 ├── yolov8s_qtable_fp16 # TPU-MLIR编译时,用于BM1684X/
    发表于 07-14 23:36

    esp-dl int8量化模型数据集评估精度下降的疑问求解?

    一 试着将模型进行了esp-dlint16和int8量化,并在测试数据集上进行精度评估,其中int
    发表于 06-28 15:10

    产品应用 | 小盒子跑大模型!英码科技基于BM1684X平台实现大模型私有化部署

    当前,人工智能领域,大模型丰富人工智能应用场景中扮演着重要的角色,经过不断的探索,大模型进入到落地
    的头像 发表于 06-14 16:29 776次阅读
    产品应用 | 小盒子跑大<b class='flag-5'>模型</b>!英码科技基于<b class='flag-5'>算</b><b class='flag-5'>能</b><b class='flag-5'>BM1684X</b>平台实现大<b class='flag-5'>模型</b>私有化<b class='flag-5'>部署</b>

    用yolov5的best.pt导出成onnx转化成fp32 bmodel后Airbox跑,报维度不匹配怎么处理?

    用官方的模型不出错,用自己的yolov5训练出来的best.pt导出成onnx转化成fp32 bmodel后Airbox跑,出现报错: linaro@bm1684:~/yolov5
    发表于 05-31 08:10

    bm1684运行demo报错怎么解决?

    ../models/BM1684X/yolov5s_v6.1_3output_fp32_1b.bmodel[BMRT][bmcpu_setup:406] INFO:cpu_lib \'libcpuop.so
    发表于 05-20 07:24

    搭载TPU处理器BM1688&amp;CV186AH的英码科技边缘计算盒子,功耗更低、接口更丰富

    了基于BM1684的边缘计算盒子IVP03A、IVP03C、IVP03D,以及基于BM1684X的IVP03X边缘计算盒子,智慧交通、智慧化工园区、智慧校园等领域的细分场景得到了广泛
    的头像 发表于 05-18 08:39 396次阅读
    搭载TPU处理器<b class='flag-5'>BM</b>1688&amp;CV186AH的英码科技边缘计算盒子,功耗更低、接口更丰富

    AI力核心板:Core-1688JD4

    采用SOPHON八核AI处理器BM1688,INT8力高达16TOPS,支持16路解码+10路编码+16路AI分析,支持6路senso
    的头像 发表于 05-15 08:02 1530次阅读
    AI<b class='flag-5'>算</b>力核心板:Core-1688JD4

    【AIBOX】装在小盒子的AI足够强吗?

    Firefly推出大语言模型本地部署的产品:AIBOX-1684X,目前已适配主流的大语言模型,包括ChatGLM3-6B,以下是
    的头像 发表于 05-15 08:02 501次阅读
    【AIBOX】装在小盒子的AI足够强吗?

    AIBOX-1684X:把大语言模型“装”进小盒子

    AIBOX-1684X支持主流大模型私有化部署力高达32TOPS,同时也支持CNN、RNN、LSTM等传统网络架构,支持TensorFNNX和Darknet等深度学习架构,并支持自
    的头像 发表于 04-20 08:02 1404次阅读
    AIBOX-<b class='flag-5'>1684X</b>:把大语言<b class='flag-5'>模型</b>“装”进小盒子

    256Tops力!CSA1-N8S1684X力服务器

    (基于BM1684X的高力服务器)高力AI处理器BM1684X搭载了BM1684AI力So
    的头像 发表于 03-23 08:02 1742次阅读
    256Tops<b class='flag-5'>算</b>力!CSA1-N<b class='flag-5'>8S1684X</b><b class='flag-5'>算</b>力服务器

    RADXA微服务器试用体验】Radxa Fogwise 1684X Mini 规格

    通过网络可以了解到,RADXA微服务器的具体规格: 处理器:BM1684X 力:高达32Tops INT8峰值
    发表于 02-28 11:21