Ikeraq

jingyaogong/minimind

GPU1枚に載る大きさまで削って、モデルを作る側を一度通しでやる

Apache-2.0 · 商用可 Python ★ 63,938 (今日 +41) 26日前に更新
GitHub で見る jingyaogong/minimind
GitHub の説明(原文)
🧠 Train a 64M-parameter LLM from scratch in just 2h!

どういうものか

言語モデルをゼロから学習させる工程一式を、個人の機材で最後まで走らせられる大きさに縮めた教材です。作るモデルは 64M パラメータほど。MoE(専門家混合)の構成も用意されていて、こちらは全体 198M・実際に動くのは 64M ぶん、という形になっています。NVIDIA 3090 が1枚あれば、事前学習に約1.2時間、教師ありファインチューニングに約1.1時間。合わせて約2.3時間で1周します。ただしこれは軽量版のデータを使ったときの数字で、README も概算だと断っています。本線のデータは軽量版の10倍近い量なので、同じ時間では終わりません。README にある「3元」は電気代ではなく、その時間ぶんの GPU の借り賃(1時間あたり1.3元での計算)で、日本円にすると60円ほどです。

学習の段階は、いま実際に使われているものがひととおり揃っています。事前学習、教師ありファインチューニング、LoRA、DPO による選好の学習、AI のフィードバックによる強化学習=RLAIF(PPO・GRPO・CISPO)、その一種で道具を使わせるマルチターンの Agentic RL、そして蒸留(ブラックボックス/ホワイトボックスの両方)。データは JSONL の同じ形に揃えて配布されていて、事前学習用の小さい版と全量版、道具呼び出しを含む対話データなどがあります。

この構成でいちばん効いているのは、中身が素の PyTorch で書かれていることです。README には「主要なアルゴリズムはすべて PyTorch で直接実装しており、外部ライブラリの高水準な抽象に依存しない」とあります。トークナイザ、LoRA、DPO、強化学習まで自前です。推論の側は transformers や vLLM と組み合わせられます。

本物と同じ順番を、GPU1枚に載る大きさで通す 事前学習 (言葉の続きを覚える) 教師ありFT (対話の形に直す) 選好の学習 (良い答えを選ばせる) 蒸留 (大きい方から写す) どの段も素のPyTorch。3090が1枚あれば通る 〜 減らしたのは規模だけで、工程は減らしていない 〜
横に並んだ4段は、大きなモデルを作るときの順番とほぼ同じです。違うのは下の帯——支えている機材の大きさだけ、という見方をするための図です。

どんなときに使うか

学習の中身を、コードのまま読みたいとき

DPO や GRPO の説明を読んで分かった気になっても、実装を見ると別のことが書いてある、というのはよくあります。ここでは各アルゴリズムが PyTorch で直接書かれているので、ライブラリの引数を追うのではなく、処理そのものを読めます。

手順を一度、最後まで走らせておきたいとき

事前学習からファインチューニングまで数時間で終わるので、途中でどこが詰まるか、何が効いて何が効かないかを、待たずに何周か試せます。大きなモデルで同じことをやると、1回の失敗の代償が大きすぎます。

注意点

できあがるモデルの性能には期待しないこと。 README は、この最小構成を GPT-3 の約 1/2700 の大きさだと書いています。目的は使えるモデルを手に入れることではなく、作り方を通しで確かめることにあります。

「約2.3時間・3元」は、軽量版データを1エポック回したときの数字です。 条件は 3090 が1枚、軽量版の事前学習データと教師ありデータ、1エポック。もともと借り賃としての金額なので、GPU を持っていない人もそのまま見積もりに使えますが、試行錯誤して何周も回せば、当然その回数ぶん掛かります。

主に中国語のプロジェクトです。 README には英語版もありますが、データセットも解説も中国語が中心です。日本語での学習を試したい場合は、データを自分で用意することになります。

ライセンスは Apache 2.0 で、商用利用と改変が明示的に許可されています。

開発の様子

2.2 年
公開してからの期間。2024-07-27 が最初のコミットです
2 回
リリースの回数です
13 人
開発に参加した人数です
26 日前
最後のコミットです
68 件
未解決の Issue とプルリクエストの合計です(GitHub はこの2つを同じ数に含めます)
X で共有 この記事がよかったら

この記事の更新日は 2026-09-02 です。 内容は公開されている README と GitHub のデータに基づいています。 数値は GitHub から取得したもの、警告は判定の基準にある条件での自動判定です。事実誤認を見つけた場合はお知らせください。