首页 » 通讯 » “真汉子就应该用 C 编程”!1000行代码特斯拉前AI总监爆火科普 LLM_模子_措辞

“真汉子就应该用 C 编程”!1000行代码特斯拉前AI总监爆火科普 LLM_模子_措辞

雨夜梧桐 2024-08-30 00:30:53 0

扫一扫用手机浏览

文章目录 [+]

如今这年头,徒手写神经网络代码已经不算事儿了,现在盛行手搓大模型演习代码了!
这不,本日,特斯拉前 AI 总监、OpenAI 创始团队成员 Andrej Karpathy 仅用 1000 行简洁的 C 代码,就完成了 GPT-2 大模型演习过程。

几个小时前,Andrej Karpathy 推出了一个名为 llm.c 的项目,旨在用纯 C 措辞演习 LLM,这种方法的紧张上风在于它显著减少了依赖库的体积——不再须要 245MB 的 PyTorch 和 107MB 的 cPython,这样可以使得模型演习过程更为轻量化和高效。
该项目还可以立即编译和运行,并且可以与 PyTorch 的参考实现媲美。

“真汉子就应该用 C 编程”!1000行代码特斯拉前AI总监爆火科普 LLM_模子_措辞 “真汉子就应该用 C 编程”!1000行代码特斯拉前AI总监爆火科普 LLM_模子_措辞 通讯

Karpathy 表示他之以是选择 GPT-2 作为首个事情示例,是由于它大措辞模型鼻祖的定位,亦属当代 AI 堆栈的首次组合。
因此,选择 GPT-2 作为出发点,可以让我们更随意马虎地理解和实践大型措辞模型演习。

“真汉子就应该用 C 编程”!1000行代码特斯拉前AI总监爆火科普 LLM_模子_措辞 “真汉子就应该用 C 编程”!1000行代码特斯拉前AI总监爆火科普 LLM_模子_措辞 通讯
(图片来自网络侵删)

徒手实现 GPT-2 后,Karpathy 将这份代码放到了 GitHub 上,以 MIT 协议开源。
短短几个小时,就超过了 2500 颗星,并且数据还在不断持续上涨......

将大模型事理拆解得无比大略

Andrej Karpathy 是环球人工智能领域的有名科学家,也是 OpenAI 的创始成员和研究科学家。

他于 2009 年本科毕业于多伦多大学,得到打算机科学和物理学学士学位。
2011 年硕士毕业于不列颠哥伦比亚大学,随后前往斯坦福大学 AI Lab(SAIL)读博,师从著名学者李飞飞,是环球最早将深度学习运用于打算机视觉研究的学者之一。

在求学期间,Andrej Karpathy 曾在谷歌和 DeepMind 演习,后来在 OpenAI 刚刚成立时加入并担当研究科学家。
直到 2017 年 6 月,他被马斯克挖去,担当特斯拉人工智能部门主管,直接向马斯克申报请示。
在特斯拉事情的五年里,他主导了特斯拉自动赞助驾驶系统 Autopilot 的开拓。
这项技能对付特斯拉的完备自动驾驶系统 FSD 至关主要,也是马斯克针对 Model S、Cybertruck 等车型推销的紧张卖点。
在各大新闻中,他被誉为“特斯拉的秘密武器”。

去年 Karpathy 曾短暂回到 OpenAI,然后又在 OpenAI 众人忙于内斗时抽空录制了一个长达一小时的传授教化视频《大型措辞模型入门》。

Karpathy 在视频中首先先容了一些 LLM 入门知识,然后以 Meta 推出的开源大模型 Llama 2-70b 为例进行了讲解。
该模型有 700 亿参数,紧张包含两个文件,分别是参数文件,文件大小为 140GB,以及运行这些参数的代码,以 C 措辞为例须要约 500 行代码。

Karpathy 表示只要有这两个文件再加上一台 MacBook,我们就可以构建一个独立的系统,无需联网或其他举动步伐。

大模型演习,可以理解为是对互联网数据进行有损压缩,一样平常须要一个巨大的 GPU 集群来完成。
以 Llama 2-70b 为例的话,便是利用了类似网络爬取的约 10TB 的文本,用 6000 个 GPU ,耗资 200 万美元,演习约 12 天,末了得到根本模型。

根本模型即上图里140GB的“压缩文件”(压缩率约100倍),就即是靠这些数据对天下形成了理解,那它就可以进行“预测”事情了。

Karpathy 之前还分享过他的学习履历,便是开始时要考试测验从 0 开始,写一些原生代码,帮助理解消化知识点。
也便是说,徒手实当代码才是最有效的学习办法。

两年前,Karpathy 就曾基于 PyTorch,仅用 300 行旁边的代码就写出了一个小型 GPT 演习库,并将其命名为 minGPT,用这份代码揭开了 GPT 神秘的面纱。

截图来源:https://github.com/karpathy/minGPT

由于大多数 GPT 模型的实现都过于弘大,而 minGPT 做到了小、干净、可阐明和具有教诲意义,以是 Karpathy 的这 300 行代码是学习 GPT 的最佳资源之一,可以用来深入理解 GPT 是如何事情的。

用 C 措辞实现 LLM

这次,Andrej Karpathy 纯挚通过 C/CUDA 实现大措辞模型演习,且无需 245 MB PyTorch 或 107 MB cPython。
例如,演习 GPT-2(CPU,fp32 单精度)须要在单个文件中利用约 1000 行简洁代码,可立即编译并运行、且与 PyTOrch 参考实现完备匹配。

从某种意义上说,Karpathy 确实在考试测验重新设计 LLM 的架构。
他通过 llm.c 项目探索一种更大略、更高效的演习 LLM 方法。
与现有 LLM 架构比较,这种新架构的紧张亮点包括:

代码简洁性:仅利用约 1000 行代码就能完成 GPT-2 模型的演习,比较之下显著降落了繁芜度。
独立性:不依赖弘大的外部库如 PyTorch 或 cPython,使得支配和运行更加轻便快捷。
高效性:直策应用 C/CUDA 进行编程有望提高打算效率和演习速率。

有网友问 Karpathy 为何不用 Rust,Karpathy 回答说,“我完备理解 Rust 的吸引力。
然而,我仍旧以为 C 措辞非常棒。
它大略、干净、可移植,在审美上也十分幽美。
利用 C 措辞就像直接与机器互换一样。

这种措辞选择也让网友们纷纭感叹:

“我们正在掀起一场 C 措辞复兴!

“真男人就该当用 C 措辞编程。

Karpathy 以更大略、更原始的 C/CUDA 架构来做 LLM 的演习,个中还涉及算法优化、打算资源管理等多个方面。

你会看到,项目在开始时一次性分配所有所需的内存,这些内存是一大块 1D 内存。
然后在演习过程中,不会创建或销毁任何内存,因此内存占用量保持不变,并且只是动态的,将数据批次流过。
这里的关键在于手动实现所有单个层的前向和后向通报,然后将它们串联在一起。

例如,这里是 layernorm 前向和后向通报。
除了 layernorm 之外,我们还须要编码器、matmul、自把稳力、gelu、残差、softmax 和交叉熵丢失。

“一旦你拥有了所有的层,接下来的事情只是将它们串在一起。
讲道理,写起来相称乏味和自虐,由于你必须确保所有指针和张量偏移都精确排列, ”Karpathy 表示。

其余 Karpathy 还在 doc/layernorm/layernorm.md 中附上了短小的利用教程。
里面是一份大略的分步指南,用于实现 GPT-2 模型中的单一层,即 layernorm 层,希望能成为大家理解在 C 中实现大措辞模型各层的空想出发点。

更主要的是,他还用自己的 MacBook Pro(苹果 M3 Max 芯片)演示了全体演习过程,对照他之前的大模型入门教程,就可以轻松理解如今炙手可热的 LLM 是怎么一回事儿了。

演习过程:

首先下载数据集并 token 化。

python prepro_tinyshakespeare.py

输出结果为:

Saved 32768 tokens to data/tiny_shakespeare_val.binSaved 305260 tokens to data/tiny_shakespeare_train.bin

个中各.bin 文件为 int32 数字的原始字节流,用于指示 GPT-2 token 化器的 token id。
或者也可以利用 prepro_tinystories.py 对 TinyStories 数据集进行标注。

原则上,到这里就已经可以开始演习模型。
为提高效率,可以利用 OpenAI 发布的 GPT-2 权重进行初始化,而后加以微调。
为此须要下载 GPT-2 权重并将其保存为可在 C 中加载的检讨点:

python train_gpt2.py

该脚本会下载 GPT-2(124M)模型,对单批数据进行 10 次过拟合迭代,运行多个天生步骤,最主要的是保存两个文件:1)gpt2_124M.bin 文件,包含用于在 C 中加载的模型权重;2)以及 gpt2_124M_debug_state.bin,包含包括 input、target、logits 及 loss 等更多调试状态,对付调试 C 代码、单元测试及确保能够与 PyTorch 参考实现完备匹配非常主要。
现在我们可以利用这些权重进行初始化并在原始 C 代码中进行演习。
首先编译代码:

make train_gpt2

在 train_gpt2 编译完成后即可运行:

OMP_NUM_THREADS=8 ./train_gpt2

大家应根据 CPU 的核心数量来调度线程数量。
该程序将加载模型权重、tokens,并利用 Adam lr 1e-4 运行数次迭代的微调循环,而后由模型天生样本。
大略来讲,所有层都具有前向及后向通报实现,串联在一起形成统一的大型、手动前向 / 后向 / 更新循环。
在 MacBook Pro(苹果 M3 Max 芯片)上的输出结果如下所示:

[GPT-2]max_seq_len: 1024vocab_size: 50257num_layers: 12num_heads: 12channels: 768num_parameters: 124439808train dataset num_batches: 1192val dataset num_batches: 128num_activations: 73323776val loss 5.252026step 0: train loss 5.356189 (took 1452.121000 ms)step 1: train loss 4.301069 (took 1288.673000 ms)step 2: train loss 4.623322 (took 1369.394000 ms)step 3: train loss 4.600470 (took 1290.761000 ms)... (trunctated) ...step 39: train loss 3.970751 (took 1323.779000 ms)val loss 4.107781generated: 50256 16773 18162 21986 11 198 13681 263 23875 198 3152 262 11773 2910 198 1169 6002 6386 2583 286 262 11858 198 20424 428 3135 7596 995 3675 13 198 40 481 407 736 17903 11 329 703 6029 706 4082 198 42826 1028 1128 633 263 11 198 10594 407 198 2704 454 680 1028 262 1027 28860 286 198 3237 323step 40: train loss 4.377757 (took 1366.368000 ms)

现在的天生结果仅给出 token ids,须要将其解码回文本形式:

<|endoftext|>Come Running Away,Greater conquerWith the Imperial bloodthe heaviest host of the godsinto this wondrous world beyond.I will not back thee, for how sweet after birthNetflix against repounder,will notflourish against the earlocks ofAllay

参考链接:

https://twitter.com/karpathy/status/1777427947126936026

https://github.com/karpathy/llm.c

https://www.youtube.com/watch?v=zjkBMFhNj_g

标签:

相关文章

代码库仓库,软件开发的灵魂之地

随着信息技术的飞速发展,软件已经成为现代社会不可或缺的一部分。而代码库仓库作为软件开发的灵魂之地,承载着无数程序员的心血与智慧。本...

通讯 2025-01-08 阅读0 评论0