Femtotron,这是我最近新考虑开始开发的一个个人项目,作为SI-系列的第二作,尝试实现一个依赖尽可能少的、端到端的自己实现和可真实环境工作的预训练框架。可能有人会问:为什么不叫Picotron呢?答案是重名了。Picotron本身已经是一个开源的教学项目,重名了就不好了,大家可能觉得我是抄的或者fork的而不是自己做的(笑)。
它的首要目标将是自主性:通过尽可能少的依赖和复用现成的功能性组件,实现全流程的真实实践,同时完全避免参考现有仓库的设计、避免过多复用平台本身的组件,而是根据自己的设计灵感进行开发、自己了解各种功能具体的实现过程。它的次要目标是尽可能的高性能,虽然很有可能达不到Megatron的水平,但它被期望应该可以达到工程上可接受的性能程度,即MFU不会过低。
随后,它将被用于后续工作、训练和微调相应模型,并且和推理框架配合,进一步实现后训练框架的搭建和端到端的大模型全生命周期开发。第三部分的后训练框架可能会叫Atto-RL,或者其他什么的,但现在暂时还是纸上规划。预训练框架的工作不会马上开始,但会逐渐启动,和Pico-vllm的收尾和性能改善、文件整理和汇总的工作一起并行。不管怎么说,先git init吧🍥!
外部依赖
Python 3.10+(无需多言)
PyTorch 2.x(torch, torch.distributed, torch.autograd)
NCCL(torch.distributed的backend的间接依赖)
HuggingFace Transformers & Datasets(模型加载、数据加载、权重转换、tokenizer)
Triton(自定义Kernel实现)
规划内的特性
一定会实现的特性
这个项目将一定包括以下内容:
1、基于Column/Row并行的可forward和backward的Tensor Parallel线性层
2、基于Column/Row并行的可forward和backward的Transformer Block
3、BF16-FP32的混合精度训练方法
4、正确的Distributed DP并行及其训练循环,包括Gradient clipping、AdamW optimizer、Learning rate schedule、checkpoint save/load、Logging的全流程
5、ZeRO Stage 1、Stage 2、Stage 3
6、Activation Checkpointing的Full recomputation模式和selective recomputation模式,实现可自定义配置粒度
7、Pipeline Parallel,包括1F1B调度
8、正确3D并行和ZeRO-1、2、3的任意组合
9、SFT训练兼容
大概率会实现的特性
这个项目将大概率包括以下内容:
1、Interleaved 1F1B调度和Zero bubble调度
2、Sequence Parallel并行模式的实现
3、并行间的通信-计算Overlap,以及相应方案调研和benchmark
4、LoRA
5、显存分析工具和显存测试工具集开发
6、FP8-FP32混合精度训练,包括可配置的FP8范围
不在规划内的特性
这个项目将几乎不可能包括以下内容:
1、MoE相关的模型和Expert Parallel的并行化实现
2、Context Parallel的并行化实现和Ring Attention的实现
3、ZeRO-Offload的相关实现
4、分布式Checkpoint resharding的相关实现
5、Fault Tolerance的相关实现
6、通信压缩的相关实现
7、多节点集成。因为没卡。
根据情况的不同,后续这个规划可能有小幅度的调整。如果发生调整,应该主要是去实现额外的特性,即coverage会增加而不是缩小。不管怎么说,这份计划本身预留的裕度是较为充足的,因此妥协是不可接受的。