世界を動かす技術を、日本語で。

NanoChat – 100ドルで買える最高のChatGPT

概要

nanochat は、約 $100 で構築できるChatGPT風LLMの フルスタック実装依存性が少なく、1台の8XH100ノード上で 学習から推論、Web UI提供まで 一括実行。 低コスト・短時間 で自分専用のLLMを体験可能。 拡張性・可搬性 が高く、教育用途や研究にも最適。 簡潔でハックしやすいコードベース が特徴。

nanochatとは

  • 低コストLLM構築 を目指したChatGPT風AIチャットボット実装
  • 依存性が少なく、全工程を 1台の8XH100ノード で完結
  • スクリプト(speedrun.sh)一発 で、 トークナイズ・事前学習・微調整・評価・推論・Web UI提供 まで自動化
  • Eureka Labs によるLLM101nコースの 最終課題 として開発

クイックスタート

  • 8XH100ノード(例:Lambda)を用意し、 speedrun.sh で全自動パイプライン実行
  • 実行例:
    • bash speedrun.sh
    • スクリーンセッション利用:
      • screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh
  • 4時間程度 で学習・推論まで完了
  • 完了後、 Web UI で自作LLMと対話可能
    • 仮想環境有効化: source .venv/bin/activate
    • サーバ起動: python -m scripts.chat_web
    • 指定URL(例:http://209.20.xxx.xxx:8000/)にアクセス

モデルの規模と性能

  • $100ティア: 約4e19FLOPs、幼稚園児レベルの対話能力
  • $300ティア(d26モデル): 12時間学習、GPT-2 COREスコアを僅かに上回る性能
  • $1000ティア: 約41.6時間学習、現状は未サポート
  • 学習データやバッチサイズ の調整で大規模モデルにも対応可能
    • 例: --depth=26--device_batch_size=16 など
  • VRAM不足時 はバッチサイズを適宜減少

実行環境と柔軟性

  • Ampere 8XA100ノード でも動作(速度は低下)
  • 単一GPU でも動作可能(8倍時間がかかる)
  • PyTorchベース で、xpu/mps等にも対応(要調整)
  • 80GB未満のGPU では--device_batch_sizeを減らすことで対応

レポート・評価指標

  • 実行後、 report.md に評価指標・メトリクスが自動生成
  • 例:
    • Characters, Lines, Files, Tokens, Dependencies
    • 各種ベンチマーク(ARC, GSM8K, HumanEval, MMLU, ChatCOREなど)

質問・ドキュメント活用

  • コード全体を1ファイルにパッケージ化 し、他LLMに質問可能
    • 例: files-to-prompt . -e py -e md ... > packaged.txt
  • DeepWiki でリポジトリを直接検索・質問可能
    • URLのgithub.comdeepwiki.comに変更

テスト・コントリビュート

  • テストコード も一部用意(例: tokenizerテスト)
    • 実行例: python -m pytest tests/test_rustbpe.py -v -s
  • 貢献歓迎: < $1000予算でのエンドツーエンドLLM強化が目標
  • シンプルで可読性重視のコードベース
    • 巨大な設定ファイルや複雑な分岐は排除

謝辞・ライセンス

  • nanoGPTmodded-nanoGPT から着想・実装を一部拝借
  • HuggingFace, Lambda, Alec Radford 等への感謝
  • MITライセンス で公開
  • 論文引用例あり

参考リンク

Hackerたちの意見

わあ、Eureka Labsのコースにどうやって申し込むの?費用はいくらなの?

カーパシーが言ってたけど、ナノチャットはEureka Labsが開発中のLLM101nコースの集大成プロジェクトになるらしいね。まだ進行中なのかな?他に情報は見つからなかった。

まだ開発中で、残ってる作業はナノチャットの調整(現在の状態はしっかりしたv0.1)と、学生が隠れた複雑さを「アンロック」できるようにするための中間プロジェクトの最終化だね:torch.Tensortorch.dist.backward().compile()など。それから、もっとオペレーションが重い部分も。

人類に貢献する最良の方法についてずっと考えてたんだ。助ける人数 × 助ける量だと思う。カーパシーがやってることは、それを達成するための最高のレバレッジの一つだと思う。今の世界はオープンソースプロジェクトの上に成り立ってるから、どこにいても誰でもプログラミングを学んで素晴らしいソフトウェアを作れるんだよね。AI/LLMの波でも同じことが起こるといいな。

彼のANN/LLMの基礎からの動画は、すごくおすすめだよ。彼はわかりやすいインストラクターだし、コードもすごくPythonicで、簡潔だけど読みやすいバランスが取れてるんだ。ただ、Pytorchのベクトル化の部分はちょっと複雑だけど、彼のせいじゃないしね。だから、彼のコードスタイルを見て真似するだけでも、みんなにとってプラスになると思うよ。

技術が悪用されて、フェイクニュースや誤情報が増えるんじゃないかって心配してる。

そんなに簡単だったらいいのにね。

ソフトウェアの自由な伝統って、僕がすごく好きなところなんだけど、LLMでは高いトレーニングコストと推論に必要な強力なハードウェアのせいで、続けられるかどうか疑問だよね。ソフトウェアを書くのが、LLMのホストに家賃を払わないといけなくなるような気がする。多くの現代のソフトウェアツールのように、誰でもアクセスできる形でローカル推論ができる方法を見つける可能性もあるけど、高いトレーニングコストを考えると、それは難しいと思う。LLMに頼るようになると、プログラミングを手動で学ぶための初心者向けのチュートリアルやコンテンツが減ってしまうんじゃないかとも心配してる。

Eureka Labs: https://github.com/EurekaLabsAI アンドレイは本当に多才な人だね。追いかけるのがすごく楽しい!

こちらがカーパシーの発表ポスト[0]で、少し追加のコンテキストがあるよ。[0] https://x.com/karpathy/status/1977755427569111362

ありがとう!それもトップテキストに入れておくね。

LLMの達人アレック・ラッドフォードにアドバイスを感謝。ああ、アレックとアンドレイのポッドキャストがあったら、インターネットが壊れちゃうだろうな…ただの思いつきだけど…GPT1の栄光の日々から、今はGPT3を4時間で作ってるなんて。

お願い、お願い!これが完璧だよ。

「100ドルでトレーニングできる」ってことだよね。いつか専門的なドキュメントのセットで試してみたいな。コストは、80GBのVRAMを持つGPUをレンタルすることだと思うけど、趣味や学生には厳しいよね。クラウドがGPUの計算能力を寄付してくれない限りは。

例えば、40GBのRAMがあったら、全く動かないの?それとも、トレーニングに倍の時間がかかるだけ?

80GBのVRAMを持つGPUは、一般的なクラウドで1時間あたり約1〜3ドルだよ(つまり、ビッグ3以外のベアメタルプロバイダーね。例:https://getdeploying.com/reference/cloud-gpu/nvidia-h100)。先進国の中流階級のユーザーには手が届くと思う。

「GPUが80GB未満の場合、いくつかのハイパーパラメータを調整しないと、OOM(メモリ不足)になっちゃうよ。スクリプトの中の--device_batch_sizeを探して、収まるまで減らしてみて。例えば、32(デフォルト)から16、8、4、2、あるいは1に。これなら24GBのGPUでも動きそうだね。バッチサイズ8だと20GBのメモリが必要だよね?…おそらくめっちゃ時間がかかるだろうけど。」

そうだね、VRAMが足りないときは、モデルのトレーニングや推論をする際にデータをストリーミングすることはできるけど、遅くなるのがめっちゃ目立つよね。これはCPUのコードでも同じで、ハイパフォーマンスコンピューティングでは帯域幅の最適化がめっちゃ重要なのもそのため。計算能力はほとんどいつも帯域幅よりもかなり大きいからね。AVX512対応のCPUで適切なコア数があれば、毎秒数テラバイトのFP64演算が簡単にできるけど、通常はメモリ帯域幅に制限されちゃう。最近はLLMを使ったGPUのおかげで、これがもっと多くの人に知られるようになったよ。

今週末、nanoGPT(https://github.com/karpathy/nanoGPT)に手を出してみたよ。古いけど素晴らしい学習の練習で、約80万パラメータのクソみたいなシェイクスピアGPTをCPUで作ってトレーニングするんだ。結果は予想通りで、あんまり良くないけど、特にディープラーニングのプロじゃなくて、ちょっといじってみたい人には魔法を感じ始められるよ。週末のnanoGPTについてブログ記事を書き始めたけど、まだ完成してない…ここにリンクできたらよかったな、まあいいや。

シェイクスピアのコードをちょっと調整して異なるトレーニングデータを使うと、マジック・ザ・ギャザリングのコマンダーデッキを生成するのにいい感じだよ。

これは役に立つ練習だね。良い機械学習の仕事は、まず小規模で検証されることが多いから。この新しい例はさらに進んで、指示に従うことやツール使用のSFT、RLVRも追加されてる。より有用なベースラインになってるよ。

じゃあ、実際に心理学の本や資料、レポート、ケーススタディ、研究論文を全部トレーニングして、専門的な質問があるときに1xH100ノードでオンデマンドで動かせるってこと?

できるけど、事前にトレーニングされたモデルでファインチューニングやRAGを使うよりも、ずっと性能が悪くなるよ。データセットが小さいからね。

確かにそれはできるけど、パフォーマンスはひどいことになるよ。この用途には、小さな事前トレーニングされたモデルを使って、あなたの資料でファインチューニングするか、RAGのワークフローを使う方がずっと良いと思う。

そうだね、ただ、もう少し一般的なコアモデルが、興味のあるテキストを作業コンテキストに持ち込むための他の方法でさらに強化されると、パフォーマンスが良くなるかもしれない。テキストを統合するための他の方法は、RAGの一種や、Appleの最近の「階層的メモリ」のようなアイデアかもしれないね。