省的是数据,不是模型
KAIST 计算机学院李在吉团队做的 CluSTER,目标很具体:指令微调的数据集越来越大,但里面大量样本在梯度空间里是重复的;随机分批又会让某些簇在每张 GPU 上反复出现,另一些簇几乎没被学到。结果就是花了全量数据的算力,却只覆盖了一部分有效信号。
CluSTER 的做法分三步:用目标模型的轻量梯度表示给样本聚类;以最小的簇为基准,把大簇降采样,再把选出的样本均衡分配到数据并行的工作节点;最后按原始簇分布给各节点的梯度加权,避免降采样把数据分布改掉。
为什么是「外围样本」
在每个簇内部,团队比较了三种选法:离质心最近的 core、随机、离质心最远的 peripheral。他们最终默认选外围样本,原因是外围样本的梯度方差更大,能给模型带来更多边界信息;如果只选最像中心的样本,簇内多样性会塌缩。这个选择听起来反直觉,但和「难样本更有用」的经验一致。
结果与边界
论文给出的设置是:7B 和 13B 模型,代码与医疗领域三组指令数据,4 张 GPU,8 个下游基准。只用约 31% 的数据时,训练时间最多缩短 69.6%,性能与全量微调接近。换算一下,原来 10 小时的活大约 3 小时能跑完。
边界也要说清楚:这是指令微调,不是预训练;4 张 GPU 的规模,换成几十张卡的多机环境,通信与分配开销会变;论文测的是代码和医疗,通用对话、多语言、长上下文任务未必同样成立。另一个细节是,GitHub 仓库写的是「最多缩短 64.6%」,论文与新闻写 69.6%——两个数字不一致,说明复现时要以自己的环境为准。
对微调团队意味着什么
最直接的价值不是「省一半机器」,而是把数据清洗从「凭感觉删」变成「按梯度结构选」。很多团队的数据集里,同一类问答被不同模板重复了几十遍;这些重复样本对 loss 有贡献,对能力没有。先做一次聚类统计,往往能发现最大的一簇占了三成以上。
复现清单
- 先固定评测集与随机种子,别用训练 loss 判断数据选择是否有效。
- 统计簇大小分布:最大簇占比、簇数量、单簇最小样本数。
- 选择率从 50% 开始往下压,观察哪个点开始掉点,而不是直接照搬 31%。
- 多机环境要单独量通信开销;4 卡结论不能直接外推到 64 卡。
先删重复,再谈扩容;数据里的冗余,通常比 GPU 更早成为瓶颈。