0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NanoGPT,最简单最快的库来了!

CVer 来源:量子位 2023-01-30 11:49 次阅读

训练/微调中型GPT,最简单最快的库来了!

其名为:NanoGPT。

从名字就能看出是个“纳米武器”,据作者介绍,该库代码简单易读,2个仅300行代码的文件。

现已基于OpenWebText重现 GPT-2 (124M),在单个8XA100 40GB节点上,训练时间为38小时。

值得一提的是,该库发布者是前特斯拉AI总监,李飞飞高徒,Andrej Karpathy。此次发布的NanoGPT,正是他2年前MinGPT的升级版。

2596639a-a03e-11ed-bfe3-dac502259ad0.png

目前,此项目在GitHub所获star已超6k,HackerNews上points也破千。

25a7757c-a03e-11ed-bfe3-dac502259ad0.png

毫无意外地,评论区一片“喜大普奔”。

有网友表示,这才是咱独立开发者喜闻乐见的AI工具。

25b4b0ca-a03e-11ed-bfe3-dac502259ad0.png

还有人对其一直开放传授分享知识的做法,表示感谢。

25bee7ac-a03e-11ed-bfe3-dac502259ad0.png

那么,这个最简单最快的NanoGPT怎么用?

下面展开讲讲。

NanoGPT的打开方式

发布文件里面包含一个约300行的GPT模型定义(文件名:model.py),可以选择从OpenAI加载GPT-2权重。

还有一个训练模型PyTorch样板(文件名:train.py),同样也是300多行。

作者补充道,代码并不难,很容易就能满足大家需求——无论是从头开始训练新模型,还是基于预训练进行微调(目前可用的最大模型为1.3B参数的GPT-2)。

25c96394-a03e-11ed-bfe3-dac502259ad0.png

一个训练实例展示

上手前,需要提前准备好依赖项:

  • pytorch <3

  • numpy <3

  • pip install datasets for huggingface datasets <3 (如果你需要下载和预处理OpenWebText)

  • pip install tiktoken for OpenAI’s fast BPE code <3

  • pip install wandb for optional logging <3

  • pip install tqdm

下载并标记OpenWebText数据集。

$cddata/openwebtext
$pythonprepare.py

这将创建一个train.bin和val.bin文件,将 GPT2 BPE token id放入一个序列中。

然后准备训练,目前脚本默认是尝试重现GPT-2,124M参数版本,但作者更鼓励大家阅读代码查看文件顶部的设置及路径

$pythontrain.py

如需使用 PyTorch 分布式数据并行 (DDP) 进行训练,请使用 torchrun 运行脚本。

比如,要在4个GPU节点上运行,代码如下:

$torchrun--standalone--nproc_per_node=4train.py

要从模型节点中采样,就需将一些检查点写入输入目录中。

$pythonsample.py

据作者目前自己的测试,他在1 个 A100 40GB GPU 上训练一晚,损失约为 3.74。如果是在4个GPU上训练损失约为3.60。

如果在8个A100 40GB节点上进行约50万次迭代,时长约为1天,atim的训练降至约3.1,init随机概率是10.82,已将结果带到了baseline范围。

观察不同参数下训练/验证loss值如下:

25d5f28a-a03e-11ed-bfe3-dac502259ad0.png

至于如何基于新文本微调GPT,作者也简介了方法。

先访问data/shakespeare,查看prepare.py。

下载小型shakespeare数据集并将其呈现为train.bin和val.bin文件(方法前文已介绍),几秒即可搞定。

运行一个微调示例,如下:

$pythontrain.pyconfig/finetune_shakespeare.py

该操作将加载配置参数,覆盖config/finetune_shakespeare.py文件。

作者指出,一般情况下,基本操作就是从GPT-2检查点初始化init_from,再正常训练。

此外,如果手里只有macbook或一些“力量”不足的小破本,作者建议使用shakespeare数据集,然后在一个很小的网络上运行。

先渲染数据;

$cddata/shakespeare
$pythonprepare.py

再用一个较小的网络来运行训练脚本。

比如下面就创建了一个小得多的Transformer(4层,4个head,64嵌入大小),只在CPU运行,在作者自己的苹果AIR M1本上,每次迭代大约需要400毫秒。

$cd../..
$pythontrain.py--dataset=shakespeare--n_layer=4--n_head=4--n_embd=64--device=cpu--compile=False--eval_iters=1--block_size=64--batch_size=8

关于NanoGPT的后续计划,Andrej Karpathy也在网上有所分享。

他将试图让NanoGPT更快复现其他GPT-2模型,然后将预训练扩展至更大规模的模型/数据集中,此外,他还计划改进下微调部分的文档。

转战教育和开源的特斯拉前AI总监

熟悉Karpathy的圈内人肯定知道,他此前是李飞飞高徒,也长期致力于让更多人接触了解神经网络和相关数据集。

2020年8月,他就曾发布NanoGPT前一代,MinGPT,同样旨在让GPT做到小巧、简洁、可解释,同样主打300行代码搞定。

Karpathy另一大身份是前特斯拉AI核心人物。

在马斯克麾下,他历任特斯拉高级AI主管、特斯拉自动驾驶AutoPilot负责人、特斯拉超算Dojo负责人、特斯拉擎天柱人形机器人负责人…

2022年7月,Karpathy Andrej离职,在业内引发不小讨论。他表示,未来将花更多时间在AI、开源技术教育上,比如他做了一档AI课程,现还在更新中。

此番发布NanoGPT同时,Karpathy还下场安抚了下催更党——新视频正从0开始构建,计划2周内发布

25e5cb92-a03e-11ed-bfe3-dac502259ad0.png

最后附上:

NanoGPT项目:https://github.com/karpathy/nanoGPT

Andrej Karpathy课程:https://karpathy.ai/zero-to-hero.html


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    3178

    浏览量

    48731
  • 代码
    +关注

    关注

    30

    文章

    4753

    浏览量

    68370
  • GPT
    GPT
    +关注

    关注

    0

    文章

    352

    浏览量

    15318

原文标题:300行代码搞定!特斯拉前AI总监发布:NanoGPT,最简单最快的库来了!

文章出处:【微信号:CVer,微信公众号:CVer】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    简单认识libmodbus开发

    libmodbus是一个免费的跨平台Modbus,支持RTU和TCP,遵循LGPL V2.1+协议,兼容Linux、Mac OS X、FreeBSD、QNX和Windows等操作系统。它可通过串口
    的头像 发表于 11-13 15:42 170次阅读
    <b class='flag-5'>简单</b>认识libmodbus开发<b class='flag-5'>库</b>

    在KiCad中使用AD的封装(Pcblib)

    。但除此之外,KiCad有一个相当棒的功能:直接加载并直接使用AD的封装,无需转换操作 ”。 加载AD封装 在KiCad中使用Altium Designer的封装(*.pcblib)非常
    的头像 发表于 11-12 12:21 322次阅读
    在KiCad中使用AD的封装<b class='flag-5'>库</b>(Pcblib)

    云数据可以租用吗?完整租用流程来了

    云数据是可以租用的,这是一种合法且便捷的数据存储和管理方式。云数据是云服务提供商提供的各种服务化的关系型数据(如RDS)、文档数据服务等。它被优化或部署到虚拟计算环境中,可以实
    的头像 发表于 10-28 09:54 127次阅读

    什么网线最好最快

    在选择“最好最快”的网线时,需要考虑多个因素,包括传输速度、抗干扰能力、材质、屏蔽效果以及适用场景等。以下是对几种常见网线类型的分析,以及市场上一些知名品牌的推荐: 一、网线类型分析 光纤缆线 传输
    的头像 发表于 10-12 10:09 469次阅读

    一种常用嵌入式开发代码

    语言std,工具等等。具有简单,通用,高效的特点,目的为了学习以及在开发中拿来就用,提高开发效率以及代码可靠稳定性。
    的头像 发表于 09-04 08:06 385次阅读
    一种常用嵌入式开发代码<b class='flag-5'>库</b>

    摆脱自建的繁琐,EDA元件转cadence原理图封装实战技巧

    摆脱自建的繁琐,EDA元件转cadence原理图封装实战技巧
    的头像 发表于 08-24 12:29 2292次阅读
    摆脱自建<b class='flag-5'>库</b>的繁琐,EDA元件<b class='flag-5'>库</b>转cadence原理图封装<b class='flag-5'>库</b>实战技巧

    esp8266传输的速度最快能达到多少?

    stm32通过串口跟esp8266连接,然后用WiFi发送一个文件给存储到stm32的内存卡上,文件大小在10M到50M之间。有没有人测试过,传输的速度最快能达到多少?稳定不?
    发表于 07-09 07:47

    英特尔计划最快2026年量产玻璃基板

    在全球半导体封装技术的演进中,英特尔近日宣布了一项引人注目的计划——最快在2026年实现玻璃基板的量产。这一前瞻性的举措不仅展示了英特尔在技术创新上的坚定步伐,也为整个封装行业带来了新的发展机遇。
    的头像 发表于 07-01 10:38 556次阅读

    鸿蒙开发案例:【图像加载缓存ImageKnife】

    专门为OpenHarmony打造的一款图像加载缓存,致力于更高效、更轻便、更简单
    的头像 发表于 03-23 16:48 807次阅读
    鸿蒙开发案例:【图像加载缓存<b class='flag-5'>库</b>ImageKnife】

    博途用户自定义的使用-的编辑及管理

    前面两篇文章我们介绍了项目及全局。项目没有单独的存放路径,它随项目创建而创建,随项目保存而保存。全局有单独的存放路径,可被保存、归档及解压缩等。
    的头像 发表于 01-24 10:45 1005次阅读
    博途用户自定义<b class='flag-5'>库</b>的使用-<b class='flag-5'>库</b>的编辑及管理

    怎么简单实现由Labview读取的串口数据自增写入mysql5.7数据中?

    怎么简单实现由Labview读取的串口数据自增写入mysql5.7数据中? 已实现:串口数据的接收处理 mysql5.7的安装(已测试数据正常运行) 愿付费解决此问题(QQ:84295699)感谢
    发表于 01-11 22:05

    ADE7880读取电压最快时间是多少?

    现在做一项目,想做市电电压快速检测,请问读取电压最快时间是多少?谢谢!
    发表于 12-27 06:13

    使用STM32 HAL进行GPIO控制的实例

    在基于STM32微控制器的嵌入式系统开发中,GPIO(GeneralPurposeInput/Output)控制是其中最基本、最常见的操作之一。通过使用STM32的HAL,可以轻松地对GPIO进行配置和控制。本文将演示如何使用STM32HAL进行GPIO控制,并提供一
    的头像 发表于 12-21 15:22 3196次阅读

    关于JSON数据

    如何理解JSON数据?作为NoSQL数据的一种类型,JSON数据有哪些优势呢?JSON数据如何运作,它为应用程序开发者带来了哪些价值
    的头像 发表于 12-06 13:46 842次阅读
    关于JSON数据<b class='flag-5'>库</b>

    什么是JSON数据

    如何理解JSON数据?作为NoSQL数据的一种类型,JSON数据有哪些优势呢?JSON数据如何运作,它为应用程序开发者带来了哪些价值
    的头像 发表于 12-02 08:04 832次阅读
    什么是JSON数据<b class='flag-5'>库</b>