從零實(shí)現(xiàn)BERT、GPT及Difussion類算法:文章簡(jiǎn)介及目錄
本教程特點(diǎn):
除了python基礎(chǔ)庫(kù)和pytorch基礎(chǔ)運(yùn)算外,不借助其他第三方庫(kù)
從零推導(dǎo)、實(shí)現(xiàn)Transformer及Bert、GPT、Diffusion等熱門模型
從零實(shí)現(xiàn)data parallel、tensor parallel、pipeline parallel等并行訓(xùn)練策略
借助開(kāi)源大模型權(quán)重,從零實(shí)現(xiàn)SFT+RLHF的訓(xùn)練、部署
平時(shí)工作忙,如果有同學(xué)有精力和意愿來(lái)一起完善代碼和教程,歡迎私信聯(lián)系
隨著Transformer在文本、圖像等領(lǐng)域的應(yīng)用,以及ChatGPT的爆火,可以說(shuō)只要掌握了基礎(chǔ)算法知識(shí)和Transformer,幾乎能開(kāi)發(fā)出任意AI算法。但是huggingface的Transformers有很多穩(wěn)定性代碼導(dǎo)致學(xué)習(xí)成本太高,所以打算從頭寫一寫Transformer及bert、gpt、diffusion(up主自己是做NLP的,所以diffusion模型會(huì)放在最后)等模型,并把這個(gè)過(guò)程記錄一下,一方面是為了自身鞏固,另一方面也希望給還沒(méi)完全掌握算法細(xì)節(jié)的同學(xué)提供參考。希望通過(guò)本教程的學(xué)習(xí),可以理解AIGC模型的開(kāi)發(fā)原理。本教程完全基于個(gè)人學(xué)習(xí)過(guò)程中的理解,難免有不足和錯(cuò)誤,歡迎指正和探討。
本教程分成8個(gè)部分(配套代碼見(jiàn)https://github.com/firechecking/CleanTransformer)
第一部分:我們會(huì)開(kāi)發(fā)NLP中的BPE、WordPiece、ULM分詞,實(shí)現(xiàn)分詞器的train、tokenize、encode、decode;
第二部分:會(huì)復(fù)現(xiàn)《attention is all you need》中的LayerNorm、MultiHeadAttention,以及TransformerBlock;
第三部分:實(shí)現(xiàn)完整的Bert和GPT1/2分詞器、模型搭建,并將下載huggingface的Bert、GPT2模型權(quán)重加載到我們的框架中完成推理;
第四部分:為了實(shí)現(xiàn)生成模型的推理,我們?cè)谶@一章會(huì)實(shí)現(xiàn)常用的3種生成策略:Greedy Search、Beam Search、Beam Sample;
第五部分:這部分我們將實(shí)現(xiàn)SGD、Adam這2個(gè)常用的Optimizer,MSELoss和CrossEntropyLoss這2個(gè)常用loss,并在小規(guī)模數(shù)據(jù)集上驗(yàn)證模型訓(xùn)練和模型部署;
前5個(gè)部分的配套代碼已經(jīng)開(kāi)發(fā)完成,大家可以clone代碼自己測(cè)試和修改。后面幾個(gè)部分的代碼還在開(kāi)發(fā)中,會(huì)隨著教程一起在代碼庫(kù)中更新。
第六部分:加載LLaMA模型權(quán)重,基于指令微調(diào)數(shù)據(jù)集和RLHF數(shù)據(jù)集,實(shí)現(xiàn)模型的指令微調(diào),然后部署一個(gè)可對(duì)外提供服務(wù)的大模型實(shí)例;
第七部分:為了實(shí)現(xiàn)更大規(guī)模的模型訓(xùn)練,這部分我們要在框架中實(shí)現(xiàn)分布式訓(xùn)練(將要實(shí)現(xiàn)data parallel、tensor parallel、pipeline parallel這三種并行方法),同時(shí)會(huì)嘗試activition checkpoint及懶加載等方式,在盡可能少的GPU上實(shí)現(xiàn)大模型訓(xùn)練;
第八部分:Diffusion等圖像生成模型開(kāi)發(fā)、訓(xùn)練、優(yōu)化、部署等