晓查 发自 凹非寺 
量子位 报道 | 公众号 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/

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

喜欢就点「在看」吧 !

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

  1. 一天star量破千,300行代码,特斯拉AI总监Karpathy写了个GPT的Pytorch训练库

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 整理:公众号@机器之心 本文仅做学术分享,如有侵权,请联系删除. 如果说 GPT 模型是所向披靡的战舰 ...

  2. 用Transformer定义所有ML模型,特斯拉AI总监Karpathy发推感叹AI融合趋势

    来源:机器之心 本文约1700字,建议阅读5分钟 特斯拉 AI 总监 Andrej Karpathy 连发多条推文表示,AI 不同领域(视觉.语音.自然语言等)正在打通,融合速度令人惊叹. 近日,特斯 ...

  3. 用Transformer定义所有AI模型!特斯拉AI总监Karpathy发推感叹AI融合趋势

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来源 | CVer 特斯拉 AI 总监 Andrej Karpathy 连发多条推文表 ...

  4. 95%PyTorch库都会中招的bug!特斯拉AI总监都没能幸免

    明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 到底是怎样的一个bug,能让95%的Pytorch库中招,就连特斯拉AI总监深受困扰? 还别说,这个bug虽小,但有够"狡猾&qu ...

  5. 特斯拉AI总监的MNIST训练之旅

    1. 引言 今天我们来重点介绍一下特斯拉AI总监的一篇博客<Deep Neural Nets: 33 years ago and 33 years from now>,这篇文章深入浅出地介 ...

  6. 通过Mesos、Docker和Go,使用300行代码创建一个分布式系统

    [摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力 ...

  7. python编程小游戏代码-Python小游戏之300行代码实现俄罗斯方块

    前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很 ...

  8. python小游戏代码大全-Python小游戏之300行代码实现俄罗斯方块

    前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很 ...

  9. python小游戏源码-Python小游戏之300行代码实现俄罗斯方块

    Python小游戏之300行代码实现俄罗斯方块 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: Python小游戏之300行代码实现俄罗斯方块.txt ] (友情提示:右键点上 ...

最新文章

  1. 信息保留的二值神经网络IR-Net,落地性能和实用性俱佳 | CVPR 2020
  2. 大厂程序员回乡真风光?敲锣打鼓游街欢迎,横幅写着月薪和公司!
  3. 点云数据向图像数据转换(附源码)
  4. 把文件自动add_【Blender】常用Add-Ons
  5. UITextField与UITextView的区别
  6. C# WinForm 软件注册的实现
  7. L1-043 阅览室 (20 分)(在线模拟题)
  8. hbase scala 实例_scala操作HBase2.0
  9. UI设计素材|如何为数据可视化选择更漂亮的颜色
  10. qzone.class.php,[宜配屋]听图阁
  11. centos 源码安装 mysql
  12. 分布式共识算法 (Consensus Algorithm)
  13. 【BZOJ1901】Zju2112 Dynamic Rankings 主席树+树状数组
  14. mysql hacing_manjaro 折腾日记
  15. 广州医保上线移动支付:暂只针对普通门诊
  16. 简单易懂之什么是重排和重绘?
  17. 问题以及解决办法:hadoop 不在 sudoers 文件中。此事将被报告
  18. Chrome 清除特定网站的 cookie
  19. 血栓清道夫机器人_新的清道夫技术允许机器人“吃”金属获取能量
  20. (Stockx)爬虫Requests 403(Please verify you are a human)解决方法

热门文章

  1. 【MATLAB】数组运算
  2. 基于 OpenCV 的图像阴影去除
  3. 深度盘点Python11个主流框架:Pandas、Django、Matplotlib、Numpy、PyTorch......
  4. 用AI打造科技公益新模式,腾讯发起公益创新挑战赛,聚焦三大社会问题
  5. 仅剩一周!!CSDN年终大放血!人人有份的大奖你确定不来?
  6. 小冰拉开人生第二幕:AI时代的“Office”问世,你的虚拟男友“复活”了
  7. Python实现信息自动配对爬虫排版程序
  8. 微软麻将AI Suphx或引入“凤凰房”,与其他AI对打
  9. 会数据分析的人别再低调了,我怕你会因此错失100万奖金
  10. 吴恩达“官宣”荣升准爸爸~