一天star量破千,300行代码,特斯拉AI总监Karpathy写了个GPT的Pytorch训练库
点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
整理:公众号@机器之心
本文仅做学术分享,如有侵权,请联系删除。
如果说 GPT 模型是所向披靡的战舰,那么 minGPT 大概算是个头虽小但仍能乘风破浪的游艇了吧。
最近,「史上最大 AI 模型」GPT-3 风靡全球。
GPT 系列可以说是人工智能领域「暴力美学」的代表作了。2018 诞生的 GPT,1.17 亿参数;2019 年 GPT-2,15 亿参数;2020 年 GPT-3,1750 亿参数。短短一年时间,GPT 模型的参数量就呈指数级增长。
GPT-3 发布后不久,OpenAI 即向社区开放了商业 API,鼓励大家使用 GPT-3 尝试更多的实验。然而,API 的使用需要申请,而且你的申请很有可能石沉大海。那么,除了使用官方 API 以外,我们还有没有其他方法能上手把玩一下这个「最大模型」呢?
近日,特斯拉人工智能研究负责人、前 OpenAI 研究科学家 Andrej Karpathy 进行了尝试。
他基于 PyTorch,仅用 300 行左右的代码就写出了一个小型 GPT 训练库,并将其命名为 minGPT。
Karpathy 表示,这个 minGPT 能够进行加法运算和字符级的语言建模,而且准确率还不错。不过,在运行 demo 后,Andrej Karpathy 发现了一个有趣的现象:2 层 4 注意力头 128 层的 GPT 在两位数加法运算中,将 55 + 45 的结果计算为 90,而其他加法运算则没有问题。
目前,该项目在 GitHub 上亮相还没满 24 小时,但 star 量已经破千。
minGPT 项目地址:https://github.com/karpathy/minGPT
minGPT:只用 300 行代码实现的 GPT 训练
如果说 GPT 模型是所向披靡的战舰,那么 minGPT 大概算是个个头虽小但仍能乘风破浪的游艇了吧。
在项目页面中,Karpathy 介绍称:由于现有可用的 GPT 实现库略显杂乱,于是他在创建 minGPT 的过程中, 力图遵循小巧、简洁、可解释、具有教育意义等原则。
GPT 并非一个复杂的模型,minGPT 实现只有大约 300 行代码,包括样板文件和一个完全不必要的自定义因果自注意力模块。Karpathy 将索引序列变成了一个 transformer 块序列,如此一来,下一个索引的概率分布就出现了。剩下的复杂部分就是巧妙地处理 batching,使训练更加高效。
核心的 minGPT 库包含两个文档:mingpt/model.py 和 mingpt/trainer.py。前者包含实际的 Transformer 模型定义,后者是一个与 GPT 无关的 PyTorch 样板文件,可用于训练该模型。相关的 Jupyter notebook 则展示了如何使用该库训练序列模型:
play_math.ipynb 训练一个专注于加法的 GPT;
play_char.ipynb 将 GPT 训练成一个可基于任意文本使用的字符级语言模型,类似于之前的 char-rnn,但用 transformer 代替了 RNN;
play_words.ipynb 是 BPE(Byte-Pair Encoding)版本,目前尚未完成。
使用 BPE 编码器、分布式训练和 fp16,这一实现有可能复现 GPT-1/GPT-2 的结果,不过 Karpathy 还没有尝试。至于 GPT-3,minGPT 可能无法复现,因为 GPT-3 可能不适合 GPU 内存,而且需要更精细的模型并行化处理。
使用示例
Karpathy 在 minGPT 项目中提供了一些使用示例。
这些代码非常简单,只需 hack inline 即可,而非「使用」。目前的 API 外观如下:
minGPT 是如何实现的?
在实现过程中,Karpathy 参考了 OpenAI GPT 官方项目,以及其他组织的示例等。
代码
OpenAI gpt-2 项目提供了模型,但没有提供训练代码(https://github.com/openai/gpt-2);
OpenAI 的 image-gpt 库在其代码中进行了一些类似于 GPT-3 的更改,是一份不错的参考(https://github.com/openai/image-gpt);
Huggingface 的 transformers 项目提供了一个语言建模示例。它功能齐全,但跟踪起来有点困难。(https://github.com/huggingface/transformers/tree/master/examples/language-modeling)
论文 + 实现说明
此外,项目作者还介绍了相关的论文和实现细节。
1. GPT-1:《Improving Language Understanding by Generative Pre-Training》
论文地址:https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf
GPT-1 模型大体遵循了原始 transformer,训练了仅包含 12 层解码器、具备遮蔽自注意力头(768 维状态和 12 个注意力头)的 transformer。具体实现细节参见下图:
2. GPT-2:《Language Models are Unsupervised Multitask Learners》
论文地址:https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
GPT-2 将 LayerNorm 移动每个子模块的输入,类似于预激活残差网络,并在最后的自注意力模块后添加了一个额外的层归一化。此外,该模型还更改了模型初始化(包括残差层初始化权重等)、扩展了词汇量、将 context 规模从 512 个 token 增加到 1024、使用更大的批大小等。具体实现细节参见下图:
3. GPT-3:《Language Models are Few-Shot Learners》
论文地址:https://arxiv.org/pdf/2005.14165.pdf
GPT-3 使用了和 GPT-2 相同的模型和架构,区别在于 GPT-3 在 transformer 的各层上都使用了交替密集和局部带状稀疏的注意力模式,类似于 Sparse Transformer。具体实现细节参见下图:
Andrej Karpathy 其人
Andrej Karpathy 是计算机视觉、生成式模型与强化学习领域的研究者,博士期间师从斯坦福大学计算机科学系教授李飞飞。读博期间,他曾两次在谷歌实习,研究在 Youtube 视频上的大规模特征学习。此外,他还和李飞飞等人一起设计、教授了斯坦福经典课程 CS231n。
2016 年,Karpathy 加入 OpenAI 担任研究科学家。2017 年,他加入特斯拉担任人工智能与自动驾驶视觉总监。如今,Karpathy 已经升任特斯拉 AI 高级总监。他所在的团队负责特斯拉自动驾驶系统 Autopilot 所有神经网络的设计,包括数据收集、神经网络训练及其在特斯拉定制芯片上的部署。
和教授 CS231n 时一样,Karpathy 希望他利用业余时间做的这个 minGPT 也能有一定的教育意义。他这种化繁为简的举动得到了众多社区成员的赞赏:
除了关于 minGPT 本身的讨论之外,还有人提出:有没有可能借助社区力量一起训练 GPT-3?也就是说,如果成千上万的开发者在 GPU 空闲的时候将其贡献出来(比如夜间),最后有没有可能训练出一个 1750 亿参数的 GPT-3?这样的话,大家只需要分摊电费就好了。
不过,有人指出,这种分布式训练的想法非常有趣,但可能会在梯度等方面遇到瓶颈。
还有人调侃说,把电费众筹一下拿来买云服务岂不是更简单?
参考链接:https://news.ycombinator.com/item?id=24189497
本文仅做学术分享,如有侵权,请联系删文。
下载1
在「3D视觉工坊」公众号后台回复:3D视觉,即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。
下载2
在「3D视觉工坊」公众号后台回复:3D视觉优质源码,即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。
下载3
在「3D视觉工坊」公众号后台回复:相机标定,即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配,即可下载独家立体匹配学习课件与视频网址。
重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。
同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群。
一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按加微信群或投稿
▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、可答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~
一天star量破千,300行代码,特斯拉AI总监Karpathy写了个GPT的Pytorch训练库相关推荐
- ControlNet star量破万!2023年,AI绘画杀疯了?
来源:机器之心 从骑马的宇航员到三次元小姐姐,在不到一年的时间里,AI 绘画似乎已经取得了革命性的进展. 这个「骑马的宇航员」由 OpenAI 2022 年 4 月推出的文生图模型 DALL・E 2 ...
- 首个大众可用PyTorch版AlphaFold2复现,哥大开源OpenFold,star量破千
作者丨小舟 来源丨机器之心 AlphaFold2 是 2021 年 AI for Science 领域最耀眼的一颗星.现在,有人在 PyTorch 中复现了它,并已在 GitHub 上开源.这一复现在 ...
- 三百行python代码的项目_使用300行代码创建一个分布式系统
使用 300 行代码创建一个分布式系统 构建一个分布式系统是很困难的. 它需要可扩展性. 容错性. 高可用性. 一致性. 可伸缩以及高效.为了达到这些目的,分布式系统需要很多复杂的组件以一 种 复杂的 ...
- c语言300行代码大作业,C语言300行代码
<C语言300行代码>由会员分享,可在线阅读,更多相关<C语言300行代码(3页珍藏版)>请在人人文库网上搜索. 1.include #include #include #in ...
- 特斯拉AI总监用300行代码实现“迷你版GPT”,上线GitHub三天收获3.3k星
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI "GPT并不是一个复杂的模型." 前OpenAI科学家.现任特斯拉AI总监的Andrej Karpathy在自己的Gi ...
- 通过Mesos、Docker和Go,使用300行代码创建一个分布式系统
[摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力 ...
- python编程小游戏代码-Python小游戏之300行代码实现俄罗斯方块
前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很 ...
- python小游戏代码大全-Python小游戏之300行代码实现俄罗斯方块
前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很 ...
- python小游戏源码-Python小游戏之300行代码实现俄罗斯方块
Python小游戏之300行代码实现俄罗斯方块 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: Python小游戏之300行代码实现俄罗斯方块.txt ] (友情提示:右键点上 ...
最新文章
- 乘风破浪的马里奥!这个AI带你一口气通29关,你猜连AI都过不去的是哪3关?
- 英特尔10纳米处理器再度跳票,或收缩芯片代工业务
- python下requests的安装、测试、入门资料、官方资料
- QT的QMimeData类的使用
- MySQL复习资料(六)——MySQL-多表联合查询
- python白盒测试_白盒测试方法
- Dnscrypt_wrapper 服务端的安装与配置
- 股票型基金和期货有什么区别?
- 剑指 Offer II 055. 二叉搜索树迭代器
- 全文搜索工具 AnyTXT Searcher(转载)
- 鸿蒙造化什么意思,大家说鸿蒙造化决,和鸿蒙天地有关系吗
- CAPL学习之路-SOME/IP相关函数
- Sublime Text安装及配置Python3
- 计算机网络实验(二)2交换机的基本配置与管理
- 简约毕业论文答辩PPT模板
- 开启更优网络的时代:Po.et迈入主网
- Quartus .sof转换成.jic
- IOS开发之UI进阶(安全区高度)
- MySQL创建S,P,J,SPJ表,以及SQL语句
- 华为不要php开发,华为手机开发者选项的利与弊!有些设置最好不要打开