BOLT:两方 MPC + BFV 的 Transformer 隐私推理
IEEE S&P 2024:用 MPC 与 HE 混合把 Transformer 推理通信降到 1/10.91,并修正 Iron 的 LayerNorm 化简错误。
0. 速览
一句话定位:BOLT 是一个半诚实两方(2PC)的 Transformer 隐私推理系统——服务器 P1 持有微调好的 BERT 权重,客户端 P2 持有输入;它把所有矩阵乘法推进 BFV 密文域(紧凑打包 + BSGS 降旋转 + 密文乘密文),只把非线性层留给 2-out-of-2 秘密共享 MPC,并借 HE 与 MPC 之间的转换顺带重置噪声,从而完全避开 bootstrapping。
这一定位的关键取舍是:HE 省通信但费计算,MPC 省计算但费通信(§2.3 原话即如此)。BOLT 假设算力会继续变便宜、网络带宽才是瓶颈,因此把成本尽量挪进计算侧;它优化的还是**整体(offline + online)**成本,而不是只压在线时间(§3 末尾明确说明)。
| 指标 | 数值 | 条件 | 出处 |
|---|---|---|---|
| 端到端通信 | 25.74 GB | BERT-base,m=128,12 层,含 W.E. | Tab. 3 |
| 对比 Iron | 280.99 GB → 10.91× | 同上 | Tab. 3 |
| 不含 W.E. | 59.61 GB,4.71× | 同上 | Tab. 3 |
| 端到端加速 | 4.8–9.5× | 5 种网络设置,含 W.E. | §7.5,Fig. 5 |
| 端到端加速 | 2.6–4.1× | 不含 W.E. | §7.5 |
| 通信轮数 | 10901 vs 13663(1.25×) | 含 W.E. | Tab. 3 |
| 精度 | 最大掉 1.18 个百分点(STS-B) | GLUE 四任务 | Tab. 2 |
| PC-MM 旋转数 | 756 → 43(17.58×) | Linear 1,m=128,d1=768,d2=64,n=8192 | Tab. 1 |
| BERT-base 超参 | m=128,d=768,H=12,L=12,110M 参数 | — | §2.2 |
| 安全参数 | 128-bit,semi-honest | BFV,n=8192 | §3,§7.1 |
一句话读法:BOLT 不是“更快的 MPC”,而是“把 MatMul 从 MPC 搬到 HE 之后,重新发现瓶颈落在非线性层”的那篇论文。
1. 问题与定位
1.1 为什么纯 MPC 做 Transformer 特别贵
先前的 PPML 系统(Gazelle、Delphi、Cheetah)优化的是 矩阵-向量乘法(matrix-vector),因为 CNN 的权重矩阵乘一个激活向量就够了。Transformer 不是这个形状(§1 贡献段、§4 开头):
- 矩阵-矩阵乘法才是主菜。BERT-base 每层至少 7 个 MatMul(Q/K/V 三个投影、Q·Kᵀ、Softmax·V、FFN 两级;按多头再展开还会更多);激活是
128×768,FFN 中间是128×3072。 - 2PC 下的 MatMul 用 Beaver triple,通信量随矩阵元素数 × 位宽增长;12 层叠起来就是数量级问题。
- 非线性同样贵:Iron 自报超过 75% 的总运行时间花在非线性层,因为它把 GELU/Softmax/Tanh 直接翻译成 MPC 里的三角函数、指数、LUT 协议(§5 开头)。
Iron 是 BOLT 之前的 SOTA,也是唯一完整覆盖标准 Transformer 推理的 2PC 系统。它的问题可以直接量化(Iron 未开源,BOLT 自行复现并经 Iron 作者确认,§7.1.4):
Iron 端到端:280.99 GB 通信,216 分钟(100 Mbps / 80 ms WAN),BERT-base 110M
单层通信(Tab. 3):Linear 1 4844 MB + Softmax×V 4918 MB + Softmax 3596 MB
+ GELU 7960 MB + LayerNorm 871 MB + 其余 ≈ 22449 MB按 Tab. 3 相加,Iron 单层约 22.45 GB,乘 12 层已约 269 GB,端到端 280.99 GB 自洽。其中 Softmax×V 的 4918 MB 是因为 Iron 用 MPC 做密文×密文矩阵乘法——这正是 BOLT 最想改的一处。
1.2 BOLT 的定位:只改“通信”这一项成本
BOLT 的论证链条是(§1 开头):算力可以被并行化和硬件加速(文中引了多篇 FHE 硬件加速工作),但网络通信不会自动变快,所以要把通信当成首要优化目标。由此推出它的架构选择:
- 线性层 → 全部用 HE(连密文×密文也放 HE),因为 HE 在通信上便宜;
- 非线性层 → 全部用 MPC 秘密共享,因为 HE 做复杂非线性要么深度爆炸要么只能查表;
- 两者之间做 HE 与 MPC 的转换,顺便把 HE 噪声“洗掉”,不需要 bootstrapping(§3)。
一个容易被忽略的细节:BOLT 声明自己优化整体执行成本而非仅在线成本,理由是只压在线时间会引入额外的预计算、内存与存储开销(§3 引 [22])。这也是它和后续纯 HE 方案(在线几乎零通信、但离线/计算极重)在成本哲学上的分水岭。
1.3 四个贡献(按原文顺序)
原文 “Our contributions” 正式列的是三条 bullet,第四条是收尾的合并结果段;这里按四点列出,并注明这一点:
- 通信优化且计算高效的线性操作。用「密文-明文 MatMul 的另一种解读」实现紧凑打包(不再留空槽),再用 BSGS 把旋转从输入密文搬到部分和上(BERT-base 上旋转降 2.33×–9.33×),最后给出低乘法深度的密文-密文 MatMul(§4)。
- 准确且高效的非线性操作。GELU 用 4 阶多项式、Tanh 用 5 阶多项式(均带分段与对称性利用),Softmax 用无 LUT 的整数指数协议;再加 Motzkin 多项式预处理把 n 阶多项式的乘法数从 n−1 降到约 ⌈n/2⌉(§5)。
- 机器学习层优化。用 attention score 做 oblivious word elimination(不经意排序丢掉贡献小的 token,把 m 从 128 降到 64),以及 secure-computation-aware fine-tuning(把定点量化与近似函数放进训练前向),把精度损失压到约 1%(§6)。
- 系统级结果(原文收尾段,非 bullet):合并上述优化后通信降 10.91×、端到端快 4.8×–9.5×,代码开源(github.com/Clive2312/BOLT)。
判断:第 1 条是论文的“硬贡献”(可被后续工作当基线逐项对比),第 2、3 条是“让第 1 条可用”的必要条件——如果非线性精度崩了,通信再低也没有意义。Iron 的 LayerNorm bug 恰好说明:在隐私推理里,一个代数上正确的化简可能因为破坏了模型结构而彻底失效。
2. 方法解剖
2.1 两方架构与威胁模型
- 角色:P1 = 服务器(持有模型权重与推理服务),P2 = 客户端(持有文本输入)。这是标准 MLaaS 的 2PC 化。
- 威胁模型:双方都是 semi-honest(honest-but-curious),会按协议执行但会从 transcript 里 passive 地挖信息(§3)。选 semi-honest 的理由原文给了两条:服务器提供的是服务,双方本来就得有一定信任;半诚实的性能才实际可用。
- 公开信息:模型架构、每层参数量与 scale、tokenization 都公开;tokenization 在私有微调时被冻结(因为 BERT 的 tokenizer 是在公开大语料上训的)。推理结果不隐藏,这是 ideal functionality 的一部分,需要的话可叠加差分隐私(§3)。
- 密码学底座:
- MPC:2-out-of-2 加法秘密共享,
x = ⟨x⟩1 + ⟨x⟩2 mod 2^ℓ,加法本地免费,乘法走 OT(§2.3)。 - HE:leveled BFV,明确不用 FHE,因为 bootstrap 仍然太贵(§2.3)。
- 数值:全定点。
y = ⌊x·2^s⌋ mod 2^ℓ,MPC 在Z_2^ℓ上、HE 在Z_p上,所以需要转换。
- MPC:2-out-of-2 加法秘密共享,
- 转换实际只做一个方向(§7.1.2):MPC → HE 这一步被省略,因为共享值溢出概率只有
|x|/2^ℓ,在ℓ=37且数值不大时可忽略;实现里因此只保留 HE → MPC 的转换。为降误差,GELU 结果先由 21 bit 扩到 37 bit 再转。每次转换的代价约为一次比较加一次 MUX。
2.2 线性层:把 MatMul 全部塞进 BFV
2.2.1 紧凑打包(§4.1.1)
设 C = A × B,A ∈ Z_p^{m×d1} 是密文、B ∈ Z_p^{d1×d2} 是明文。BOLT 的关键观察不是“内积”,而是按列看:
C 的第 j 列 = Σ_i B[i,j] · A 的第 i 列也就是 C 的每一列都是 A 的列的线性组合,系数是 B 的标量。于是:
- A 按列打包(一列 m 个元素放进一个密文,m 恰好是 BERT 的 token 长度 128,而 BFV 的 n 是 2 的幂,槽位利用率高);
- B 沿用 Gazelle 的对角打包,但把每个
b_ij重复 m 次,这样一次 SIMD 乘法就能让 A 的一整列乘上同一个标量; - 输出 C 天然是按列打包的,槽位全满——“perfectly compact output packing”。
对比之下:Gazelle 要把 d=768 pad 到 1024(浪费 25% 槽位),Iron 的系数打包虽然免了旋转,但结果非常稀疏,大部分系数是废的,通信反而更大(App. A)。Tab. 1 给出同一组维度下的硬数字(m=128,d1=768,d2=64,n=8192):
| 方案 | #Mult | #Rot | #Ct |
|---|---|---|---|
| Gazelle | 98304 | 96768 | 1664 |
| Iron | 768 | 0 | 56 |
| BOLT 无 BSGS | 768 | 756 | 13 |
| BOLT 有 BSGS | 768 | 43 | 13 |
读表要点:Iron 的旋转是 0,但密文数 56 vs BOLT 的 13——Iron 用“更多密文”换“零旋转”,在带宽受限时这笔交易亏了。这也是 BOLT 全文“以通信换计算”的缩影。
2.2.2 BSGS:把旋转从输入搬到部分和(§4.1.2)
紧凑打包带来一个新问题:一个密文里塞了多列,部分和会落在同一个密文的槽位里,必须旋转求和,直接做是 O(d1) 次旋转(d1=768 时量级就是数百次)。
BOLT 把 baby-step giant-step 从矩阵-向量推广到矩阵-矩阵:
- 把 d1 个列分成 baby-step 与 giant-step 两组;
- 输入密文只旋转少数几次,其余旋转作用在部分和(partial sums)上;
- 当右侧明文矩阵是 tall-and-skinny(d1 大、d2 小)时,还能在行方向做额外部分和,这是矩阵-向量场景没有的机会。
原文的例子:输入密文只转 2 次,总旋转数从 6 降到 3。整体上 BERT-base 旋转降 2.33×–9.33×(§1),单头 attention 维度下 756 → 43(17.58×)(Tab. 1,§4.1.2)。App. F 的 Tab. 5 给了全模型四层线性层的具体数:
Linear 1 Linear 2 Linear 3 Linear 4
w/o BSGS 756 756 756 3024
w/ BSGS 288 168 324 324注意 Linear 4(128×3072 → 128×768)省得最多(9.33×),而 Linear 3 只有 2.33×——增益强烈依赖矩阵形状与 d1 的因子分解,没有一个对所有层一致的常数。
2.2.3 密文×密文:2D 旋转为什么做不了,以及绕法(§4.1.3)
Transformer 里有两个 MatMul 两边都是密文:Q·Kᵀ 与 Softmax·V。BOLT 坚持用 HE 做(Iron 用 MPC),代价是要在 BFV 里处理两种打包:
- 列打包 × 行打包(
Q·Kᵀ):用外积视角C = Σ_i A_i ⊗ B_i,直接乘得到的是 C 的对角线;要凑出其他对角线,需要在 B 的行内旋转——对 BERT-base attention 就是 128×64 的 2D 旋转。 - 对角打包 × 列打包(
Softmax·V):左矩阵是方阵,右矩阵按列,需要另一种重排。
BFV 为什么做不了 2D 旋转(原文的关键一句):BFV 的旋转是 NTT 空间里的 Galois 自同构,只能按“根的单位幂次”转;真正二维的(行内 + 列间同时转)旋转不被支持——原文甚至说,对 n=8192 是否能找到 orders 64 与 128、且能张成整个空间的生成元,尚不清楚(p. 4758)。
绕法:用部分旋转 + 位掩码拼出 2D 旋转。原文例子把 2×4 矩阵压成 8 维向量,左移一列 = “整体左移 1”与“整体右移 3”两个密文分别乘掩码 ⟨1,1,1,0,1,1,1,0⟩ 与 ⟨0,0,0,1,0,0,0,1⟩ 再相加。掩码乘法会增加乘法深度(原本 depth 4),BOLT 把“修正旋转的掩码”和“紧凑输出的掩码”合并,把深度从 4 压到 3(原文说最优是 2),用更多乘法/旋转换更小的 BFV 参数。第二种打包同理:不 repack(否则 RHS 会膨胀 128×),而是 mask + rotation + addition 就地重排 LHS。
收益直接体现在 Tab. 3:Linear 1 从 4844.14 MB 降到 7.06 MB(686.1×),Softmax×V 从 4918.38 MB 降到 9.88 MB(497.6×)——这是相对倍数最大的两处单点改进(不含 W.E. 口径)。
2.3 非线性层:精度是被“设计”出来的(§5)
非线性层是 BOLT 的第二战场。它的总体套路是:利用函数自身的线性尾部 + 对称性把逼近区间砍半,再用 Remez 找 minimax 系数,最后用 Motzkin 预处理把乘法数砍半。
Motzkin 预处理(§5.1,App. B):Horner 法求 n 阶多项式要 n−1 次乘法;当系数公开已知(推理场景必然如此)时,Motzkin 可把它重构成约 ⌈n/2⌉ 次乘法。具体到本文:4 阶只需 2 次秘密共享乘法,5 阶只需 3 次。
GELU(§5.2):4 阶、三段式。
ApproxGELU(x) = x if x > 2.7
= a|x|⁴ + b|x|³ + c|x|² + d|x| + e + 0.5x if |x| ≤ 2.7
= 0 if x < −2.7三个设计点值得记:
- 线性尾部:
lim GELU(x) = x(正无穷)、= 0(负无穷),所以只有[−2.7, 2.7]需要逼近,这已足够保证1×10⁻³的平均绝对误差。 - 对称性:
g(x) = x·erf(x/√2)是偶函数,只需逼近正半轴。 - 逼近
x·erf(x)而不是erf(x):这是相对 I-BERT 的关键改动。若按 I-BERT 先逼近erf(|x|)再乘 x,Motzkin 预处理就吃不满(乘法数不是最优);直接逼近乘积项才能拿到 2 次乘法。 - 系数用 Remez(迭代最小化最大偏差)而非 I-BERT 的网格搜索插值。
精度:平均 ULP 误差 4(scale 12),对应浮点误差 9.77×10⁻⁴,区间 [−5, 5]。实现上还省了一次比较:只需判断 b = |x| 大于 2.7,输出 b ? RELU(x) : GELUP1(x),其中 RELU(x) = (|x| + x) >> 1。
Tanh(§5.3):5 阶、三段、断点 2.855,奇对称所以只需 2 次比较,Motzkin 后 3 次乘法。精度 ULP 27,对应 6.59×10⁻³。Tanh 只用在 pooler/classifier,不在 12 层主干里,所以精度要求可以松一档。
Softmax(§5.4):完全不用 LUT(Iron 用 SIRNN 的 LUT,输入位长长时通信爆炸)。协议分三步:
1) 减最大值:x̃ = x − x_max,全部变非正
2) 分解:x̃ = (−ln2)·z + p,z 为非负整数,p ∈ (−ln2, 0]
3) 小范围多项式:exp(p) ≈ 0.3585·(p + 1.353)² + 0.344
然后 exp(x̃) = exp(p) >> z细节:z 是秘密共享值,所以“右移 z 位”要用一串 MUX 实现;由于 exp(p) ∈ (0, 0.7),可以安全地把 z clip 到 [0, s+1];p 的范围小,位宽还能再砍 s+2。精度 ULP 0.0059,对应 1×10⁻⁶,输入区间 [−1000, −0.001]。倒数只在 d 维上调用,直接复用 SIRNN 的 secure reciprocal。
LayerNorm:BOLT 没有沿用 Iron 的融合化简(见 2.4),而是在 MPC 里算 μ、σ,把与 γ/β 的乘法搬进 HE,并预计算 X − μ 的 MSB 来降低后续乘法的通信(§7.1.3)。这是“结构正确优先于省一次乘法”的直接体现。
转换开销:HE 与 MPC 之间的转换约占端到端运行时间的 2%–9%(§7.5.3);若要用“正确截断”进一步降误差,转换成本翻倍,约 3%–7% 的性能代价。
2.4 ML 优化:修正 Iron 的 LayerNorm 错误(§6、§7.1.4、App. G)
这是全文最值得单独记的一段,因为它是**“代数正确但结构错误”**的教科书案例。
Iron 做了什么:LayerNorm 是
LayerNorm(X)[i,j] = γ_j·(X[i,j] − μ_i)/σ_i + β_jIron 为了省一次矩阵乘法,把 γ_j/σ_i 与 β_j 融进下一层线性层的权重里,于是 LayerNorm 的输出被化简成 LayerNorm′(X)[i,j] = X[i,j] − μ_i。单看这一层的代数,完全等价。
错在哪:Transformer 有残差连接——LayerNorm 的输出会与残差分支相加,而残差分支加的是未经 γ/σ 缩放的张量。一旦把缩放折进下一层,残差路径上的数值就全错了,误差逐层累积,模型表现接近随机猜测。BOLT 原文明确写了这一点,并说明已与 Iron 作者确认(§7.1.4、App. G)。
BOLT 怎么改:不是“修 Iron 的融合”,而是直接移除该优化,保留 γ/β 的显式乘法,然后用两个工程手段把成本补回来:
- 把与模型权重 γ、β 的乘法移到 HE 里做(密文-明文乘,通信便宜);
- 预计算
X − μ的 MSB,省掉后续求符号/绝对值的通信。
效果:LayerNorm 单层通信从 871.46 MB 降到 290.55 MB(3.0×,Tab. 3,含 W.E.),轮数基本不变(218 → 220)。
fine-tuning(§6.2):定点表示会在浮点模型与定点推理之间造成 gap,BOLT 用量化感知微调补:
- 对称、静态量化;前向传播时直接用近似函数(GELU/Softmax/Tanh 全部换成 §5 的版本)再量化;
- 反向传播时“算真实梯度、再把梯度量化”(因为量化不可微);
- 把 word elimination 放进训练前向,让动态丢 token 也能被反传覆盖;
- 不做蒸馏。原文对比 MPCFormer:蒸馏在小数据集(如 RTE)会掉 5% 以上,而 BOLT 的精度下降约 1%。
word elimination(§6.1):用 Q·Kᵀ ∈ R^{m×m} 沿一个轴求和得到 score 向量 s,用 bitonic sort 求中位数,再用第二轮 bitonic sort 把低于中位数的 token 换到后面并同步 swap X 与 Att 的行——即“oblivious 地丢掉一半 token”。m 从 128 降到 64,多数组件通信约 2×,Softmax 因为输入是 m×m 而降到 3.2×。
精度结果(Tab. 2,GLUE):
| 数据集 | 浮点明文 | Iron | BOLT 无 W.E. | BOLT 有 W.E. |
|---|---|---|---|---|
| MRPC(F1) | 90.00 ± 0.23 | 89.87 | 90.53 | 89.95 |
| RTE(Acc) | 69.70 ± 1.50 | 70.76 | 69.68 | 69.31 |
| SST-2(Acc) | 92.36 ± 0.59 | 92.77 | 91.74 | 92.78 |
| STS-B(Pearson) | 89.62 ± 0.31 | 89.41 | 87.97 | 88.44 |
最大损失出现在 STS-B:89.62 → 88.44,即 1.18 个百分点(原文称 “maximum accuracy loss of 1.3%”)。另一个反常点:无 W.E. 的 SST-2 反而比有 W.E. 低 1.04%,作者归因于定点到素域转换的近似(§7.3),并说加“正确截断”可解,代价是 3%–7% 性能。
2.5 系统实现与评测设置(§7.1–§7.2)
- 库:EzPC 的 SCI(ring secret sharing)+ SEAL(BFV)。
- 参数:秘密共享
ℓ=37、s=12(Softmax/LayerNorm);GELU 用ℓ=21、s=11。HE 统一n=8192;Linear 1 与 Softmax×V 需要更大噪声预算,取log p ≈ 29、log q ≈ 218;其余线性层log p ≈ 19、log q ≈ 180;128-bit 安全;服务器做 noise flooding 保证 circuit privacy;实现上用 lazy relinearization 与 modulus switching 降通信。 - 硬件/网络:两台 AWS c6i.16xlarge(64 vCPU、128 GB),32 线程;用 Linux tc 模拟 LAN(3 Gbps、0.8 ms)与四组 WAN(100/200 Mbps × 40/80 ms)。
- 数据集:GLUE 的 MRPC、RTE、SST-2、STS-B;在训练集微调、官方验证集评测。
- Iron 基线:自行实现,配置
ℓ=37、s=12、n=8192、log q ≈ 180、log p=37(为 noise flooding 留更大 p,因为 Iron 没做 secure-computation-aware fine-tuning)。
3. 关键数字表
| 指标 | 数值 | 条件 | 出处 |
|---|---|---|---|
| 端到端通信(BOLT) | 25.74 GB | 含 W.E.,m=128,12 层 | Tab. 3 |
| 端到端通信(Iron) | 280.99 GB | 同上 | Tab. 3 |
| 通信降幅 | 10.91× | 25.74 vs 280.99 | Tab. 3,摘要 |
| 无 W.E. 通信 | 59.61 GB,4.71× | 同上 | Tab. 3 |
| 线性层单层通信 | 4844.14 → 3.18 MB(1524.7×) | Linear 1,含 W.E. | Tab. 3 |
| Softmax×V 单层 | 4918.38 → 2.82 MB(1741.6×) | 含 W.E. | Tab. 3 |
| GELU 单层 | 7960.00 → 776.84 MB(10.2×) | 含 W.E. | Tab. 3 |
| LayerNorm 单层 | 871.46 → 290.55 MB(3.0×) | 含 W.E. | Tab. 3 |
| 通信轮数 | 13663 → 10901(1.25×) | 端到端 | Tab. 3 |
| 端到端加速 | 4.8–9.5× | 含 W.E.,5 种网络 | §7.5,Fig. 5 |
| 端到端加速 | 2.6–4.1× | 不含 W.E. | §7.5 |
| 端到端秒数(LAN) | Iron 475 s,BOLT 185 s / 91 s | 3 Gbps,0.8 ms | Fig. 5 |
| 端到端秒数(WAN 100/80) | Iron 12996 s,BOLT 3139 s / 1744 s | 100 Mbps,80 ms | Fig. 5 |
| 端到端秒数(WAN 100/40) | Iron 12759 s,BOLT 2855 s / 1343 s | 100 Mbps,40 ms | Fig. 5 |
| 旋转数(单头) | 756 → 43(17.58×) | m=128,d1=768,d2=64,n=8192 | Tab. 1 |
| 旋转降幅(全模型) | 2.33×–9.33× | BERT-base | §1,App. F |
| 精度(SST-2) | 92.78 vs 浮点 92.36 | 含 W.E. | Tab. 2 |
| 精度(STS-B) | 88.44 vs 浮点 89.62(−1.18 pp) | 含 W.E. | Tab. 2 |
| GELU 逼近误差 | ULP 4,9.77×10⁻⁴ | s=12,区间 [−5, 5] | §5.2 |
| Tanh 逼近误差 | ULP 27,6.59×10⁻³ | s=12,区间 [−5, 5] | §5.3 |
| exp 逼近误差 | ULP 0.0059,1×10⁻⁶ | s=12,区间 [−1000, −0.001] | §5.4 |
| BERT-base | 110M 参数,m=128,d=768,H=12,L=12,d′=64 | — | §1,§2.2 |
| 25 Gbps 极端网络 | 1.50×(无 W.E.)/ 2.63×(有 W.E.) | 25 Gbps,0.3 ms | §9 |
两个由表派生的观察(本文计算,非原文数字):
- 非线性已成绝对大头。含 W.E. 时单层通信约
3.18+2.82+2.26+4.50+6.77+450.74+776.84+290.55+16.64 ≈ 1554 MB,其中 Softmax+GELU+LayerNorm+Tanh 约 1534.77 MB(≈98.7%)。BOLT 把单层线性层合计压到约 19.5 MB 之后,端到端账单几乎全是 MPC 非线性——这正好解释了 THOR/NEXUS 为什么要从纯 HE 侧反攻。 - 轮数只降 1.25×。10901 轮在 80 ms RTT 下,若完全串行约 872 s,而实测 100 Mbps/80 ms 是 1744 s——说明轮数至少是同一量级的重要成本项,且 BOLT 并没有真正解决它(它的优化目标是带宽,不是延迟)。
4. 与同系列论文的关系
与综述(./01-隐私保护Transformer推理综述.mdx)
综述按 setup(运行结构) 把私有 Transformer 推理分成三类:全 2PC(Iron 等)、2PC+HE 混合(BOLT、BumbleBee)、纯 HE(NEXUS/THE-X/THOR)。BOLT 是混合路线的锚点,它的数字正好夹在两端:
Iron 280.99 GB / 475 s ← 纯 MPC(LAN)
BOLT 25.74 GB / 185 s ← 2PC + BFV 混合(LAN)
NEXUS 0.16 GB / 1125 s ← 纯 HE(100 Mbps / 80 ms)读综述时应该把 BOLT 当作“成本换口袋”的中间态:通信比纯 MPC 低一个数量级,计算比纯 HE 低,但两头都不极致。它也是综述里“LayerNorm 化简陷阱”和“先切小区间再低阶逼近”这两个可复用技巧的出处。
与 THOR(./03-THOR-纯CKKS推理.mdx)
THOR 是纯 HE、非交互(客户端只在首尾参与)的方案,把 BOLT 当作主基线,宣称在同态矩阵乘法上 PC-MM 快 5.3×、CC-MM 快 9.7×–36×,BERT-base 128 token 单 GPU 端到端约 10 分钟。但要注意两点,否则会误读:
- THOR 的“快 5.3×/36×”是密钥切换/旋转次数层面的算法级对比,不是含 MPC 非线性的端到端墙钟;BOLT 的 25.74 GB 是整网含非线性的通信。
- THOR 自己承认一层里约 56% 的时间是 bootstrapping——这正是 BOLT 用 MPC 做非线性、用转换重置噪声所回避的成本。
两者是“同一枚硬币的两面”:BOLT 把非线性留在 MPC 换来低计算,THOR 把一切留在 HE 换来零交互,代价是 bootstrap。THOR 笔记里那张 key-switch 表(Q/K/V:THOR 192 vs BOLT 297;Q·Kᵀ:460 vs 24468;αV:492 vs 21420;输出投影:122 vs 177)说明 BOLT 的 HE MatMul 仍以旋转/密钥切换计费,而 THOR 的 DiagBlock + BSGS 继续把这块往下压。
与 Odin(./04-Odin-THEMIS-LLM同态推理.mdx)
Odin 指向的是另一条路线:FHE LLM(arXiv 2609.12378 的 THEMIS,开源 Llama-3-8B 端到端 CKKS 实现,GPU 加速,只保护输入、不保护权重,服务端单方计算、客户端零交互)。它和 BOLT 的差别不是“快慢”,而是成本结构:
- BOLT 的 2PC 要求客户端在线参与每一层(否则拿不到秘密共享),这在 LLM 长上下文、多轮对话场景里是部署级障碍;
- FHE 路线把交互降到 0,但把成本全部压进同态计算(旋转、bootstrap、大参数),且目前公开的端到端实现只到 8B 级(THEMIS 跑的是 Llama-3-8B),再往上参数与计算都难以为继。
所以 BOLT 的价值在“BERT 级 encoder + 强隐私 + 可接受交互”的区间;一旦目标变成 LLM 生成式推理,它的 2PC 假设本身就是瓶颈,而不只是数字不够好。
5. 局限与可追问点
- 交互轮数没有实质改善(10901 vs 13663,仅 1.25×)。带宽降了 10.91×,但轮数几乎没动;在高 RTT 网络下这是硬地板。可追问:BOLT 的 round 是否可流水线化?非线性层的 647 轮/层能否批处理?
- 半诚实假设 + 无形式化安全证明。S&P 的 meta-review 明确把“没有 formal security proof,只论证由安全组件组合而成”列为 noteworthy concern(App. H)。恶意安全需要 HE 上的 ZK(MUSE 路线),作者自己说代价很高(§9)。
- 只做 encoder(BERT)。decoder 可直接套用但必须去掉 word elimination(§9);word elimination 对语义任务(尤其长句、需要全部 token 的任务)的影响论文只给了 4 个 GLUE 任务的结果,粒度偏粗。
- 非线性近似的精度代价被“平均 ULP”掩盖。ULP 是平均误差,最坏点误差未报告;GELU 在
|x|=2.7断点附近的连续性、Softmax 在zclip 边界的行为都没有单独分析。可追问:worst-case error bound 是多少? - 转换的溢出概率只是“可忽略”的论证,没有给出与任务精度挂钩的界;作者也承认无 W.E. 时 SST-2 掉 1.04% 就是转换近似造成的(§7.3)。
- 评测口径:batch=1、128 token、纯 CPU、32 线程;4.8–9.5× 强依赖网络设置,25 Gbps 下缩到 1.5–2.63×。与 Iron 的对比是自实现基线(Iron 未开源),虽然作者与 Iron 作者确认过,但复现质量仍是外部无法独立验证的一环。
- “compute-efficient”的说法要打折。BOLT 只报 runtime 与通信,不报 CPU 利用率、能耗、内存峰值;而 HE 的旋转/NTT 本身就是重计算。作者在 §9 也承认极端快网络下应做“按网络自适应选择线性协议”的混合系统——这等于承认计算侧并未被真正优化到极致。
- 密文×密文的深度仍是 3(最优 2)。2D 旋转靠掩码模拟,掩码乘法带来额外深度与乘法;这是 BFV 打包方式的固有约束,也是后续工作(THOR 的 DiagBlock)可以继续改进的点。
6. 自测题
Q1. BOLT 为什么把线性层放 HE、非线性层放 MPC?这个分工的代价是什么?
A1. HE 的通信成本低、计算成本高,适合数据量大但只需加乘的 MatMul;MPC(秘密共享)计算便宜但每次乘法都要通信,适合复杂非线性。代价是需要在两种表示之间转换(每轮一次比较 + 一次 MUX,占端到端 2%–9%),并且只做 HE → MPC 单向转换(反向溢出概率可忽略)。
Q2. 紧凑打包依赖的关键观察是什么?为什么输出天然是紧凑的?
A2. 观察是“C 的每一列都是 A 的列的线性组合,系数是 B 的标量”,所以 A 按列打包、B 的每个元素重复 m 次即可用 SIMD 完成一列的乘加。输出 C 的每一列恰好占满一个密文的 m 个槽位,因此输出天然按列紧凑,槽位利用率 100%。
Q3. BSGS 为什么不能照搬矩阵-向量的版本?BOLT 在 BERT-base 上省了多少旋转?
A3. 因为 BOLT 在列级别打包和旋转(一个密文里有多列),而经典 BSGS 是元素级的;此外矩阵-矩阵场景下右侧矩阵 tall-and-skinny 时还能在行方向做部分和,这是矩阵-向量没有的机会。收益:单头维度 756 → 43(17.58×),全模型 2.33×–9.33×(Linear 4 最省,3024 → 324)。
Q4. BFV 为什么做不了 2D 旋转?BOLT 如何绕开,代价是什么?
A4. BFV 的旋转是 NTT 空间里的 Galois 自同构,只能按根的幂次转,无法同时做“行内 + 列间”的二维旋转;n=8192 时是否能找到 orders 64/128 且张成整个空间的生成元也不清楚。BOLT 用“两次部分旋转 + 位掩码 + 求和”模拟 2D 旋转,并把修正掩码与紧凑输出掩码合并,把乘法深度从 4 降到 3(最优为 2),代价是更多乘法/旋转。
Q5. Iron 的 LayerNorm 优化错在哪?BOLT 如何修正?
A5. Iron 把 γ_j/σ_i 与 β_j 融进下一层线性权重,使 LayerNorm 输出变成 X − μ;单层代数正确,但残差连接要求加回的是未缩放的 LN 输出,于是残差分支数值全错、误差累积,模型接近随机猜测。BOLT 直接移除该融合,保留 γ/β 显式乘法,并把与权重的乘法搬进 HE、预计算 X − μ 的 MSB 来补成本,LayerNorm 通信仍降 3.0×。
Q6. BOLT 的 10.91× 与 THOR 宣称的 PC-MM 5.3× / CC-MM 9.7–36× 可以直接比较吗?
A6. 不能。BOLT 的 10.91× 是整网端到端通信(含 MPC 非线性);THOR 的倍数是同态矩阵乘法的密钥切换/旋转次数(算法级),两者口径不同。若要比较,必须对齐到同一指标(端到端通信、端到端墙钟或同一条网络设置),并且注意 THOR 是零交互纯 HE、BOLT 是每层都要交互的 2PC。
7. 原文定位索引
| 主题 | 章节 / 表号 / 页 |
|---|---|
| 动机、Iron 的 280.99 GB / 216 min | §1,p. 4753 |
| 四条贡献(原文三条 bullet + 结果段) | §1,pp. 4753–4754 |
| BERT 结构与 m=128、d=768、H=12、L=12 | §2.2,Fig. 1,p. 4754 |
| 2-out-of-2 秘密共享、BFV、定点编码 | §2.3,p. 4754 |
| 威胁模型、系统架构、整体成本观 | §3,p. 4755 |
| 紧凑打包(列打包 + 对角权重) | §4.1.1,Fig. 2,pp. 4756–4757 |
| 与 Gazelle/Iron 的操作数对比(756 → 43) | Tab. 1,p. 4757 |
| BSGS 降旋转(17.58×) | §4.1.2,Fig. 3,p. 4757 |
| 2D 旋转不支持、深度 4 → 3 | §4.1.3,p. 4758 |
| 对角打包 × 列打包(Softmax·V) | §4.1.3,Fig. 4,p. 4759 |
| BERT 各层如何映射到协议 | §4.2,p. 4759 |
| Motzkin 预处理(乘法减半) | §5.1,App. B,p. 4760 / p. 4769 |
| GELU 4 阶、ULP 4 | §5.2,Eq. 5–6,p. 4760 |
| Tanh 5 阶、ULP 27 | §5.3,Eq. 7–8,p. 4761 |
| Softmax 整数指数协议、ULP 0.0059 | §5.4,Alg. 1,p. 4761 |
| word elimination(bitonic sort 丢 token) | §6.1,App. D,p. 4762 / p. 4769 |
| secure-computation-aware fine-tuning | §6.2,p. 4762 |
| 实现参数(ℓ=37、s=12、n=8192、log p/q) | §7.1.1,p. 4763 |
| Iron LayerNorm 优化错误 | §7.1.4 + App. G,p. 4763 / p. 4770 |
| 精度对比(四个 GLUE 任务) | Tab. 2,§7.3,p. 4763 |
| 逐组件通信与轮数 | Tab. 3,§7.4,p. 4764 |
| 端到端运行时间与分解 | Fig. 5,§7.5,p. 4765 |
| 转换开销(2%–9%)、word elimination 收益 | §7.5.3,§7.4.3,pp. 4764–4765 |
| 与 THE-X/Iron/MPCFormer/PrivFormer/PUMA 对比 | §8,p. 4765 |
| decoder 适用性、恶意安全、极端网络 1.5–2.63× | §9,p. 4766 |
| 多项式系数(GELU/Tanh) | App. C,p. 4769 |
| 各线性层 scale 配置 | App. E,Tab. 4,p. 4770 |
| BSGS 全模型旋转节省 | App. F,Tab. 5,p. 4770 |
| meta-review(无形式化安全证明) | App. H,p. 4771 |
相关阅读
评论
评论区尚未配置:部署 Twikoo 后端后,将 envId 填入 lib/site.ts。