当前位置: 首页 > news >正文

LLM 量化 cache管理

本文基于百度昆仑第二代硬件

前提

当前百度硬件tensor core支持的输入:int16, int8, bfp16
当前百度硬件tensor core支持的计算方式: int16, fp16,int8
常见的LLM大模型激活类型:fp16,bfp16
cache类型:fp16, bfp16,int8,int4

量化

这里列举一下当前常用的方式以及量化方法

激活cache计算方式
类型1fp16fp16量化到int16,然后做int16*int16的计算,输出反量化到fp16
类型2fp16int8输入量化到int16(实为int8 * 2),与cache 做两次计算,最后输出反量化到fp16

这里主要讨论一下cache 的量化方式:

  1. 当用类型1时,cache为fp16,此时需要量化到int16,此时需要一个per cache的 max/scale值来进行量化。(计算量 cache len)
    这里可以做一个优化,保存一个per cache 的max值,每次插入数据时更新per cache max值。(计算量 1)
    然而,当遇到动态插入情况时,如下图图2,Q4结束了,Q6插入,但这时Q4的max值还在cache max值中,这里有一个解决版本,保存per batch 的max,当某个batch 结束了,置空该值,然后在送入attention算子之前提前更新per cache max值 (计算量 batch)
    在这里插入图片描述

  2. 当用类型2时,输入时int8,主要涉及到的是反量化,用到了静态量化方式。
    常见的静态量化为:per channel,百度采用per head量化,(seqlen, head_num, head_dim)在head_num维度做量化。

题外

当然这些量化方式对硬件来说不需要关注,硬件只需要知道这一批数据max值是多少,量化还是反量化,输入输出类型是啥。怎么用就属于算子层实现,
例如:per head量化方式

for (int i = 0; i < seqlen; i++) {
    for (int j = 0; j < head_num; j++) {
        float scale = head_num_sacle[j];
        for (int k = 0; k < head_dim; k++) {
            dequant_or_quant(x, y, scale);
        }
    }
}

相关文章:

  • Super Logic Region (SLR) 在Xilinx FPGA架构
  • 对接股票金融数据源API
  • SPN专线+5G业务隔离+工作网+流量共享
  • 【算法day16】电话号码的字母组合
  • STC89C52单片机学习——第28节: [12-2] AT24C02数据存储秒表(定时器扫描按键数码管)
  • 回调函数中 qsort 函数的使用
  • dvwa的三个模式下sqlmap命令一把梭哈
  • 涨薪技术|Kubernetes(k8s)之yaml语法大全
  • 显示模块(LCD1602,OLED,四位数码管)
  • 腾讯云大模型知识引擎×DeepSeek:股票分析低代码应用实践
  • 企业数字化转型规划设计1(107页PPT)(文末有下载方式)
  • FPGA时钟约束
  • 实时内核稳定性问题 - 压测异常重启问题
  • 取消Win10锁屏界面上显示的天气、市场和广告的操作
  • 【 C/C++ 包管理工具】vcpkg安装+使用
  • gradle-8.13
  • 【Java】TCP网络编程:从可靠传输到Socket实战
  • abaqus后处理导出多个节点数据的顺序
  • EtherCAT转Modbus网关如何在倍福plc组态快速配置
  • 【MCU】芯片复位与软件复位 在生产工装上的应用
  • 做网站模板的海报尺寸多少钱/电商运营数据六大指标
  • 怎么用div做网站/超级优化大师下载
  • 网站导航网站建设多少钱/网络推广app是违法的吗
  • 厦门网页制作厦门小程序app/seo管理工具
  • 深圳做网站哪家公司最好/域名排名查询
  • 聊城做wap网站哪儿好/免费制作个人网站