Femtotron开发日志 #0 预期目标和特性规划

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会增加而不是缩小。不管怎么说,这份计划本身预留的裕度是较为充足的,因此妥协是不可接受的。