跳到正文
IFAI

大模型

Character.ai 解密预训练技术:6-bit 梯度压缩让通信开销骤降

首次发布 传播指数 43

Character.ai 首次公开早期由 Noam Shazeer 带领研发的 Transformer 预训练优化技巧。其中最引人关注的是 6-bit 梯度压缩算法 Squinch,在集群网络带宽仅为顶尖系统四分之一的限制下,保持了与 bfloat16 相当的训练精度。团队同时还公开了注意力正则化与蒸馏优化等工程细节。

Character.ai 解密预训练技术:6-bit 梯度压缩让通信开销骤降
图:blog.character.ai

如果你的计算集群带宽只有行业顶尖水平的四分之一,但你还想训大模型,该怎么办?

当年在 Character.ai 带领预训练团队的 Noam Shazeer 选择了一个简单粗暴的解法:把梯度狠狠压扁。如今 Character.ai 已经转型在开源模型上做应用,不再做大规模预训练,但官方首次公开了当年压箱底的五项底层优化细节。

6-bit 梯度压缩与精度补丁

最吸睛的技术叫 Squinch,是 Noam Shazeer 设计的 6-bit 梯度压缩算法。当时集群带宽严重受限,他们把 8 个梯度数值打包进一个 48-bit 的块里,平均每个值只占 6 bit,却能维持和 bfloat16 几乎一致的模型精度。

这种算法专门针对 Transformer 梯度分布设计,后来 DeepSeek 的 logfmt 也借鉴了类似思路。对于带宽受限的集群、跨机房分布式训练或者 MoE 模型,它依然非常实用。

针对数值稳定性,团队拿出了 Attention Z-Reg。bfloat16 在大数值区间的浮点步长很大,40 到 41 之间的间距远大于 0 到 1 之间,容易丢失精度。他们在反向传播时向注意力梯度引入正则修正,把数值拉回零附近的精细区间。

在量化感知训练中,团队还设计了动态截断机制。传统的固定截断会导致小激活值在量化后直接塌缩成零,他们根据输入权重的均方根动态调整范围,保证了量化精度。

对话树打包与离线蒸馏省钱法

处理对话数据时,多轮分支和长文本拼接很容易拖慢速度。Character.ai 引入了可见性掩码机制,只用起始和边界两个张量,就能在单个批次里原生表达树状文档、因果注意力甚至推理时的束搜索分支。

另一项实用技巧针对模型蒸馏。如果离线保存教师模型的全词表概率,超大词表会把硬盘撑爆。他们采用基于 Gumbel top-k 的子采样方法,只保存少量采样结果和阈值,在训练学生模型时能无偏重建软目标,省下了海量存储。

为什么重要

对开发者和中小团队来说,这篇技术分享简直是一份在缺钱、缺卡、缺带宽时的工程求生指南。如果你手头的机群网络条件一般,或者在做跨地域算力组网、训稀疏 MoE,Squinch 这类压缩思路完全可以拿来抄作业。

对行业来说,这些技术揭示了大模型黄金年代的一个残酷现实:顶尖人才和极端工程能力,真的能抹平硬件上的巨大差距。当年 Character.ai 靠这套缝缝补补的自研体系打出了极佳的对话效果,间接促成了后续 Google 对团队核心人员的重金招揽。

我们认为,Character.ai 选择在放弃自研预训练之后公开这套代码和思路,做法既坦诚又聪明。它一方面为开源社区留下了真金白银的系统级沉淀,另一方面也向外界交代了自己技术路线转向的原因:当算力基建变成军备竞赛,中小公司与其死磕预训练通信瓶颈,不如掉头把精力集中在开源微调和产品层。

来源 (1)

  1. [1]
    blog.character.ai(在新标签页打开)原文blog.character.ai

每日 AI 内容精选