OpenAI创始大神手搓千行C代码训练GPT,附PyTorch迁移教程
大神卡帕西(Andrej Karpathy)刚“复工”,立马带来神作:
纯C语言训练GPT,1000行代码搞定!,不用现成的深度学习框架,纯手搓。
发布仅几个小时,已经揽星2.3k。
它可以立即编译和运行,和PyTorch完全兼容。
卡帕西使用的示例是GPT-2,但Llama 2和Gemma等也适用。
项目发布后,他还给出了从PyTorch迁移到C的教程。
网友们直呼:他甚至都不用C++……
而且就连怎么让大模型如法炮制的提示词,他也放了出来。现在已经有人在用Devin尝试ing。
手动实现每个层前向/反向传播
选择用GPT-2的原因很简单,有模型权重,采用了堆栈式的Transformer模型结构。
项目核心的重点包括:
直接在C/CUDA上训练LLM,速度接近PyTorch通过在CPU版本中使用SIMD指令(如AVX2和NEON)聊加速CPU版本支持更先进的架构,比如Llama2和Gemma
卡帕西解释,他在开始时分配了所有所需内存,训练期间内存占用保持不变,只是数据在不同批次之间动态流动。
关键在于手动实现每个单独层的前向传播和反向传播,并将它们串联起来。例如,下面是层归一化(layernorm)的前向传播和反向传播。
一旦有了所有的层,把它们全部串联在一起。
卡帕西表示这写起来非常乏味且痛苦,因为过程中必须保证所有pointer和张量都正确排列。
下图中左边是分配一个单一的一维内存数组,然后将所有模型权重和激活函数都指向它。
右图为非常小心地进行pointer计算。
一旦建立好了正向/反向传播,其他的都好说了。
但是到这部分,卡帕西觉得到了最有趣的部分。
从这里开始还有一些扩展,比如精度从fp32下降到fp16或更低,以及一些更多的层(比如RoFE)来支持更先进的架构。
卡帕西表示,后面还将出一个视频进行更加详细的讲解。
更多的代码在GitHub项目页中有更具体展示。
后面他还加了一个如何从PyTorch迁移到C的教程。
网友:这和LLM OS有关吗?
前几天,“消失”了一段时间的卡帕西突然发推特,表示自己前段时间戒网去了,总体来说感觉害行。
和互联网世界通上信号第4天,他就发布了这一新项目。给网友们来了点小震撼。
在一系列常规的amazing、great之外,大家对新项目主要关心三个方面。
第一,为啥不用Rust?
卡帕西表示他也在学习Rust,但是仍旧认为C语言已经很好了。
第二,AI程序员能写出同样的项目吗?
值得一提的是卡帕西还给出了一段提示词,表示大家可以用LLM Agent试试看。
“可能就是AGI到来了?”
现在已经有网友开始用Devin尝试了。
他担心Devin搜到了卡帕西的项目,然后直接抄下来。目前为止Devin还没有这么做。
不过卡帕西表示相比于这个,他更担心LLM Agent在1-2年后确实可以解决这个问题了,但是那时各种代码和讨论会以一种别样的方式渗透到训练数据里,导致结果不够令人满意。
有人补充说,要加强数据管理了。
第三个讨论比较多的话题则是,这个项目和LLM OS有关吗?
前段时间卡帕西从OpenAI离职,计划要开始推进个人项目。
当时大家都猜测,他要做LLM OS。
3月底在访谈中,他也再次聊了这个话题。
他表示,现在AGI的路线已经相对清晰了,大家都在如火如荼推进工作,大致来说,每个人都在努力构建“大模型操作系统(LLM OS)”.
现在随着新项目推出,卡帕西的个人项目大概是已经提上日程了。
后续关于LLM.C的项目还会推出更详细的视频讲解版本,大家可以期待一波了~
- 免责声明
- 本文所包含的观点仅代表作者个人看法,不代表新火种的观点。在新火种上获取的所有信息均不应被视为投资建议。新火种对本文可能提及或链接的任何项目不表示认可。 交易和投资涉及高风险,读者在采取与本文内容相关的任何行动之前,请务必进行充分的尽职调查。最终的决策应该基于您自己的独立判断。新火种不对因依赖本文观点而产生的任何金钱损失负任何责任。
热门文章
![](https://www.xhz.cn/uploads/20240904/sbuqqw5v1v1.jpg)