BitsAndBytes(简称 BnB)是一个用于“压缩”大语言模型的工具包

BitsAndBytes(简称 BnB)是一个用于"压缩"大语言模型的工具包,能把模型从原来的16位或32位,压成4位或8位,减少显存占用,同时保持尽量高的精度。


🧩 为什么叫 Bits and Bytes?

它的名字就揭示了它的本质:

  • Bits(比特):指的是更小单位的表示,比如 4-bit、8-bit 的低精度表示。
  • Bytes(字节) :指的是标准 8-bit 表示 或 更多位的数据。
    合在一起,意思是"控制模型用多少位来表示参数",从而节省资源。

💡 为什么要用 BitsAndBytes?

训练/推理 大型语言模型(LLaMA、GPT、Mistral 等)时,如果使用原始精度(16-bit float),会导致:

  • 显存爆炸(16GB 显卡跑不动)
  • 加载速度慢
  • 部署成本高

而 BitsAndBytes 允许我们把模型压缩成 8-bit 或 4-bit,让你:

✅ 在消费级显卡上运行

✅ 加载更快

✅ 精度损失小,可控


🔢 举例说明:原始模型 vs BnB 压缩模型

以 LLaMA 2-7B 模型为例:

模型格式 占用显存(大概) 精度情况
FP16 原始模型 14~16 GB 精度最高
BnB 8-bit 模型 8~9 GB 精度接近
BnB 4-bit 模型 4~5.5 GB 精度略降

🔧 技术实现

BitsAndBytes 使用了两种核心压缩方式:

压缩类型 说明 举例
8-bit 量化 把每个参数从 16-bit → 8-bit 数值范围从 ±65536 → ±256
4-bit 量化 每个参数用 4-bit 表示,更极限 一个 float 压缩为 16 分之一大小

它也提供了三种主流 量化模式(不用深究,但知道名字有用):

  • nf4(最常用,效果稳定)
  • fp4(浮点 4bit)
  • int4(整数 4bit)

🧪 示例:怎么用 BitsAndBytes 加载压缩模型(Python)

python 复制代码
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers import BitsAndBytesConfig

# 配置 4-bit 加载
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype="float16",  # 用 fp16 来计算
    bnb_4bit_quant_type="nf4",         # 用 NF4 量化算法
)

model_name = "unsloth/llama-3.1-8b-unsloth-bnb-4bit"

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=bnb_config,
    device_map="auto"
)

tokenizer = AutoTokenizer.from_pretrained(model_name)

📌 总结一下,说得更简单点:

  • BitsAndBytes 就是个压缩工具包,能让大模型"瘦身",轻松跑在普通电脑上;
  • 你只要看到 bnb-4bit、bnb-8bit,就知道用了这个工具
  • Unsloth 只是把它优化得更厉害一些而已

🧱 1. 什么是「量化(Quantization)」?

把模型里那些"高精度的数字"变成"低精度的小数字",以此来减少模型体积、降低显存占用、提升加载速度


🎯 举个例子:

比如你有个模型参数是:

python 复制代码
原始值:0.123456789(float32,32位)

如果我们只保留4位小数:

python 复制代码
量化后:0.1235(float16 或 8-bit 或 4-bit)

你会失去一点精度,但整体性能几乎没变,资源节省巨大!


🧠 2. FP16 是什么?

✅ 定义:

  • FP16 = "16-bit Floating Point"
  • 是一种精度比 float32 低、但比 8-bit 高的数据格式

✅ 用途:

  • 用来训练或推理大型模型时节省内存
  • 精度和速度之间取得平衡,几乎不影响模型效果

🔢 3. 什么是 4-bit?

✅ 定义:

  • 表示每个参数只用 4位(半个字节)来存储
  • 比 FP16(16位)压缩了 4倍

✅ 代价:

  • 节省显存最多
  • 但精度有所降低(不同算法影响不同)

🛠️ 4. BitsAndBytes 是什么?

✅ 定义:

BitsAndBytes(简称 BnB)是一个库 ,用于自动把大模型做成 8-bit 或 4-bit 的压缩版本,并且保持它们能在 GPU 上跑。

✅ 用法:

  • 在 Transformers 中加载模型时配合使用:
python 复制代码
from transformers import BitsAndBytesConfig

✅ 支持的压缩方式:

模式 含义 用处
bnb-8bit 8-bit 量化 精度几乎不降,省一半显存
bnb-4bit 4-bit 量化 精度略降,显存最省

🧱 5. 什么是 bnb-4bit?

✅ 定义:

就是"使用 BitsAndBytes 工具,将模型压缩成 4bit 精度的版本"。

你看到名字中有:

bash 复制代码
llama-2-7b-bnb-4bit

就说明这个模型:

  • 是用 BitsAndBytes 压成了 4-bit
  • 通常占用显存为原始的 1/4 ~ 1/3
  • 精度比 FP16 略低,但在很多实际应用中,效果差异不大

🧩 总结一下:区别和联系

术语 类别 是啥? 举例 和别人啥关系
量化 技术名词 降低模型精度压缩模型 FP32 → 8bit → 4bit 总称,下面几种都属于量化方式
FP16 精度类型 用16位浮点表示参数 原始模型的精简版 是一种 中等压缩的量化方式
4-bit 精度类型 每个参数只用4位表示 参数值范围更小 精度最低,但节省显存最多
BitsAndBytes 工具 把模型压成 4bit/8bit 工具 bnb-4bit 就是它压的 实现量化的工具库
bnb-4bit 文件/模型后缀 使用 BitsAndBytes 做的 4-bit 模型 llama-2-7b-bnb-4bit 是 4-bit 的一种具体实现方式

📌 举个通俗场景类比

想象你有一本书:

格式 类比
FP32 原版硬皮精装书
FP16 纸质平装版
bnb-8bit 黑白复印本
bnb-4bit 缩印+删图版手册

你还能看懂它在讲啥,但体积轻多了。


✅ 如果你在开发中怎么选?

你拥有的资源 推荐格式 使用方式
显卡很强(A100/4090) FP16 或 FP32 不用压缩,保持最佳精度
显卡一般(8GB) bnb-4bit 用 BitsAndBytes 量化运行
CPU 推理 GGUF+CPU 模式 用 llama.cpp 加载 .gguf

🧠 一句话总结:

FP32、FP16、8bit、4bit 都是表示数字的格式 ,表示的越精细,占用的空间越大。

压缩后模型运行更快、显存占用更小,但精度也会降低。


📦 它们的关系(由高到低精度):

格式 全称 精度(位) 精度高吗? 显存占用 举例
FP32 Float 32位 32-bit ⭐⭐⭐⭐⭐ 🟥最大 0.1234567890123456(精确)
FP16 Float 16位 16-bit ⭐⭐⭐⭐☆ 🟧中等 0.1234(舍去一部分小数)
8bit 整数8位 8-bit ⭐⭐☆☆☆ 🟨小 0.12(小数更少)
4bit 整数4位 4-bit ⭐☆☆☆☆ 🟩最小 0.1(最粗略的近似)

💬 用比喻来说:

格式 类比成衣服定制
FP32 高级西装,按厘米剪裁(超精准)
FP16 成衣店西装,按大中小分尺码(较精准)
8bit 淘宝快时尚,按身高估尺码(能穿)
4bit 地摊衣服,只分男女(凑合能穿)

🔢 用数字实际表示的范围与精度

假设你要保存数字 0.123456789

格式 实际能保存成啥
FP32 0.123456789 (全部保留)
FP16 0.1235(只保留4位有效)
8bit 0.12(可能只有两位有效)
4bit 0.1(基本靠近大概意思)

🧪 举个真实例子:加载 LLaMA2-7B 模型

格式 模型大小 显存要求 精度变化 是否可训练
FP32 14GB+ 28~32GB 无损 ✅ 可训练
FP16 ~13GB 14~16GB 几乎无损 ✅ 可训练
8bit ~8GB 8~9GB 有些误差 ❌ 通常只推理
4bit ~4.2GB 5~6GB 精度损失多 ❌ 通常只推理

🔧 技术区别

格式 类型 是否浮点 描述
FP32 浮点数 ✅ 是 32位浮点,训练 & 推理标准格式
FP16 浮点数 ✅ 是 用一半的位表示 float
8bit 整数/量化 ❌ 否 一般用于推理(int8)
4bit 整数/量化 ❌ 否 极致压缩,用于推理(int4)

✅ 什么时候用哪个?

你有的显存/算力 推荐格式 原因
>= 32GB 显存 FP32 最高精度,适合训练
>= 16GB 显存 FP16 精度接近 FP32,适合训练和推理
>= 8GB 显存 8bit 可跑大模型推理,损失精度较少
>= 4GB 显存 4bit 极限压缩,仅用于推理,速度快

🧠 总结一句话:

想省资源用 4bit 或 8bit,

想高精度用 FP16 或 FP32,

模型越小、速度越快,精度也会越低。


相关推荐
SLAM必须dunk6 分钟前
DL___线性神经网络
人工智能·深度学习·神经网络
甜辣uu24 分钟前
第七届人工智能技术与应用国际学术会议
人工智能·ei会议·中文核心·国际学术会议
艾立泰智能包装26 分钟前
艾立泰智能物流载具管理方案
大数据·人工智能
舒一笑34 分钟前
基础RAG实现,最佳入门选择(五)
人工智能
爱看科技39 分钟前
谷歌Gemini 2.5全系领跑AI赛道,微美全息加码构建AI+多模态交互生态新范式
人工智能
love530love42 分钟前
Python 开发环境全栈隔离架构:从 Anaconda 到 PyCharm 的四级防护体系
运维·ide·人工智能·windows·python·架构·pycharm
m0_751336391 小时前
机器学习赋能多尺度材料模拟:前沿技术会议邀您共探
人工智能·深度学习·机器学习·第一性原理·分子动力学·vasp·复合材料
一休哥助手2 小时前
稳定币:从支付工具到金融基础设施的技术演进与全球竞争新格局
人工智能·金融
泡芙萝莉酱2 小时前
2011-2023年 省级-数字普惠金融指数-社科经管实证数据
大数据·人工智能·深度学习·数据挖掘·数据分析·数据统计·实证数据
点云SLAM2 小时前
PyTorch 中Tensor常用数据结构(int, list, numpy array等)互相转换和实战示例
数据结构·人工智能·pytorch·算法·list·numpy·tensor