大型语言模型已经远远超出了消费级硬件的内存容量。一个 700 亿参数的模型在标准 16 位精度下需要 140 GB 的 GPU 内存——远远超过最昂贵的消费级 GPU。bitsandbytes 就是弥补这个差距的库,提供量化技术,使得在可负担的硬件上加载、训练和运行大型模型成为可能。
由华盛顿大学的 Tim Dettmers 开发,bitsandbytes 已成为开源 AI 生态系统中最关键的基础设施之一。它提供了三项基础量化能力:用于内存高效训练的 8 位优化器、用于内存高效推理的 LLM.int8()、以及用于 QLoRA 风格微调的 4 位 NormalFloat 量化。这些技术共同使数千名研究人员和开发者能够在他们已有的硬件上处理大型模型。
该库对 AI 社区的影响难以言喻。在 bitsandbytes 出现之前,微调一个 65B 参数模型需要多个价值数万美元的 A100 GPU。有了 4 位 QLoRA,同样的任务可以在单张消费级 GPU 上完成。这种 LLM 微调的普及化,使得原本因成本而被排除在大规模 AI 研究之外的个人开发者、小型团队和学术研究人员能够进行创新。
bitsandbytes 的量化架构如何运作?
该库实现了多种量化策略,每种策略针对不同的使用场景和精度需求进行了优化。
graph LR
A[bitsandbytes 库] --> B[8 位 Adam 优化器]
A --> C[LLM.int8() 推理]
A --> D[4 位 NF4 量化]
B --> E[块式量化]
B --> F[动态量化]
C --> G[混合精度分解]
C --> H[异常特征处理]
D --> I[NormalFloat4 格式]
D --> J[双重量化]
E --> K[内存高效训练]
F --> K
G --> L[全精度准确度]
H --> L
I --> M[内存高效微调]
J --> M
这三种主要量化策略在不同层级运作。8 位优化器减少了训练期间优化器状态的内存占用。LLM.int8() 使得推理原本会超出 GPU 内存的模型成为可能。而 4 位 NF4 量化则使得在消费级硬件上微调大型模型成为可能。
bitsandbytes 提供了多少内存节省?
量化带来的内存节省相当可观,决定了是需要企业级 GPU 集群还是仅需单张消费级显卡。
| 模型大小 | 16 位精度 | 8 位 (LLM.int8) | 4 位 (NF4) |
|---|---|---|---|
| 7B 参数 | 14 GB | 7 GB | 3.5 GB |
| 13B 参数 | 26 GB | 13 GB | 6.5 GB |
| 33B 参数 | 66 GB | 33 GB | 16.5 GB |
| 65B 参数 | 130 GB | 65 GB | 32.5 GB |
| 70B 参数 | 140 GB | 70 GB | 35 GB |
| 180B 参数 | 360 GB | 180 GB | 90 GB |
一个在 16 位精度下需要 140 GB GPU 内存的 70B 参数模型,在 4 位下只需要 35 GB——可以轻松容纳在单张 RTX 4090 或 A6000 上。即使是 180B 的模型,使用 4 位量化和双 GPU 设置也能够访问。
QLoRA 如何使用 bitsandbytes 进行高效微调?
QLoRA(量化低秩适配)将 bitsandbytes 的 4 位量化与 LoRA 适配器结合,以最小的内存开销实现最先进的微调结果。
| 微调方法 | 内存 (7B 模型) | 内存 (70B 模型) | 训练速度 | 品质保持 |
|---|---|---|---|---|
| 完整微调 (16 位) | 56 GB | 560 GB | 1 倍(基准线) | 100% |
| LoRA (16 位) | 28 GB | 280 GB | 1.2 倍 | 99.5% |
| QLoRA (4 位 NF4) | 10 GB | 48 GB | 1.5 倍 | 99.3% |
| QLoRA (4 位 + 双重量化) | 8 GB | 35 GB | 1.6 倍 | 99.0% |
QLoRA 背后的关键洞察是:将基础模型权重量化为 4 位,同时将 LoRA 适配器权重保持在全精度,可以在内存成本仅为一小部分的情况下,达到与全精度训练几乎相同的微调质量。4 位基础模型权重在前向传播期间即时反量化,而梯度仅流经 LoRA 适配器。
bitsandbytes 支持哪些 GPU 架构?
bitsandbytes 针对现代 NVIDIA GPU 架构进行了优化,并针对不同的 CUDA 功能提供了特定支持。
| GPU 架构 | 示例 | CUDA 计算能力 | bitsandbytes 支持 |
|---|---|---|---|
| Blackwell | B200、B100 | 10.0 | 完整支持 |
| Hopper | H100、H200 | 9.0 | 完整支持 |
| Ada Lovelace | RTX 4090、RTX 6000 Ada | 8.9 | 完整支持 |
| Ampere | A100、RTX 3090、A6000 | 8.0 | 完整支持 |
| Turing | RTX 2080、T4 | 7.5 | 完整支持 |
| Volta | V100 | 7.0 | 有限支持 |
| Pascal | P100、GTX 1080 | 6.x | 仅量化 |
该库包含针对每个架构优化的 CUDA 内核,最先进的量化操作支持 Ampere 及更新的 GPU。仅 CPU 操作支持推理,但不支持训练。
FAQ
什么是 bitsandbytes? bitsandbytes 是由 Tim Dettmers 开发的 PyTorch 基础 k-bit 量化库。它实现了 8 位优化器、LLM.int8 推理和 4 位 QLoRA 训练,大幅降低了大型语言模型的内存需求。
4 位量化如何减少内存使用? 4 位量化将模型权重从 32 位浮点数转换为 4 位 (NF4) 格式,内存使用量约减少 8 倍。例如,一个需要 140GB 16 位内存的 70B 参数模型,使用 4 位量化后约只需 35GB。
什么是 QLoRA,bitsandbytes 如何实现它? QLoRA(量化低秩适配)结合了 4 位 NormalFloat 量化与低秩适配器,可在单张消费级 GPU 上微调大型语言模型。bitsandbytes 提供了 QLoRA 所依赖的 4 位量化基础。
什么是 LLM.int8() 技术? LLM.int8() 是 bitsandbytes 中实现的技术,对大多数数值以 8 位精度执行矩阵乘法,对异常特征以 16 位精度执行,在保持全精度准确度的同时只使用一半的内存。
bitsandbytes 与最新的 GPU 兼容吗? 是的,bitsandbytes 支持支持 CUDA 的 GPU,包括 NVIDIA Ampere (A100、A6000)、Ada Lovelace (RTX 4090、RTX 6000 Ada)、Hopper (H100、H200) 和 Blackwell 架构。也支持仅 CPU 推理。
延伸阅读
- bitsandbytes GitHub 仓库 – 源代码、文档和安装指南
- QLoRA 论文 – 介绍 4 位微调的研究论文
- LLM.int8() 论文 – 关于 8 位矩阵乘法的研究论文
- Hugging Face Transformers 集成 – 在 Transformers 库中使用 bitsandbytes
- NormalFloat4 技术说明 – 4 位量化中使用的 NF4 数据类型
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!