picoLLM:大模型的量化魔术师 上

news2025/1/23 10:30:02

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于如果构建生成级别的AI架构则可以关注AI架构设计专栏。技术宅麻烦死磕LLM背后的基础模型。

Picovoice首席执行官Alireza Kenarsari指出,“picoLLM是Picovoice 深度学习研究人员和量产工程师共同努力的成果。前者研究出X 位量化算法,而后者构建了跨平台的LLM 推理引擎。目的还是在于将LLM遍及到任何设备且将控制权交还给企业”。

picoLLM Inference可以免费使用,没有任何使用限制。无论是在PC上工作,还是为数百万用户提供服务。只需几行代码即可部署。

注:其余的产品线有非商用免费版,也有收费版

认识量化(Quantization

大模型有个基本的指标就是模型参数规模,客观而言参数规模越大,效果越佳,但是所需的内存越多。例如,要部署 7.7GB 大小的Mistral 7B,需要GPU的VRAM大小要超过8GB才能在GPU完全加载。因此意味着运行更大规模的模型将需要具有更大规格的硬件,从而增加成本。

量化是一种压缩技术,将高精度值映射到低精度值。对于任意的大模型,这意味着它们的权重和激活精度会被调整,肯定会对影响模型的能力。在实际的运用过程中发现,某些情况下虽然明显的减低精度,然而却又能获得和原来不相上下的结果。

量化通过降低内存带宽需求和提高缓存利用率来提高性能,不同精度级别的量化过程能够更多的设备上运行大模型。

LLMs通常使用全精度(float32)或半精度(float16)的浮点数进行训练。一个float16有16位,即2个字节。因此在 FP16上训练参数规模为1B的大模型则至少需要2GB的内存,这还不包括训练过程中的优化器内存、激活内存和梯度内存。

量化其实就是想找到一种方法,将FP32权重的值的范围([最小值,最大值])表示为较低精度的值,例如FP16甚至INT4(整数 4 位)的数据类型。典型的情况是从FP32到INT8。

下图为一个具体的例子,将FP16格式的数组量化为INT8的过程,当然最后可以从INT8再次还原为FP16。这样一来原来模型的存储大小就被有效的降低了。

其实换个思路来讲,就是将数轴进行压缩。这里的难题在于如何的量化才能降低存储开销,但是又能表达出原来的意思。

目前有不少的量化思路,均匀量化是模型量化中常用的一种技术,用于降低深度学习模型中权重和激活的精度。在量化过程中将值的范围划分为固定数量的等距区间,然后将每个值映射到最近区间的中心。此过程有助于减少表示每个值所需的位数。

与更复杂的量化技术相比,均匀量化的主要优势之一是其简单易用。然而,均匀量化可能并不总是能捕捉到数据分布的细微差别。想象一下原始参数的取值在[3.5,  3.9],若都被量化到4,的确会导致潜在的信息丢失和性能下降。

另一方面,非均匀量化允许量化步距不均匀分布,从而能更准确和更灵活。量化过程由离散量化水平 (Xi) 和相应的量化步骤 (∆i) 定义。当实数落在特定的量化步骤范围 (∆i, ∆i+1) 内时,量化器将其分配到相应的量化级别 (Xi)。非均匀量化方法(如对数分布)侧重于以指数而不是线性方式调整量化步骤和水平,这可以通过有效捕获重要值区域来提高准确性。

左图为对称量化,右图为非对称量化

微调中的量化

左图为QAT,右图为PTQ,两者的区别在于量化的位置。

PTQ是一种流行的技术,模型参数(通常以FP32等高精度格式存储)被转换为较低位精度的INT8。此转换过程允许在计算资源有限的硬件(如移动设备和嵌入式系统)上更高效地部署模型。PTQ 可以应用于神经网络的权重和激活,从而减小模型大小并提高推理速度,而不会显着降低准确性。

QAT具有在部署期间将应用的量化效应的意识。当对训练模型进行量化时,可能会导致模型参数出现扰动,从而可能导致模型偏离训练期间以浮点精度实现的收敛点。

为了解决这个问题,QAT使用量化参数重新训练神经网络模型,使模型能够收敛到损失减少的点。在QAT期间,在浮点对量化模型执行正向和后向传递,而模型参数在每次梯度更新后进行量化,类似于预测梯度下降。在浮点权重更新后执行投影对于防止零梯度或高误差梯度至关重要,尤其是在低精度场景中。

在QAT的反向传播过程中,处理不可微分的量化算子是一个挑战。一种常用方法是使用直通估计器 (STE) 通过将量化算子视为恒等函数来近似量化算子的梯度。

picoLLM

picoLLM Compression是Picovoice内部开发的一种新型大型语言模型量化算法。给定一个特定于任务的成本函数,picoLLM Compression 会自动学习跨权重和权重内LLM的最佳位分配策略。而目前现有技术方案都是固定分配。

picoLLM提供了一个全面的开源基准测试结果,例如下图,当应用于 Llama-3-8b ,picoLLM在2、3和 4位的量化设置下在MMLU的评测分数中,将采用GPTQ算法的正确率下降消灭于无形之中。随着量化位数的下降,几乎保持坚挺。

现有方法依赖于跨模型权重的固定位分配。但是,picoLLM 在量化过程中学习最优分配。每个模型最理想的量化位数取决于自身的架构和压缩比。例如,下面的三张图显示了压缩比为 3、5 和 7 时 Llama-2-7b不同组件之间的位最佳分布:

在MMLU (5-shot)任务上采用picoLLM的效果对比。

PicoLLM 框架支持Gemma、Llama、Mistral、Mixtral和Phi系列模型,并在Windows、macOS 和Linux上跨平台运行(包括Raspberry Pi 4和 5 上的Raspberry Pi OS)以及 Android 和 iOS。下次将详细地介绍它的内在原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1718924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字孪生在气象灾害防治中的重要贡献

数字孪生技术在气象灾害防治中正发挥着越来越重要的作用。数字孪生是指通过数字化方式在虚拟空间中构建与现实世界对应的虚拟模型,通过实时数据和模拟技术进行动态映射和交互。利用数字孪生技术,气象部门可以更高效、更精准地监测、预测和应对气象灾害&a…

四川景源畅信:抖音开店怎么做好运营?

在数字化时代的浪潮中,抖音作为一个流量巨大的社交平台,为许多商家提供了展示和销售产品的新舞台。但在这个充满竞争的平台上,如何做好店铺运营,吸引并留住顾客,成为了许多商家面临的挑战。接下来的内容将围绕如何在抖…

我与C++的爱恋:vector的使用

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:我与C的爱恋 ​ 文章目录 一、vector的简单介绍二、vector的使用构造函数遍历容器对容器的操作vector 的增删查改 一、vector的简单介绍 vector是表示可变大小数组的序列容器 就像数组…

去噪扩散概率模型在现代技术中的应用:图像生成、音频处理到药物发现

去噪扩散概率模型(DDPMs)是一种先进的生成模型,它通过模拟数据的噪声化和去噪过程,展现出多方面的优势。DDPMs能够生成高质量的数据样本,这在图像合成、音频生成等领域尤为重要。它们在数据去噪方面表现出色&#xff0…

打开C语言常用的内存函数大门(二)—— memmove()函数 (内含memmove的讲解和模拟实现)

文章目录 1. 前言2. memmove()函数2.1 memmove()函数与memcpy()函数的差异2.2 memmove()函数的原型2.3 memmove()函数的使用案例 3. memmove()函数的模拟实现4. 总结 1. 前言 在之前,我向大家介绍了C语言中的一个常用的内存函数memcpy函数。如果你还没看的话&#…

算法(十一)贪婪算法

文章目录 算法简介算法概念算法举例 经典问题 -背包问题 算法简介 算法概念 贪婪算法(Greedy)是一种在每一步都采取当前状态下最好的或者最优的选择,从而希望导致结果也是全局最好或者最优的算法。贪婪算法是当下局部的最优判断&#xff0c…

【UnityShader入门精要学习笔记】第十六章 Unity中的渲染优化技术 (下)

本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更,有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 减少需要处…

报表工具DataEase技术方案(一)

一、使用场景: 企业内部系统想要快速接入报表功能,但是局限于人力资源不足,不想沿用传统的前端后端开发模式,可以尝试使用开源报表工具 DataEase。 二、架构设计: 使用最简便的报表集成方式,通过DataEase…

越洗越黑”的Pandas数据清洗

引言 先来一个脑筋急转弯活跃一下枯燥工作日常,问:“什么东西越洗越黑?” 有没有猜到的?猜不到我告诉你吧! 答案是“煤球”。那么这个脑机急转弯跟我们要讨论的话题有没有关系呢? 嗯是的,还是沾…

2024年大屏幕互动源码+动态背景图和配乐素材+搭建教程

2024年大屏幕互动源码动态背景图和配乐素材搭建教程 php宝塔搭建部署活动现场大屏幕互动系统php源码 运行环境:PHPMYSQL 下载源码地址:极速云

Leetcode刷题笔记7

69. x 的平方根 69. x 的平方根 - 力扣(LeetCode) 假设求17的平方根 解法一:暴力解法 从1开始依次尝试 比如1的平方是1,2的平方是4...直到5的平方,25>17,所以一定是4点几的平方,所以等于4…

打家劫舍I 打家劫舍II (leetcode)

个人主页:Lei宝啊 愿所有美好如期而遇 打家劫舍Ihttps://leetcode.cn/problems/Gu0c2T/打家劫舍IIhttps://leetcode.cn/problems/PzWKhm/ 状态转移方程就是这样的: i位置选择偷f[i]:f[i] g[i-1] nums[i];i位置选择不偷g[i]:g…

C语言 指针——指针变量做函数参数:典型实例

目录 一个典型实例——两数互换 一个典型实例——两数互换 Errors

拓展虚拟世界边界,云手机可以做到吗

虚拟世界,AI,VR等词汇是21世纪最为流行的词汇,在科技背后,这些词汇的影响变得越来越大,已经走进了人们的世界,比如之前APPLE发布的vision pro,使人们能够更加身临其境的体验到原生os系统&#x…

存储 Bean 对象更加简单的方式

前置操作 如果是在 spring-config 中添加 bean 标签来注册内容,每个类都要弄一次就显得麻烦和臃肿了,对于 new 操作而言就没有什么优势了。因此 spring 就引入了注解操作来实现对 Bean 对象的存储。 配置扫描路径 想要将对象成功的存储到 Spring 中&…

【Linux系列】深入解析 `kill` 命令:Linux 下的进程管理利器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【每日力扣】32. 最长有效括号 416. 分割等和子集

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害 32. 最长有效括号 给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号 子串 …

民国漫画杂志《时代漫画》第34期.PDF

时代漫画34.PDF: https://url03.ctfile.com/f/1779803-1248636026-7e46c5?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

亚马逊云科技峰会盛大举行 | 光环新网携光环云数据以高性能智算服务助力企业创新发展

2024年5月29日,云计算行业的年度盛典”2024亚马逊云科技中国峰会”在上海世博中心再次盛大启幕。作为全球领先的云计算服务提供商,亚马逊云科技峰会聚焦前沿科技,与来自不同行业、不同科技领域的优秀企业和用户共同探索AI时代的云端创新发展。…

mysql大表的深度分页慢sql案例(跳页分页)-2

1 背景 有一张大表,内容是费用明细表,数据量约700万级, 普通B树索引KEY idx_fk_fymx_qybh_xfsj (qybh,xfsj)。 1.1 原始深度分页sql select t.* from fk_fymx t where t.qybh XXXXXXX limit 100000,100; 深度分页会导致加载数据行过多1000001…