特斯拉AI总监用300行代码实现“迷你版GPT”,上线GitHub三天收获3.3k星

百家 作者:量子位 2020-08-21 14:58:41
晓查 发自 凹非寺?
量子位 报道 | 公众号 QbitAI

“GPT并不是一个复杂的模型。”

前OpenAI科学家、现任特斯拉AI总监的Andrej Karpathy在自己的GitHub项目里这样写道。

Karpathy这样说是有底气的,因为他自己只用大约300行PyTorch代码就实现了一个“小型GPT”——minGPT。该项目上线3天以来,已经收获了3.3k星。

“万能”的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在repo中还随附3个Jupyter Notebook文件,教你如何使用这个库来训练序列模型:

  • play_math.ipynb用于训练专注于加法的GPT(这部分受GPT-3论文中加法部分的启发);

  • play_char.ipynb用于将GPT训练为任意文本上的字符级语言模型,类似于作者以前的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're?on?your?own?to?define?a?class?that?returns?individual?examples?as?PyTorch?LongTensors
from?torch.utils.data?import?Dataset
train_dataset?=?MyDataset(...)
test_dataset?=?MyDataset(...)

#?construct?a?GPT?model
from?mingpt.model?import?GPT,?GPTConfig
mconf?=?GPTConfig(vocab_size,?block_size,?n_layer=12,?n_head=12,?n_embd=768)?#?a?GPT-1
model?=?GPT(mconf)

#?construct?a?trainer
from?mingpt.trainer?import?Trainer,?TrainerConfig
tconf?=?TrainerConfig(max_epochs=10,?batch_size=256)
trainer?=?Trainer(model,?train_dataset,?test_dataset,?tconf)
trainer.train()
#?(...?enjoy?the?show?for?a?while...?)

#?sample?from?the?model?(the?[None,?...]?and?[0]?are?to?push/pop?a?needed?dummy?batch?dimension)
from?mingpt.utils?import?sample
x?=?torch.tensor([1,?2,?3],?dtype=torch.long)[None,?...]?#?context?conditioning
y?=?sample(model,?x,?steps=30,?temperature=1.0,?sample=True,?top_k=5)[0]
print(y)?#?our?model?filled?in?the?integer?sequence?with?30?additional?likely?integers

如果你有合适的硬件和数据集,不妨去试试吧。

关于Karpathy

提供minGPT的Andrej Karpathy今天才33岁,但已经是特斯拉的AI高级总监,负责领导自动驾驶神经网络团队。

在跳槽到特斯拉之前,他是OpenAI的科学家,主要研究计算机视觉、生成模型和强化学习中的深度学习。

Karpathy在2011-2015年期间进入斯坦福大学攻读博士学位,他的导师就是李飞飞。读博期间,他发表的多篇论文都是CV领域的高引文章,还在Google、DeepMind两家公司实习过。

而且斯坦福大学的著名计算机课程CS231n就是他和李飞飞一起设计的,Karpathy不仅是该课程的助教,也是主讲人之一。

无论是当年的CS231n课程还是他的GitHub项目,都有很高的人气。如此大牛的人物,他写的GPT代码你不去看看吗?

minGPT项目地址:
https://github.com/karpathy/minGPT

Andrej Karpathy个人主页:
https://karpathy.ai/

本文系网易新闻?网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。

每天5分钟,抓住行业发展机遇

如何关注、学习、用好人工智能??

每个工作日,量子位AI内参精选全球科技和研究最新动态,汇总新技术、新产品和新应用,梳理当日最热行业趋势和政策,搜索有价值的论文、教程、研究等。

同时,AI内参群为大家提供了交流和分享的平台,更好地满足大家获取AI资讯、学习AI技术的需求。扫码即可订阅:

加入AI社群,与优秀的人交流


量子位?QbitAI · 头条号签约作者


?'?' ? 追踪AI技术和产品新动态


喜欢就点「在看」吧 !


关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

图库
公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接