19-4 LLM之野望 4 - 探索大模型的量化

什么是模型量化?

从本质上讲,模型量化就是为了提高效率。想象一下,你有一本非常厚的教科书(就像那些老式百科全书一样),需要整天随身携带。很累吧?现在,如果你能把它缩小到一本漫画书的大小,同时保留所有必要的信息,那会怎么样?这本质上就是量化对 LLM 的作用——它压缩了它们的大小,但又不失其功能的本质。

从技术角度来说,量化将模型中使用的数字(权重)的精度从全浮点数降低到半浮点数、N 位浮点数或整数。这不仅使模型更轻,而且还加快了计算速度,因为处理较小的数字对计算机来说需要的工作更少。

FP32、FP16、BFP16:

19-4 LLM之野望 4 - 探索大模型的量化

来源:谷歌

模型量化的好处

  • 减小模型大小:量化模型占用更少的空间。这意味着我们可以在内存较少的设备上运行 LLM — 比如 MacBook Air、智能手机、物联网设备,甚至在边缘设备(比如智能冰箱!)。
  • 性能提升:数据量更小,量化模型可以运行得更快,非常适合需要实时处理的应用程序。这对于即时推荐等功能至关重要。
  • 更广泛的部署可能性:由于这些模型更小、速度更快,因此它们可以部署在计算能力有限的环境中。这开辟了一个全新的世界,先进的人工智能可以在我们从未想过的地方使用。

量化让我们能够用更少的资源做更多的事情,让法学硕士 (LLM) 更易于获得且更具可持续性。

关键量化格式和技术

GGML(GPT 生成的模型语言)或(Georgi Gerganov 模型语言):

GGML 由 Georgi Gerganov 开发,开创了这一传奇,它是通过将所有内容捆绑到一个文件中来简化模型共享的先驱。您可以将其视为模型格式的磁带 📼 — 简单易懂且与不同的 CPU 广泛兼容。它促进了模型共享和执行,包括 Apple Silicon 设备中的模型共享和执行。

GGUF(GPT 生成的统一格式)

然后出现了 GGUF,就像格式中的 DVD 📀。GGUF 于 2023 年 8 月 21 日推出(GGML 正式淘汰,新格式称为 GGUF #1370),它带来了增强的灵活性和兼容性,支持更广泛的模型和功能。它不仅保留了 GGML 的特性,还增加了向后兼容和扩展对各种模型类型的支持等功能,包括 Meta 的 LLaMa。

GPTQ(生成后训练量化)

GPTQ 就像我们故事中的蓝光🥏,它的出现是为了满足对高效训练后量化的需求,以显着压缩模型同时保持高精度,这对 GPU 特别有用。

  • GPTQ减少了训练后模型权重的位表示,这有助于在尝试保持性能完整性的同时显著压缩模型尺寸。
  • 通过将权重的位深度从标准浮点数减少到仅 3-4 位,GPTQ 可以使模型消耗更少的内存——比 FP16 模型减少 4 倍。
  • 与仍然需要更高比特率的 FP16 不同,GPTQ 的积极压缩策略使其适用于内存非常宝贵的环境,并且不会对性能造成太大影响。

K量化

K-quant 方法有点像在视频中设置不同的分辨率🎞️,就像摄影师调整场景各个部分的焦点,强调最重要的细节一样。它会调整模型不同部分的精度,根据计算预算平衡性能和细节。

  • 基于块的权重划分:将模型的权重划分为块,每个块根据其重要性或对模型性能的影响程度,可以具有不同的量化精度。
  • 选择性精度应用:这种方法可以更精细地控制模型的哪些部分被更严格地压缩,从而有效地优化性能和尺寸。

EXL2

EXL2 专注于最大化 GPU 利用率,可以将其视为量化的 4K 超高清📷 – 提供高效率和精度,主要面向较新的 GPU,在不占用 VRAM 的情况下提高速度,确保快速处理和高效的内存使用。

  • VRAM 利用率:EXL2 优化了 VRAM 的使用,由于其对空间的有效利用,使得更大的模型可以在原本无法处理的 GPU 上运行。
  • 推理速度:特别是在较新的 GPU 硬件上,EXL2 可以通过减少处理量化权重所需的计算开销来提供更快的推理时间。

AWQ(激活感知权重量化)

AWQ 采用独特的方法,根据权重在推理过程中的激活情况对其进行量化,从而保护最关键的权重,以最大限度地减少性能损失。这就像一位熟练的厨师 🧑‍🍳 处理食材一样——仔细测量和优化每个成分以达到完美平衡!它通过关注数据中最关键的部分来优化权重量化,从而提高性能和准确性。

  • AWQ 会考虑每个权重在实际数据处理过程中如何影响模型的激活(输出),并在对输出质量的影响最小的情况下进行更积极地量化。
  • 通过在最重要的地方保留激活的保真度,它允许 AWQ 维持甚至提高模型性能。

QAT(量化感知训练)

QAT 正在训练运动员🏃🏻‍♂️,让他们使用比赛当天要使用的装备——确保在量化约束下达到最佳表现。它将量化集成到训练过程本身中,确保模型即使在精度降低的情况下也能表现良好。

  • QAT 将量化直接嵌入到模型训练周期中,使模型从一开始就能够适应量化引起的细微差别。
  • 通过考虑量化进行训练,QAT 生成的模型在量化条件下本质上更为稳健和准确,避免了训练后量化中通常出现的性能下降。

PTQ(训练后量化)

PTQ 就像在汽车发动机上添加涡轮增压器以获得更大的动力——在模型完全训练后应用以调整性能而无需大量的再训练,非常适合快速部署。

  • 相对容易实现只需要对现有模型结构进行最少的改变。
  • 当需要快速部署或由于资源限制而无法使用 QAT重新训练模型时,PTQ 被广泛使用。

总之…

量化技术从 GGML 演变为 GGUF、GPTQ 和 EXL2 等更复杂的方法,展示了模型压缩和效率方面的重大技术进步。最初,GGML 简化了模型共享,其格式与各种 CPU(包括 Apple Silicon)高度兼容。然而,随着模型复杂性和性能需求的增加,GGUF 应运而生,它提供了更好的灵活性、向后兼容性和对更广泛模型的支持。与此同时,GPTQ 引入了更积极的压缩策略,适合 GPU 环境,大大降低了内存需求,而性能却没有显著下降。K-quants 的开发进一步完善了模型内的精度管理,允许选择性地强调关键模型部分,以有效平衡性能和大小。最后,EXL2 代表了向最大化 GPU 效率迈出的一大步,旨在提高推理速度并在较新的硬件上容纳更大的模型,标志着在不断追求使大型语言模型在不同计算环境中更易于访问和更高效的过程中达到了一个高峰。

优势、局限性和最佳应用

无论您处理不同类型的硬件还是特定的模型要求,了解这些细微差别都可以指导您根据部署场景做出最佳选择。

GGML 与 GGUF

优点:

  • GGML:简单、CPU 友好,适合在包括 Apple Silicon 在内的各种平台上进行初始部署。
  • GGUF:提供向后兼容性,支持更广泛的模型,并直接集成额外的元数据,降低部署复杂性。

限制:

  • GGML:灵活性和与新模型功能的兼容性较差。
  • GGUF:将现有模型转换为 GGUF 可能很耗时并且需要适应。

最佳使用场景:

  • GGML:最适合那些需要在基本计算设置中直接部署模型的人。
  • GGUF:非常适合需要持续更新和向后兼容的更复杂的模型。

职业资格考试

优点:

  • 高效的内存使用,显著减少模型尺寸,而不会严重影响性能。
  • 适用于 GPU 内存有限的环境。

限制:

  • 由于过度压缩,可能仍会造成一定的准确性损失。

最佳使用场景:

  • 非常适合 GPU 受限的环境,在这种环境中保持性能和内存使用之间的平衡至关重要。

K量化

优点:

  • 允许选择性精确应用,优化重要的性能。
  • 可以根据不同模型部分的重要性,动态调整量化深度。

限制:

  • 由于需要确定不同模型部分的重要性,因此实现起来更加复杂。

最佳使用场景:

  • 非常适合特定模型组件在性能中发挥关键作用的应用程序,例如在详细的图像或语音处理任务中。

EXL2

优点:

  • 优化 VRAM 使用率,允许在较新的 GPU 硬件上部署更大的模型。
  • 显著提高推理速度。

限制:

  • 与 GGUF 等其他格式相比,EXL2 被认为更复杂且用户友好性更低。
  • 社区支持较少,EXL2 的可用资源较少,导致知名度和采用率较低。可供下载的 EXL2 模型较少,对于寻求多样性和特定应用的用户来说,吸引力较小。

最佳使用场景:

  • 最适合需要最大推理速度和模型尺寸优化的尖端 GPU 环境。

AWQ(激活感知权重量化)

优点:

  • 专注于保持激活的质量,最大限度地减少对模型性能的影响。
  • 根据激活重要性调整量化级别,提高模型效率。

限制:

  • 需要初始数据驱动的校准才能实现最佳功能,这可能需要大量数据。

最佳使用场景:

  • 非常适合模型精度至关重要且有足够校准数据的场景。

QAT(量化感知训练)与 PTQ(训练后量化)

优点:

  • QAT:将量化直接集成到训练过程中,生成对量化效应具有鲁棒性的模型。
  • PTQ:更容易应用,因为它不需要改变训练过程,适合快速部署。

限制:

  • QAT:耗时且计算成本高。
  • PTQ:如果不小心管理,可能会导致性能下降。

最佳使用场景:

  • QAT:最适合从头开始开发新模型并考虑量化的场景。
  • PTQ:适用于需要利用现有的预训练模型快速部署模型的场景。

模型适用性和部署环境

每种量化策略在不同场景下各有千秋:

  • 对于传统系统或计算能力有限的平台,GGMLPTQ提供了直接的解决方案。
  • 高性能计算环境或最新的 GPU 设置将从EXL2GPTQ中受益最多,其中性能和内存使用之间的权衡得到了优化。
  • 在模型准确性和稳健性至关重要的应用中, AWQQAT是首选,并且部署环境可以处理相关开销。

量化模型文件

19-4 LLM之野望 4 - 探索大模型的量化

diagram by @mishig25 (GGUF v3)

查找GGUF文件:

  • 您可以通过 GGUF 标签过滤浏览所有包含 GGUF 文件的模型:hf.co/models?library=gguf
  • 此外,您可以使用ggml-org/gguf-my-repo工具将模型权重转换/量化为GGUF权重。

19-4 LLM之野望 4 - 探索大模型的量化

HuggingFace 模特中心

量化类型

这些不同的 GGUF 文件是什么?

  • 哦哦,“q”…
  • llama.cpp — k-quants #1684

19-4 LLM之野望 4 - 探索大模型的量化

不同的模型量化文件

这些方法代表了量化模型的不同方法,即降低模型权重的精度,使其更小、运行速度更快,但会牺牲准确性。下面对这些术语各部分的含义进行了详细说明:

  • Q(数字): Q 后面跟着数字(例如 Q2、Q3、Q4)表示量化的位深度。较低位量化(如 Q2)表示更激进的压缩,从而导致模型尺寸更小,但可能造成更高的质量损失。较高位深度(如 Q6)提供的压缩较少,以更大的尺寸为代价保持更好的模型保真度。
  • K: “_K”和类似后缀(如 Q4_K、Q5_K)表示在给定量化框架内应用的特定方法或优化。这些方法或优化可能涉及应用量化的不同技术,重点关注模型的某些层或方面,以优化性能或最大限度地减少质量损失。
  • S、M、L: “S”、“M”和“L”通常代表小、中、大。这些变化代表模型大小与性能/准确度之间的不同平衡:
  • S(小):针对最低内存使用率进行了优化,但质量或性能方面可能会受到最大影响。
  • M(中):内存使用量和性能之间的平衡。
  • L(大):注重以更高的内存使用量为代价来保持更高的质量和性能。

实际用法:

考虑您的硬件功能(RAM 和 VRAM)以及性能与准确度要求。例如:

  • 如果您的 VRAM 有限但需要快速的性能,您可以选择“Q5_K_S”变体。
  • 如果您可以承受更多的内存使用并且需要更高的准确性,“Q5_K_L”可能更合适。

对于配备 M1 和 16GB RAM 的 Apple Silicon:

  • 模型选择:最好使用具有高效量化类型的较小模型,因为它们需要较少的内存和计算能力。
  • 量化类型:
  • Q5_K_M(7B 为 4.45GB):提供非常低的质量损失,并且是模型大小和困惑度增加方面更为均衡的选项之一。
  • Q3_K_M(7B 为 3.06GB):另一个可行的选择,它在内存使用和困惑度增加之间提供了良好的平衡。它比 Q5_K_M 小,如果 RAM 是一个限制因素,它可能更合适。

对于具有 16GB VRAM 的 Nvidia GPU:

  • 模型选择:如果更大的模型符合 VRAM 限制,则可以考虑使用,因为 GPU 可以为神经网络计算提供更好的性能。
  • 量化类型:
  • Q6_K(7B 占用 5.15GB):满足高性能需求且质量损失最小的绝佳选择。它使用 6 位量化,与全精度相比,文件大小显著减小,同时保持与原始模型非常接近的精度。
  • Q5_K_M(7B 为 4.45GB):也是一个不错的选择,在模型大小和困惑度增加之间实现了平衡,同时质量损失非常低。

Hub 有一个 GGUF 文件的查看器,允许用户查看元数据和张量信息(名称、形状、精度)。

19-4 LLM之野望 4 - 探索大模型的量化

HuggingFace 上的 GGUF 文件详细信息

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

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

相关文章

Postgresql导入几何数据的几种方式

postgis方式导入 1.直接使用postgis客户端方式导入 首先,电脑要安装postgresql和对应版本的postgis。然后通过postgis客户端软件连接到postgresql数据库。然后导入。具体详细操作如下所示: 第一步:首先要再postgis中创建数据库 Create da…

怎样在 PostgreSQL 中进行用户权限的精细管理?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样在 PostgreSQL 中进行用户权限的精细管理?一、权限管理的重要性二、PostgreSQL 中的权…

Linux云计算 |【第一阶段】ENGINEER-DAY2

主要内容: 磁盘空间管理fdisk、parted工具、开机自动挂载、文件系统、交换空间 KVM虚拟化 实操前骤: 1)添加一块硬盘(磁盘),需要关机才能进行操作,点击左下角【添加硬件】 2)选择2…

Lamp 小白菜鸟从入门到精通

前言 “LAMP包”的脚本组件中包括了CGIweb接口,它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序,并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流&#xff0…

2.0.PyTorch神经网络基础

层和块 块(block)可以描述单个层、由多个层组成的组件或整个模型本身。 使用块进行抽象的一个好处是可以将一些块组合成更大的组件, 这一过程通常是递归的。多个层被组合成块,形成更大的模型: #层 import torch from …

LeetCode做题记录(第二天)169. 多数元素

题目:169. 多数元素 标签:数组 哈希表 分治 计数 排序 题目信息: 思路一: 在题目中出现了计数,那我们就可以直接考虑考虑使用哈希表 unordered_map 即遍历的时候记录每个数的出现次数,当出现次数大于n/…

苍穹外卖跟练项目前端localhost打不开页面启动nginx报错[alert] could not open error log file问题解决

一、安装路径为纯英文 查看自己的安装路径是否为纯英文环境,刚开始下载的资料包是有中文路径的,要将资料包中的nginx-1.20.2文件夹复制一份然后粘贴到一个新建的纯英文的目录,我这里装到的是 D:\Program Files\nginx-1.20.2 二、删掉logs文件…

【AI学习】关于Scaling Law的相关学习

一、苦涩的教训 首先,学习一段重要话语: The biggest lesson that can be read from 70 years of AI research is that general methods that leverage computation are ultimately the most effective, and by a large margin. 从70年的人工智能研究中…

C语言 ——— 浮点数类型 在 内存中 的 存储模式

目录 浮点数存储规则 单\双精度浮点数 存储 S、M、E 的布局 有效数字M 和 指数位E 的特殊规定 浮点数在内存中是否存储的S、M、E 浮点数存储规则 根据国际标准IEEE754(电气和电子工程协会)规定:任意一个 浮点数F的二进制 都可以表示成…

<数据集>铁轨缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:844张 标注数量(xml文件个数):844 标注数量(txt文件个数):844 标注类别数:3 标注类别名称:[Spalling, Squat, Wheel Burn] 序号类别名称图片数框数1Spalling3315522…

【ProtoBuf】通讯录实现(网络版)

Protobuf 还常用于通讯协议、服务端数据交换场景。那么在这个示例中,我们将实现一个网络版本的通讯录,模拟实现客户端与服务端的交互,通过 Protobuf 来实现各端之间的协议序列化。 需求如下: 客户端可以选择对通讯录进行以下操…

达梦数据库 DISQL连接数据库与执行SQL、脚本的方法

DISQL连接数据库与执行SQL、脚本的方法 1.DISQL介绍2.DISQL连接数据库的方法2.1 本地连接2.2 远程连接2.3 CONN连接 3.执行SQL、脚本的方法3.1 通过DISQL登录后在字符界面3.2 启动DISQL时运行脚本3.3 进入DISQL后,通过start命令运行脚本3.4 使用EDIT命令编辑脚本 1.…

【中项】系统集成项目管理工程师-第3章 信息技术服务-3.1内涵与外延与3.2原理与组成

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

OV7670寄存器读出0x00或0xFF

文章目录 问题描述原因分析解决方案 问题描述 OV7670的输出图像异常,怀疑寄存器没有正确配置,在SignalTap中观察到SIO_D在读出阶段一直为高或低 寄存器读出0x00 寄存器读出0xFF 原因分析 在确保电源、时钟和读写时序没有问题的情况下,有…

PCB系统学习(1)--PCB印制电路板

PCB印制电路板 1.1PCB的定义1.2PCB的层叠结构1.2.1PCB单层板1.2.2PCB双层板1.2.3PCB四层板 1.3PCB的通孔,盲孔,埋孔1.4元器件的符号与封装1.5PCB的生产过程 1.1PCB的定义 PCB(PrintedCircuitBoard),中文即印制电路板,或印刷线路板…

Linux--多线程

今日内容 线程的结束机制: 1.不同与进程没有孤儿线程和僵尸线程。 2.主进程结束,任意生成的次线程都会结束。(因为共享的进程空间被回收了)。 3.次线程的正常结束不会影响主线程的运行。 子线程的回收策略&a…

《0基础》学习Python——第十八讲__爬虫\<1>

一、什么是爬虫 爬虫是一种网络数据抓取的技术。通过编写程序(通常使用Python),爬虫可以自动化地访问网页,解析网页内容并提取出所需的数据。爬虫可以用于各种用途,如搜索引擎的索引,数据分析和挖掘&#x…

NVIDIA 完全过渡到开源 GPU 内核模块

目录 支持的 GPU安装程序更改将包管理器与 CUDA 元包配合使用使用 runfile使用安装帮助程序脚本包管理器详细信息apt:基于 Ubuntu 和 Debian 的发行版dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linuxzypper:SUSE …

怎么关闭 Windows 安全中心,手动关闭 Windows Defender 教程

Windows 安全中心(也称为 Windows Defender Security Center)是微软 Windows 操作系统内置的安全管理工具,用于监控和控制病毒防护、防火墙、应用和浏览器保护等安全功能。然而,在某些情况下,用户可能需要关闭 Windows…

【分布式事务】怎么解决分布式场景下数据一致性问题

分布式事务的由来 拿充值订单举个栗子吧,假设:原本订单模块和账户模块是放在一起的,现在需要做服务拆分,拆分成订单服务,账户余额服务。原本收到充值回调后,可以将修改订单状态和扣减余额放在一个mysql事务…