D3 论文
以往研究关注训练好的模型是否存在错误行为,本文关注构建和训练模型的代码本身是否存在问题。构建了一个分布式等价规则:1)分布式与非分布式等价(在单 GPU 与多 GPU 上训练的模型等价);2)不同分布式设置等价(使用列式分片(column-wise sharding)训练的模型和使用行式分片(row-wise sharding)训练的模型,对于相同的输入,输出应该是等价的)。
分布式参数:
- 世界大小(world size):分布式集群中的处理器数量,例如在 GPU 训练中,就是 GPU 的数量。
- 分片类型(sharding type):模型分片的方式,例如列式分片和行式分片。
- 设备(device):使用的硬件设备,如 GPU 或 CPU。
- 权重量化(weight quantization):模型权重的量化方式,例如 int8。
- 激活量化(activation quantization):激活函数的量化方式,例如 float16。
- 分片器类型(sharder type):用于分片的具体工具或方法,例如 EmbeddingBagSharder。
通过系统地生成和组合分布式参数的候选值,D3能够生成大量多样化的分布式设置。这些设置用于测试分布式深度学习库,确保在不同设置下模型的输出等价。
类型 | 方法 |
---|---|
DLRM 类结构 | 变异稀疏组件(Embedding)、密集组件(线性层)、交互组件(均值、sigmoid) |
其他结构 | 使用 Muffin 生成链式结构和基于单元的结构模型 |
层冻结模型 | 随机冻结模型中的一个层(trainable=False或requires_grad=False),测试层冻结模型以检测转换引入的不一致性 |
模型输入 | 根据模型的输入层参数生成输入 |
D 3 D^3 D3 加载模型 M i M_i Mi 和输入 I i I_i Ii,在分布式设置 S k S_k Sk 下进行预设次数的迭代训练,然后对 I i I_i Ii 进行推理,产生输出 O i k O_{ik} Oik。在所有分布式和非分布式输出下,比较输出。重点关注分布式设置与非分布式设置之间的比较,报告输出向量的逐元素差异,如果差异大于设定的阈值,则视为潜在的不一致性缺陷。由于不一致性太多了,采用 CRADLE 的变化率度量。
- 计算在两个不同测试场景中同一层的两次执行的每对对应隐藏状态之间的平均绝对距离(MAD),根据产生最大变化率的层API对不一致性进行聚类。
- 从每个聚类中随机抽样测试场景进行详细调查。