实际评估YaFSDP时,我先确认它解决的具体问题:YaFSDP:另一个完全分片的数据并行。一旦进入数据与知识处理环节,数据结构、更新策略和可追溯性会决定结果是否可信会直接影响交付,这也是我最关心的风险。落地前可以用一份规模可控且答案已知的数据集试跑,用模式兼容、增量更新、查询结果和来源追踪判断它是否真的省事。整体来看,它适合需要保留数据来路与变更记录的使用者拿来做对照测试,最终决定仍应回到真实结果和维护状态。
YaFSDP
概述
YaFSDP 是一个分片数据并行框架,旨在与 类似变压器的神经网络架构。 YaFSDP 开发并 由 Yandex 维护。
您可以在我们的博客文章中找到有关 YaFSDP 内部结构的更多信息 中型 和 哈布尔。
相对于 FSDP 的优势
YaFSDP 预训练 LLMs 的速度提高了 20%,并且在高 内存压力条件。它旨在减少通信和内存 运营开销。
YaFSDP:
FSDP:
基准测试
我们在各种预训练设置上对 YaFSDP 与 FSDP 进行了比较,包括:
| 型号 | GPU计数 | 序列长度 | ckpt 层数 | 加速 | YaFSDP 迭代时间(s) | FSDP 迭代时间(s) |
|---|---|---|---|---|---|---|
| 羊驼 2 7B | 64 | 2048 | 0 | 9.92% | 0.81 | 0.90 |
| 羊驼 2 7B | 64 | 4096 | 0 | 3.43% | 1.16 | 1.21 |
| 羊驼 2 7B | 64 | 8192 | 0 | 2.68% | 2.23 | 2.29 |
| 羊驼 2 7B | 128 | 2048 | 0 | 9.57% | 0.87 | 0.97 |
| 羊驼 2 7B | 128 | 4096 | 0 | 2.42% | 1.19 | 1.22 |
| 羊驼 2 7B | 128 | 8192 | 0 | 2.32% | 2.25 | 2.31 |
| 羊驼2 13B | 128 | 2048 | 0 | 12.10% | 1.55 | 1.76 |
| 羊驼2 13B | 128 | 4096 | 0 | 3.49% | 2.06 | 2.14 |
| 羊驼 2 34B | 128 | 2048 | 0 | 20.70% | 3.39 | 4.27 |
| 羊驼 2 34B | 256 | 2048 | 0 | 21.99% | 3.51 | 4.50 |
| 羊驼 2 34B | 256 | 4096 | 5 | 8.35% | 5.33 | 5.81 |
| 羊驼2 70B | 256 | 2048 | 10 | 21.48% | 6.97 | 8.87 |
| 羊驼2 70B | 256 | 4096 | 50 | 7.17% | 11.07 | 11.93 |
| 羊驼3 8B | 64 | 2048 | 0 | 11.91% | 0.97 | 1.10 |
| 羊驼3 8B | 64 | 4096 | 0 | 7.86% | 1.36 | 1.48 |
| 羊驼3 70B | 256 | 2048 | 20 | 26.60% | 7.17 | 9.76 |
详情:
speedup 表示 YaFSDP 和 FSDP 运行之间的相对迭代时间减少。num-ckpt-layers 指的是变压器层数
应用了激活检查点。示例
您可以在 examples 文件夹中找到使用 堆栈进行 LLM 训练的示例:
clm.md 用于因果预训练sft.md 用于监督微调请注意,这两个示例都需要 Docker 映像,可以使用以下命令构建该映像
docker/build.sh 脚本。该图像基于 NVIDIA PyTorch
image
以及一些修补过的 库。库的补丁可以在
patches 文件夹。
问题和疑问
如果您遇到任何错误或有任何疑问 ,请随时打开 GitHub 问题。