300行代码实现“迷你版GPT”,上线三天收获3.3k星“GPT不是一个复杂的模型”。AndrejKarpathy,前OpenAI科学家和现任TeslaAI总监,在他的GitHub项目中写道。Karpathy说这话很有底气,因为他自己实现了一个“小GPT”——minGPT,只有300行左右的PyTorch代码。项目上线3天,获得3300颗星。“万能”的NLP模型GPT-3在过去的一个月里刷爆了社交网络,但1750亿参数的超高算力要求也让人望而却步。但在Karpathy看来,GPT所做的是将一个索引序列放入一个transformer块序列中,得到下一个索引的概率分布。其余的复杂性只是巧妙的批处理,以提高训练效率。在谈到为什么要开发minGPT时,Karpathy自己在项目文档中表示,他想让GPT变得小巧、简洁、易于解释和具有教育意义,因为目前可用的GPT工具大多都有些笨重。如果说最初的GPT是一艘巨型战舰,那么minGPT就是一艘快艇。小快灵是minGPT的特点,你不能指望它会“开战”。minGPT的作用是出于教育目的,让您熟悉GPT的原则。现在,minGPT已经可以进行加法运算和字符级语言建模,更强大的功能还在开发中。minGPT项目内容minGPT实现包含大约300行代码,包括样板代码和一个完全不需要的自定义因果自注意力模块。minGPT的核心库包含两个重要文件:mingpt/model.py包含实际的Transformer模型定义mingpt/trainer.py是独立于GPT的训练模型的PyTorch样板,为了防止初学者卡住,Karpathy也包含在repo3个教你如何使用这个库训练序列模型的JupyterNotebook文件:play_math.ipynb用于训练专注于加法的GPT(这部分灵感来自GPT-3论文的加法部分);使用GPT的play_char.ipynb在任意文本上被训练为字符级语言模型,类似于作者之前的char-rnn,但是它使用了Transformer而不是RNN;play_words.ipynb是一个字节对编码(BPE)版本,目前还没有完成。有了这些代码,并不意味着你可以立即复现OpenAI的几个GPT预训练模型。Karpathy表示可以使用BPE编码器、分布式训练和fp16来复现GPT-1/GPT-2的结果,但他自己还没有尝试过。(Karpathy在这句话后面写了$$$,可能没钱。)至于最火的GPT-3,可能不行,因为Karpathy认为它不适合GPU显存,需要更细粒度的模型并行处理。minGPT的API使用方法示例如下:#you'reonyourowntodefineaclassthatreturnsindividualexamplesasPyTorchLongTensorsfromtorch.utils.dataimportDatasettrain_dataset=MyDataset(...)test_dataset=MyDataset(...)#constructaGPTmodelfrommingpt.modelimportGPT,GPTConfigmconf=GPTConfig(vocab_size,nblock_12,n,n_embd=768)#aGPT-1model=GPT(mconf)#constructatrainerfrommingpt.trainerimportTrainer,TrainerConfigtconf=TrainerConfig(max_epochs=10,batch_size=256)trainer=Trainer(模型,train_dataset,test_dataset,tconf)trainer.train()#(...享受表演一段时间...)#samplefromthemodel([None,...]and[0]aretopush/popaneeddummybatchdimension)frommingpt.utilsimportsamplex=torch.tensor([1,2,3],dtype=torch.long)[None,...]#contextconditioningy=sample(model,x,steps=30,temperature=1.0,sample=True,top_k=5)[0]print(y)#ourmodelfilledintheintegersequencewith30additionallikelyintegers如果你有合适的硬件和数据集,不妨试试。关于Karpathy提供minGPT的AndrejKarpathy如今只有33岁,但他已经是特斯拉AI高级总监,负责领导自动驾驶神经网络团队。在加入特斯拉之前,他是OpenAI的一名科学家,专注于计算机视觉、生成模型和强化学习方面的深度学习。Karpathy进入斯坦福大学攻读博士学位。2011年至2015年,导师为李飞飞。在他的博士期间。研究期间,他的多篇论文都是CV领域的高被引文章,还在谷歌和DeepMind两家公司实习过。而且,他和李飞飞在斯坦福大学设计了著名的计算机课程CS231n。Karpathy不仅是课程的助教,也是主讲人之一。无论是当年的CS231n课程,还是他的GitHub项目,都很受欢迎。这么厉害的人物,你不去看他写的GPT代码吗?minGPT项目地址:https://github.com/karpathy/minGPTAndrejKarpathy个人主页:https://karpathy.ai/
