8B 参数只要 1.15GB!1-bit 大模型 Bonsai 在手机上跑到 44 tokens/s 的技术原理全解析
2026 年 3 月 31 日,加州理工学院孵化的 PrismML 实验室开源了 1-bit Bonsai 系列大模型。旗舰模型 Bonsai 8B 拥有 82 亿参数,但只占 1.15GB 内存——比同规模 FP16 模型小 14 倍,在 iPhone 上跑到了 44 tokens/s。这不是传统的「训练完再压缩」,而是从头用 1-bit 权重训练出来的原生极限量化模型。本文深入解析 1-bit 大模型背后的数学原理、工程实现和实际性能,帮你理解端侧 AI 的下一个突破口。
一、为什么 1-bit 大模型突然火了?
过去一周,AI 圈发生了几件大事:OpenAI 完成了 1220 亿美元的史上最大融资,Claude Code 源码意外泄露,而在这些头条新闻之下,一个更具技术颠覆性的事件悄然发生——PrismML 开源了世界上第一个真正的端到端 1-bit 大语言模型。
为什么说「真正的」?因为之前的所谓「1-bit 模型」大多是训练后量化(Post-Training Quantization, PTQ)的产物——先用 FP16 训练一个正常模型,再把权重压缩到低比特。这种方式不可避免地会损失精度。
Bonsai 不同。它的每一个权重从训练的第一步开始就是 {+1, -1},没有任何高精度的「补丁」。这意味着:
- 推理时不需要反量化:传统量化模型在推理时需要把低比特权重还原为浮点数再计算,Bonsai 直接用整数运算
- 内存占用是理论最小值:1 bit per weight,没有额外的 scale factor 开销
- 能耗大幅降低:整数乘法比浮点乘法省 5 倍以上的能量
来看一组数据:
| 模型 | 参数量 | 内存占用 | iPhone 推理速度 | 基准测试均分 |
|---|---|---|---|---|
| Llama 3.1 8B (FP16) | 8B | 16.38 GB | 无法运行 | 72.1 |
| Llama 3.1 8B (4-bit GPTQ) | 8B | ~4.5 GB | ~8 tok/s | 68.3 |
| Bonsai 8B (1-bit) | 8.2B | 1.15 GB | 44 tok/s | 70.5 |
| Bonsai 4B (1-bit) | 4B | 0.5 GB | 60 tok/s | 63.2 |
| Bonsai 1.7B (1-bit) | 1.7B | 0.24 GB | 90+ tok/s | 55.8 |
注意 Bonsai 8B 的基准测试均分是 70.5,而 FP16 的 Llama 3.1 8B 是 72.1——差距只有 1.6 分,但内存占用小了 14 倍。这个性价比是前所未有的。
二、从 32-bit 到 1-bit:量化技术的演进之路
要理解 1-bit 模型为什么是突破性的,我们需要先回顾量化技术的发展历程。
2.1 量化的本质:用更少的比特表示数字
神经网络的权重本质上是一堆浮点数。FP32 用 32 位表示一个数,FP16 用 16 位,INT8 用 8 位。比特数越少,能表示的数值范围和精度就越低,但存储和计算成本也越低。
量化就是在「精度损失」和「效率提升」之间找平衡。
2.2 三代量化技术
第一代:训练后量化(PTQ)
最简单粗暴的方式——训练完一个 FP16 模型,然后把权重映射到低比特:
# 最简单的 PTQ:均匀量化
def quantize_uniform(weights, n_bits=8):
w_min, w_max = weights.min(), weights.max()
scale = (w_max - w_min) / (2**n_bits - 1)
zero_point = round(-w_min / scale)
quantized = torch.round(weights / scale + zero_point).clamp(0, 2**n_bits - 1)
return quantized, scale, zero_point
问题:8-bit PTQ 还行,4-bit 开始明显掉精度,2-bit 以下基本不可用。
第二代:量化感知训练(QAT)
在训练过程中模拟量化的效果,让模型「学会」在低精度下工作:
# QAT 的核心:Straight-Through Estimator (STE)
def quantize_ste(weights, n_bits=4):
# 前向传播:量化
scale = weights.abs().mean()
quantized = torch.sign(weights) * torch.round(weights.abs() / scale).clamp(0, 2**(n_bits-1) - 1) * scale
# 反向传播:直通估计器,梯度直接传过量化操作
# 这是 QAT 的关键——让梯度能够流过不可微的量化函数
return quantized # 梯度通过 STE 绕过量化步骤
QAT 比 PTQ 好很多,但仍然是「先有浮点模型,再适配低精度」的思路。
第三代:原生低比特训练(Native Low-Bit Training)
这就是 Bonsai 和 BitNet 的路线——从第一步开始就用低比特权重训练。不是「压缩」,而是「原生」。
2.3 为什么 1-bit 是一个质变?
从 8-bit 到 4-bit 到 2-bit,量化的收益是线性的——内存减半,速度提升一些。但到 1-bit,发生了质变:
矩阵乘法变成了加减法。
在标准的 Transformer 中,最耗时的操作是矩阵乘法 Y = X × W。当 W 的每个元素只有 +1 或 -1 时:
Y[i] = Σ X[j] × W[j]
= Σ X[j] × (+1 or -1)
= (X[j] where W[j]=+1 的求和) - (X[j] where W[j]=-1 的求和)
乘法消失了!只剩下加法和减法。这意味着:
- 不需要乘法器:可以用更简单的硬件
- 能耗降低 5-10 倍:加法比乘法省电得多
- 吞吐量大幅提升:同样的芯片面积可以放更多加法单元
三、Bonsai 的核心技术:如何训练一个不掉精度的 1-bit 模型
3.1 架构基础
Bonsai 8B 基于 Qwen3-4B 的 dense 架构进行扩展:
- 36 层 Transformer decoder blocks
- GQA(Grouped Query Attention):32 个 query heads,8 个 KV heads
- SwiGLU MLP 激活函数
- RoPE 位置编码
- RMSNorm 归一化
- 32,768 tokens 上下文长度
- 151,936 词表大小
关键区别在于:所有线性层的权重(embedding、attention projections、MLP projections、LM head)都是 1-bit 的。
3.2 训练方法:Shadow Weights + STE
1-bit 训练的核心挑战是:量化函数 sign(x) 是不可微的——梯度要么是 0,要么是无穷大。没有梯度,就没法用反向传播训练。
Bonsai 使用的方法源自 BitNet b1.58 的思路,核心是 Shadow Weights(影子权重):
class BitLinear(nn.Module):
def __init__(self, in_features, out_features):
super().__init__()
# 影子权重:全精度,用于梯度更新
self.shadow_weight = nn.Parameter(torch.randn(out_features, in_features))
# 缩放因子
self.scale = nn.Parameter(torch.ones(1))
def forward(self, x):
# 前向传播:二值化
binary_weight = torch.sign(self.shadow_weight) # {-1, +1}
# 计算输出(加减法替代乘法)
output = F.linear(x, binary_weight) * self.scale
return output
def backward(self, grad_output):
# 反向传播:梯度直接传给 shadow_weight(STE)
# sign() 的梯度被近似为 1(在 [-1, 1] 范围内)
pass # PyTorch autograd 通过 STE 自动处理
训练过程中,模型维护两套权重:
- Shadow Weights(影子权重):全精度浮点数,接收梯度更新
- Binary Weights(二值权重):前向传播时从 shadow weights 通过
sign()函数生成
梯度通过 Straight-Through Estimator(STE)绕过不可微的 sign() 函数,直接更新 shadow weights。训练完成后,只保留 binary weights,shadow weights 被丢弃。
3.3 为什么 Bonsai 比之前的 1-bit 模型好?
之前的 BitNet b1.58 使用三值权重 {-1, 0, +1}(严格来说是 1.58 bit),而 Bonsai 是纯二值 {-1, +1}。更极端的量化,却取得了更好的效果。PrismML 的关键改进包括:
- 端到端 1-bit:不只是 attention 和 MLP,连 embedding 和 LM head 也是 1-bit 的。之前的方法通常会保留这些层的高精度
- Group-wise Scaling:每 128 个权重共享一个缩放因子(group size = 128),在极限压缩和精度之间找到了更好的平衡点
- 自定义反量化内核:GGUF Q1_0_g128 格式,推理时直接在低比特上计算,不需要先还原为 FP16
四、Google TurboQuant:另一个维度的压缩突破
就在 Bonsai 发布的同一周,Google Research 也发布了 TurboQuant——一个针对 KV Cache 的极限压缩算法。虽然目标不同(Bonsai 压缩权重,TurboQuant 压缩 KV Cache),但它们共同指向了同一个趋势:AI 推理的瓶颈正在从算力转向内存。
4.1 KV Cache 是什么?为什么它是瓶颈?
Transformer 模型在生成每个新 token 时,需要「回顾」之前所有 token 的信息。KV Cache 就是把之前计算过的 Key 和 Value 向量缓存起来,避免重复计算。
问题在于:KV Cache 的大小随序列长度线性增长。对于一个 8B 模型处理 32K 上下文:
KV Cache 大小 = 2 × 层数 × 头数 × 序列长度 × 头维度 × 字节数
= 2 × 36 × 8 × 32768 × 128 × 2 (FP16)
≈ 9.6 GB
模型权重才 16GB,KV Cache 就要 9.6GB——在长上下文场景下,KV Cache 比模型本身还大。
4.2 TurboQuant 的核心思路
TurboQuant 把 KV Cache 从 FP16(16 bit)压缩到 3 bit,实现了 6 倍压缩,且零精度损失。它的方法分两步:
第一步:PolarQuant——极坐标变换
传统量化在笛卡尔坐标系下工作,需要为每个数据块存储 scale 和 zero_point 等量化常数,这些常数本身就占用额外的比特。
PolarQuant 把向量从笛卡尔坐标转换为极坐标:
# 概念示意(非实际实现)
def polar_transform(vector):
# 笛卡尔坐标 (x1, x2, ..., xn) → 极坐标 (r, θ1, θ2, ..., θn-1)
radius = torch.norm(vector)
angles = compute_angles(vector) # 递归计算角度
# 角度的分布是已知的、集中的
# 不需要额外的归一化常数
return radius, angles
关键洞察:在极坐标下,角度的分布是已知的、高度集中的。这意味着不需要存储额外的归一化常数——量化的「隐藏开销」被消除了。
第二步:QJL——1-bit 残差校正
PolarQuant 完成主要压缩后,剩余的误差用 QJL(Quantized Johnson-Lindenstrauss)算法处理。QJL 只用 1 bit 就能消除量化偏差,实现零精度损失。
| 方法 | KV Cache 比特数 | 内存压缩比 | 精度损失 | 需要微调? |
|---|---|---|---|---|
| 原始 FP16 | 16 bit | 1x | 0 | - |
| KIVI (baseline) | 4 bit | 4x | 轻微 | 否 |
| PolarQuant | 3 bit | 5.3x | 极小 | 否 |
| TurboQuant | 3 bit | 6x | 零 | 否 |
五、端侧部署实战:如何在你的设备上跑 Bonsai
5.1 支持的平台和格式
Bonsai 提供了两种格式:
- GGUF Q1_0_g128:支持 CUDA(RTX 显卡)、Metal(Mac)、Android、CPU
- MLX 1-bit g128:专为 Apple Silicon 优化
5.2 在 Mac 上用 MLX 运行
# 安装 PrismML 的 MLX fork
pip install mlx-lm-prism
# 下载并运行 Bonsai 8B
python -m mlx_lm.generate \
--model prism-ml/Bonsai-8B-mlx-1bit \
--prompt "Explain the concept of attention in transformers" \
--max-tokens 512
在 M4 Pro 上,Bonsai 8B 的推理速度约为 35-40 tok/s,Bonsai 4B 约为 60 tok/s。
5.3 在 CUDA 设备上用 llama.cpp 运行
# 使用 PrismML 的 llama.cpp fork(支持 1-bit 内核)
git clone https://github.com/prism-ml/llama.cpp-1bit
cd llama.cpp-1bit
make LLAMA_CUDA=1
# 运行
./main -m Bonsai-8B-Q1_0_g128.gguf \
-p "Write a Python function to sort a list" \
-n 256
在 RTX 4090 上,Bonsai 8B 比 FP16 版本快 6.2 倍。
5.4 踩坑经验
我在实际部署中遇到了几个问题:
- 标准 llama.cpp 不支持 Q1_0 格式:必须用 PrismML 的 fork,它包含了自定义的 1-bit 反量化内核
- MLX 版本需要特定的 fork:标准 MLX 同样不支持 1-bit,需要 PrismML 的 mlx-swift fork
- 首次加载较慢:1-bit 模型的权重解包需要一些初始化时间,但后续推理很快
- 长上下文性能下降:虽然支持 32K 上下文,但超过 8K 后速度会明显下降,因为 KV Cache 仍然是高精度的
六、1-bit 模型的局限性和适用场景
6.1 不适合的场景
1-bit 模型不是万能的。以下场景建议还是用高精度模型:
- 需要极高精度的数学推理:1-bit 在复杂数学问题上的表现仍有差距
- 长文档摘要:长上下文场景下 KV Cache 仍是瓶颈
- 多语言翻译:低比特量化对低资源语言的影响更大
6.2 最适合的场景
- 端侧实时对话:手机、平板上的本地 AI 助手
- 边缘计算:IoT 设备、机器人、嵌入式系统
- 隐私敏感应用:数据不出设备,本地推理
- 高并发服务:同样的 GPU 内存可以服务 14 倍的并发请求
- 实时 Agent:需要低延迟响应的 AI Agent 场景
6.3 混合部署策略
我在实际项目中采用的策略是「分层部署」:
用户请求 → 路由层判断复杂度
├── 简单查询(闲聊、FAQ)→ 端侧 Bonsai 1.7B(0.24GB,本地推理)
├── 中等任务(代码补全、摘要)→ 端侧 Bonsai 8B(1.15GB,本地推理)
└── 复杂任务(长文分析、数学推理)→ 云端 GPT-5.4 / Claude Opus 4.6
这种策略可以把 80% 的请求在本地处理,只有 20% 需要调用云端 API,大幅降低成本和延迟。
七、2026 年端侧 AI 的技术全景
Bonsai 和 TurboQuant 不是孤立的事件,它们是 2026 年端侧 AI 爆发的缩影。让我们看看整个技术栈:
| 层级 | 技术 | 代表项目 | 状态 |
|---|---|---|---|
| 模型压缩 | 1-bit 原生训练 | Bonsai, BitNet | 已开源 |
| KV Cache 压缩 | 向量量化 | TurboQuant, PolarQuant | ICLR 2026 |
| 推理引擎 | 端侧优化 | llama.cpp, MLX, MLC-LLM | 成熟 |
| 硬件支持 | NPU / Neural Engine | Apple A18, Snapdragon X | 量产 |
| 模型蒸馏 | 大模型→小模型 | Apple-Google Gemini 协议 | 进行中 |
| 混合推理 | 端云协同 | 各厂商自研 | 早期 |
一个关键的技术洞察是:2026 年端侧 LLM 的性能瓶颈已经从算力(TOPS)转向了内存带宽。这就是为什么 1-bit 量化如此重要——它不只是减少了存储,更重要的是减少了内存搬运量,而内存搬运才是真正的瓶颈。
八、展望:1-bit 模型的未来
8.1 专用硬件的机会
当权重只有 +1 和 -1 时,矩阵乘法变成了加减法。这意味着我们可以设计专门的硬件——不需要浮点乘法器,只需要加法器和符号翻转电路。这种芯片的面积可以小 10 倍,能耗可以低 20 倍。
微软已经在研究 1-bit 专用芯片,预计 2027 年可能会有原型。
8.2 更大的 1-bit 模型
Bonsai 目前最大是 8B。但 1-bit 的内存效率意味着,一张消费级显卡(24GB)可以跑一个 170B 参数的 1-bit 模型——这在 FP16 下需要 340GB 内存,至少 4 张 A100。
如果 1-bit 训练方法能扩展到 100B+ 规模并保持精度,那将彻底改变 AI 的部署格局。
8.3 与 Agent 的结合
回到本文开头提到的 Claude Code 泄露事件——KAIROS 这样的永远在线 Agent 需要持续消耗算力。如果 Agent 的底层模型是 1-bit 的,运行成本可以降低一个数量级。想象一下:你的手机上运行着一个 1-bit Agent,24 小时待命,帮你监控邮件、整理日程、自动回复消息——而电池几乎感觉不到它的存在。
九、总结
1-bit 大模型不是一个噱头,而是一个正在发生的范式转移:
- 从「训练后压缩」到「原生低比特训练」:Bonsai 证明了 1-bit 权重可以从头训练出接近全精度的效果
- 从「算力瓶颈」到「内存瓶颈」:端侧 AI 的真正限制是内存带宽,1-bit 直接解决了这个问题
- 从「云端推理」到「端侧推理」:1.15GB 的 8B 模型可以在任何智能手机上运行
- 从「乘法计算」到「加减法计算」:为专用硬件打开了全新的设计空间
Google 的 TurboQuant 从 KV Cache 压缩的角度补完了这个拼图——权重用 1-bit,KV Cache 用 3-bit,整个推理管线的内存占用可以降低 10 倍以上。
端侧 AI 的时代真的来了。不是「即将到来」,而是「已经到来」。
如果你对端侧 AI 部署感兴趣,欢迎点赞收藏。有任何部署上的问题,评论区见。
参考来源:
- PrismML Official: Bonsai 8B Model Card (Hugging Face)
- KuCoin News: Caltech Open-Sources 1-bit Bonsai Model
- Google Research Blog: TurboQuant - Redefining AI Efficiency with Extreme Compression
- arXiv: All Large Language Models are in 1.58 Bits (BitNet b1.58)
- arXiv: TernaryLM - Memory-Efficient Language Modeling via Native 1-Bit Quantization
- Yahoo Finance: PrismML Launches World's First 1-Bit AI Model
- Edge AI Vision: On-Device LLMs in 2026
- Ars Technica: Google's TurboQuant AI-compression algorithm