llm.c - 生のC/CUDAでLLMを訓練する
(github.com/karpathy)- Andrej Karpathyが純粋なC/CUDAで作成したシンプルなLLM訓練コード
- PyTorch/cPythonは不要
- 約1000行の単一ファイルでGPT-2(CPU、fp32)を訓練可能
- 最初の動作実例としてGPT-2を選んだ理由は、最新スタックが初めて結合されたLLMの祖父にあたる存在だから
- すぐにコンパイルして実行でき、PyTorchリファレンス実装と正確に一致
- 現在取り組んでいる内容
- はるかに高速で、おそらくPyTorchに近づく直接的なCUDA実装
- SIMD命令、x86のAVX2 / ARMのNEON(例: Apple Silicon)によるCPU版の高速化
- よりモダンなアーキテクチャ(例: Llama2、Gemmaなど)
1件のコメント
Hacker Newsの意見
プロジェクトに感嘆しつつ、現時点ではCUDA部分がまだ実装されていないことを指摘している。GPUコードはまだリポジトリに存在しない。
JAXで実装された nano GPT を見たあと、今度はC/CUDAで実装されたものを見てみたいとしている。Mojoで nano GPT が可能なのか気になっている。Pythonが他の言語に比べて多くの便利な機能を持っていることは認めている。
CUDAの直接実装はPyTorchよりもはるかに高速になるだろうという期待を示している。GPU-RAMの価格を考えると、CPU速度がどの程度向上するのか気になっている。RTXシリーズにSO-DIMMスロットを追加して必要に応じてRAMを拡張できるのか、技術的な問題があるのかと質問している。
GPT-2を時系列データに適用する方法について、特に共変量(covariates)を含む場合の例があるか質問している。LLMが前のトークンから次のトークンを予測することと、時系列予測は似ていると考えている。
自分の llm.f90 プロジェクトから名前を取ったのではないかと考えている。Karpathyの llama2.c をベースにしつつ、別のアーキテクチャもサポートするように名前を変更したという。おそらく偶然だろうとしている。
LexがAndreと対話したとき、Andreは問題に前向きに執着しつつ「これは必ず存在しなければならない」と言っていたという。このプロジェクトはそうした成果物の一つなのだろうとしている。
最初から始めるなら、このコードが何をしているのか、どう読めばよいのかを理解するために、どんな資料を参照すべきかという質問。LLMに関する知識は非常に限られており、LLM分野では簡潔な変数名が標準なのか気になっている。
このプロジェクトを説明し、テスト学習を実行する方法についてのチュートリアルを作ってくれるとよいという意見。個人のハードウェアで「本物の」モデルを訓練するのは現実的ではないが、実践的な学習経験は必要だとしている。
CUDAがAI実行のための唯一の選択肢として依然定着しているのか、それともAMD/Intel/その他のAI実行手段への対応が増えているのかについて関心を示している。