本教程特点:
除了python基础库和pytorch基础运算外,不借助其他第三方库
从零推导、实现Transformer及Bert、GPT、Diffusion等热门模型
从零实现data parallel、tensor parallel、pipeline parallel等并行训练策略
借助开源大模型权重,从零实现SFT+RLHF的训练、部署
平时工作忙,如果有同学有精力和意愿来一起完善代码和教程,欢迎私信联系
随着Transformer在文本、图像等领域的应用,以及ChatGPT的爆火,可以说只要掌握了基础算法知识和Transformer,几乎能开发出任意AI算法。但是huggingface的Transformers有很多稳定性代码导致学习成本太高,所以打算从头写一写Transformer及bert、gpt、diffusion(up主自己是做NLP的,所以diffusion模型会放在最后)等模型,并把这个过程记录一下,一方面是为了自身巩固,另一方面也希望给还没完全掌握算法细节的同学提供参考。希望通过本教程的学习,可以理解AIGC模型的开发原理。本教程完全基于个人学习过程中的理解,难免有不足和错误,欢迎指正和探讨。
本教程分成8个部分(配套代码见https://github.com/firechecking/CleanTransformer)
第一部分:我们会开发NLP中的BPE、WordPiece、ULM分词,实现分词器的train、tokenize、encode、decode;
第二部分:会复现《attention is all you need》中的LayerNorm、MultiHeadAttention,以及TransformerBlock;
第三部分:实现完整的Bert和GPT1/2分词器、模型搭建,并将下载huggingface的Bert、GPT2模型权重加载到我们的框架中完成推理;
第四部分:为了实现生成模型的推理,我们在这一章会实现常用的3种生成策略:Greedy Search、Beam Search、Beam Sample;
第五部分:这部分我们将实现SGD、Adam这2个常用的Optimizer,MSELoss和CrossEntropyLoss这2个常用loss,并在小规模数据集上验证模型训练和模型部署;
前5个部分的配套代码已经开发完成,大家可以clone代码自己测试和修改。后面几个部分的代码还在开发中,会随着教程一起在代码库中更新。
第六部分:加载LLaMA模型权重,基于指令微调数据集和RLHF数据集,实现模型的指令微调,然后部署一个可对外提供服务的大模型实例;
第七部分:为了实现更大规模的模型训练,这部分我们要在框架中实现分布式训练(将要实现data parallel、tensor parallel、pipeline parallel这三种并行方法),同时会尝试activition checkpoint及懒加载等方式,在尽可能少的GPU上实现大模型训练;
第八部分:Diffusion等图像生成模型开发、训练、优化、部署等