C语言训练GPT,大神出手,1000行代码搞定!

来源:量子位

大神卡帕西(Andrej Karpathy)刚“复工”,立马带来神作:

纯C语言训练GPT,1000行代码搞定!,不用现成的深度学习框架,纯手搓。

发布仅几个小时,已经揽星2.3k。

88bb2b3fa80e735696a0f43ea7ac5634.png

它可以立即编译和运行,和PyTorch完全兼容。

卡帕西使用的示例是GPT-2,但Llama 2和Gemma等也适用。

项目发布后,他还给出了从PyTorch迁移到C的教程。

网友们直呼:他甚至都不用C++……

c3eabb078de8f177b05ad3b34d69fa59.png

而且就连怎么让大模型如法炮制的提示词,他也放了出来。现在已经有人在用Devin尝试ing。

9e4b5861496ab7b30b7f31988a849457.png

手动实现每个层前向/反向传播

选择用GPT-2的原因很简单,有模型权重,采用了堆栈式的Transformer模型结构。

项目核心的重点包括:

  • 直接在C/CUDA上训练LLM,速度接近PyTorch

  • 通过在CPU版本中使用SIMD指令(如AVX2和NEON)聊加速CPU版本

  • 支持更先进的架构,比如Llama2和Gemma

卡帕西解释,他在开始时分配了所有所需内存,训练期间内存占用保持不变,只是数据在不同批次之间动态流动。

关键在于手动实现每个单独层的前向传播和反向传播,并将它们串联起来。例如,下面是层归一化(layernorm)的前向传播和反向传播。

a476e771b053de401d052c2ccdb6d8ae.jpeg

一旦有了所有的层,把它们全部串联在一起。

卡帕西表示这写起来非常乏味且痛苦,因为过程中必须保证所有pointer和张量都正确排列。

下图中左边是分配一个单一的一维内存数组,然后将所有模型权重和激活函数都指向它。

右图为非常小心地进行pointer计算。

b3799c99f375d503698d4a05bdb73c8b.jpeg

一旦建立好了正向/反向传播,其他的都好说了。

但是到这部分,卡帕西觉得到了最有趣的部分。

我正在将其逐层移植到CUDA,使其更加高效,甚至可能和PyTorch效率差不多,但不会有过多依赖。

从这里开始还有一些扩展,比如精度从fp32下降到fp16或更低,以及一些更多的层(比如RoFE)来支持更先进的架构。

卡帕西表示,后面还将出一个视频进行更加详细的讲解。

更多的代码在GitHub项目页中有更具体展示。

后面他还加了一个如何从PyTorch迁移到C的教程。

4417286429abff120d307d5373ed101c.png

网友:这和LLM OS有关吗?

前几天,“消失”了一段时间的卡帕西突然发推特,表示自己前段时间戒网去了,总体来说感觉害行a549cb4deb6a20919d948e6ee4ed3734.png

7f6fd40a3fa565640d44799925826097.png

和互联网世界通上信号第4天,他就发布了这一新项目。给网友们来了点小震撼。

在一系列常规的amazing、great之外,大家对新项目主要关心三个方面。

第一,为啥不用Rust?

卡帕西表示他也在学习Rust,但是仍旧认为C语言已经很好了。

它简单、干净、轻便、美观,是最好的语言。

bfa453d9efdfacb674cde83ad2d2bbbd.png

第二,AI程序员能写出同样的项目吗?

值得一提的是卡帕西还给出了一段提示词,表示大家可以用LLM Agent试试看。

目前的模型生成结果没那么好,但也许1、2年之后可以再看看。如果成功了……

“可能就是AGI到来了?”

7a3c39b066e60c87a0230ac7dcf9b0bf.png

现在已经有网友开始用Devin尝试了。

他担心Devin搜到了卡帕西的项目,然后直接抄下来。目前为止Devin还没有这么做。

8506d1906a4606b636ac999ccd681aa7.png

不过卡帕西表示相比于这个,他更担心LLM Agent在1-2年后确实可以解决这个问题了,但是那时各种代码和讨论会以一种别样的方式渗透到训练数据里,导致结果不够令人满意。

6285ecfb1d61a4d1f1184b7a1de81ae7.png

有人补充说,要加强数据管理了。

6c7736bbc3d2e70d70d3973965267f10.png

第三个讨论比较多的话题则是,这个项目和LLM OS有关吗?

fe03f5c5cf1f5028e38f7c0dcd8b7c2e.png

前段时间卡帕西从OpenAI离职,计划要开始推进个人项目。

当时大家都猜测,他要做LLM OS。

8e66ffb291d87294a25801b075a7622c.png

3月底在访谈中,他也再次聊了这个话题。

他表示,现在AGI的路线已经相对清晰了,大家都在如火如荼推进工作,大致来说,每个人都在努力构建“大模型操作系统(LLM OS)”.

我喜欢把它比作一个操作系统。你要准备好各种外围设备,然后把他们连接在一个新的CPU上。这些外围设备包括文本、图像、音频等各种模态。CPU就是语言模型本身。它还要与我们已经构建的所有Software 1.0基础设施相连

我认为大家都在努力构建这样一个东西,然后把它定制成适用于各个经济领域的产品。

cb77af6e58a4f4ae03e3ca8d94b67666.png

现在随着新项目推出,卡帕西的个人项目大概是已经提上日程了。

后续关于LLM.C的项目还会推出更详细的视频讲解版本,大家可以期待一波了~

GitHub地址:
https://github.com/karpathy/llm.c

参考链接:
[1]https://twitter.com/karpathy/status/1777427944971083809
[2]https://twitter.com/karpathy/status/1777493157485437009
[3]https://twitter.com/karpathy/status/1777481372636246491?s=46&t=iTysI4vQLQqCNJjSmBODPw

推荐阅读

欢迎大家加入DLer-计算机视觉技术交流群!

大家好,群里会第一时间发布计算机视觉方向的前沿论文解读和交流分享,主要方向有:图像分类、Transformer、目标检测、目标跟踪、点云与语义分割、GAN、超分辨率、人脸检测与识别、动作行为与时空运动、模型压缩和量化剪枝、迁移学习、人体姿态估计等内容。

进群请备注:研究方向+学校/公司+昵称(如图像分类+上交+小明)

3553d927fa4e1794ac2738b1cad3e42d.jpeg

👆 长按识别,邀请您进群!

ec627b749aab180b43a70cb2fb496807.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值