前几天我们介绍了人工智能大神Andrej Karpathy最新项目llm.c:用1000行纯c代码实现GPT2训练,不用主流的庞大复杂大语言模型训练框架PyTorch
Andrej Karpathy把llm.c开源在了github,并且广发英雄帖,号召全球黑客对llm.c的性能进行进行改进,现在项目迎来了不可思议的重大进展
刚开始时llm.c迭代速度比PyTorch慢4.2倍,llm.c 现在的迭代速度降到了 26.2ms/迭代,与 PyTorch(tf32 正向传递)性能完全匹配。研究人员发现错误,代码错误地在fp32数学模式下调用了cuBLAS。并且ademeure(黑客)贡献了一个针对非常长行(每行50,257个元素,在最后的logits层)的更优化的softmax内核
但hack乐趣并没有结束,因为黑客们还有很多技巧在手。目前llm.c的注意力内核使用的是单纯的注意力机制,而不是Flash Attention,它会具象化(非常大的)pre-attention和post-attention矩阵,大小为(B, NH, T, T)。它还进行了不必要的、尚未融合的GeLU非线性以及注意力内部的排列/解排列操作。
llm.c还没有采取更多的优化措施,例如CUDA Graphs、无损可压缩内存(?)等。从目前更新后的性能图表看起来很乐观,用仅仅2000行纯C代码就能训练出比PyTorch还快的LLM,这目标看起来很可实现了
从预测来看,后续继续优化,到4月23日llm.c的训练迭代速度将是pytorch的好几倍
现在Andrej Karpathy将重点放在反向传递上,这样llm.c就能在 CUDA 中完成整个训练循环
有网友询问Andrej Karpathy能否把llm.c从英伟达GPU移植到mac电脑上,Karpathy认为苹果M芯片是完全不同的东西,但它也有 GPU,代码也能以类似的方式进行构建,但所有的库和细节都会改变(Metal 而不是 CUDA),所以这是一个完全独立的工作
结语
目前只能说这是一个非常有意思的项目,对于像Andrej Karpathy这样的人工智能大神和世界顶尖黑客可以用llm.c完成非常个性化的的大语言模型训练,但这需要极其强悍的软件工程能力,不具有普适性,目前只是针对GPT2,如果换成GPT3,GPT4,GPT5估计代码又要进行针对性的优化和修改,但对于一般的工程师和研究人员还是离不开开箱即用的PyTorch
⭐星标AI寒武纪,好内容不错过⭐
用你的赞和在看告诉我~
有趣👇👇