知性を、魔法から部品へ——超小型LLM『MiniMind』をゼロから訓練する
約6400万パラメータの小さな言語モデルを、事前学習から強化学習まで自分の手で回せる教材『MiniMind』。手元で試す推論から、レンタルGPUでの訓練、LoRA・RLの階段まで、手順と現実的な注意点を整理します。
📑 目次
ふむふむ。今日は「モデルを使う」ではなく、「モデルを作る」話です。
ChatGPT、Claude、Gemini。いまの私たちは、すごいモデルを毎日「使う」側にいます。使うのは、どんどん簡単になりました。でも、その中で何が起きているのかは、どんどん見えにくくなっている。知性が、魔法みたいに見えてくる——そんなふうに感じている人、チカちゃんの周りにもけっこういるんです。
そんなことを考えながら今週もGitHubを眺めていたら、足が止まる一文に出会いました。
「わずか3元(日本円で60円ほど)のコストと2時間の訓練で、約6400万パラメータの超小型言語モデルを作る」(チカちゃん訳)
これは MiniMind というプロジェクトの紹介文です。GitHubのスターは6万3000を超え、オープンソースで開発が続いている「小さな言語モデルを作るための教材兼実装」。中国語圏を中心に、じわじわと広がっています。
「え、60円でモデルが作れちゃうの?」——ちょっと待って、そこには大事な条件がいくつもついています。でも、その条件をぜんぶ読んだうえで、チカちゃん的には「これは今週いちばん面白い教材だ」と思いました。今日は、MiniMindで何ができるのか、どうやって動かすのか、そしてどこでつまずくのかを、順番に整理していきます。
MiniMindとは——「作る側」に戻るための教材
このプロジェクトを理解するのに、いちばんいいのは作者の言葉だと思います。READMEには、こんなたとえが出てきます。
「レゴで自分で飛行機を組み立てることは、ファーストクラスに乗って飛ぶより、ずっと興奮する」(チカちゃん訳)
ふむふむ。これは「便利さ」の話ではなく、「理解」の話なんですよね。
ふつう、LLMの入門というと「既存のモデルをLoRAで微調整してみる」で止まりがちです。でもMiniMindが目指しているのは、そのずっと手前——ゼロからの訓練。トークナイザ、事前学習、教師あり微調整(SFT)、LoRA、選好学習(DPO)、強化学習(PPO / GRPO / CISPO)、ツール呼び出しのRL、蒸留まで。ふつうは論文とフレームワークの向こう側にある工程を、ひととおり自分の手で回せる大きさに縮めてあります。
核になっているのは、主要なアルゴリズムがPyTorchネイティブで書かれていること。transformersやtrl、peftのような高レベルの抽象に任せず、学習ループやLoRAやDPOの中身がリポジトリの中にそのまま置いてある。つまり、中で何が起きているかが、そのまま読めるんです。「動くものを使う」のではなく「動く仕組みを読む」ための教材——ここが、他の入門と決定的に違うところです。
作るモデルの名前は minimind-3。パラメータ数は約6400万(64M)で、READMEいわくGPT-3の約2700分の1の大きさ。構造はQwen3 / Qwen3-MoEの系譜に合わせてあり、8層・隠れ次元768・語彙6400という小ささです。Dense版のほかに、専門家混合(MoE)版(198M-A64M)も用意されていて、こちらも同じ手順で回せます。
64Mって、どれくらい小さいんでしょう。GPT-3が1750億パラメータですから、約2700分の1。要は、手元のマシンでも扱えるサイズ、ということです。この小ささが「おもちゃ」に見えるか「実験台」に見えるかで、このプロジェクトの見え方が変わってきます。
まずは推論から——小さな頭脳とおしゃべりする
いきなり訓練、の前に。READMEも「推論 → 訓練」の順で案内しているし、なにより「この小ささで、どんな言葉が出てくるのか」を先に見たほうが、後の学習の意味が腹に落ちます。
いちばん手軽な入口は、Ollamaです。公式がOllama用のモデルを配っているので、一行で始められます。
ollama run jingyaogong/minimind-3
64Mなのでサイズも小さく、ダウンロードも軽く済みます。返ってくる答えは……たどたどしい。知識もあやふやです。でも、このたどたどしさが、逆にいいんです。大きなモデルでは隠されていた「言葉を組み立てている感じ」が、そのまま出てくる。ここ、面白いところです。
Python環境でじっくり動かす場合は、こんな流れになります。
git clone --depth 1 https://github.com/jingyaogong/minimind
cd minimind
pip install -r requirements.txt
# モデル(Transformers形式)を取ってくる
git clone https://huggingface.co/jingyaogong/minimind-3
# 対話を始める
python eval_llm.py --load_from ./minimind-3
「考えてから答える」モードを試すなら、こんなふうに。
python eval_llm.py --load_from ./minimind-3 --open_thinking 1
ブラウザのチャットUIが欲しい場合は、モデルをscripts/ディレクトリにコピーしてから、Streamlitのデモを起動します。
cp -r minimind-3 ./scripts/minimind-3
cd scripts && streamlit run web_demo.py
(Streamlitのデモにはpython>=3.10とstreamlitパッケージが必要です。モデルフォルダをscripts/配下に置くのがお約束なので、忘れずに。)
動作環境のメモ: 推論はPython 3.10前後+PyTorch(作者の環境はUbuntu 20.04 / CUDA 12.2)。訓練はNVIDIA GPU(RTX 3090級以上)が現実的な目安です。とはいえ推論だけなら、この規模のモデルは比較的軽い部類です。
本題——ゼロから訓練する
さて、本題です。ゼロからの訓練は、思っているよりずっと短い手順で始められます。
必要なデータは、まず軽量版の2ファイルだけ。
pretrain_t2t_mini.jsonl(1.2GB)——事前学習用sft_t2t_mini.jsonl(1.6GB)——SFT用
これらをダウンロードして、リポジトリの./dataset/に置きます(ModelScopeとHugging Faceの両方に公開されています。10GB・14GBという本編版のデータもありますが、最初は軽量版で十分です)。
あとは、trainerディレクトリで2本のスクリプトを走らせるだけ。
cd trainer
# 1. 事前学習——大量のテキストから「言葉のパターン」を学ぶ段階
python train_pretrain.py
# 2. SFT——対話の型と、指示への従い方を学ぶ段階
python train_full_sft.py
途中で中断しても、--from_resume 1を付ければチェックポイントから再開できます。GPUが複数ある場合はtorchrun --nproc_per_node N train_xxx.pyの形で並列化もできます。
訓練が終わったら、リポジトリ直下に戻って、
python eval_llm.py --weight full_sft
これで、「ゼロから作った自分のモデル」と会話できます。ふむふむ、ここまでが本当に短い手順なんです。すごいのは手順の短さそのものではなくて、この短さで「本物の工程」を通っていることなんですよね。
「2時間・3元」を、ちゃんと読む
ここで、最初のキャッチコピーに戻りましょう。「3元と2時間」——チカちゃん、この手の数字はちゃんと中身まで読みたい派です。
READMEに載っている内訳は、こうなっています(軽量データ使用時・単一RTX 3090での概算)。
| 段階 | 時間の目安 | 費用の目安 |
|---|---|---|
| 事前学習 | 約1.21時間 | 約1.57元 |
| SFT | 約1.10時間 | 約1.43元 |
| 合計 | 約2.31時間 | 約3.0元 |
つまり「2時間・3元」は、レンタルしたRTX 3090を1時間1.3元で借りた場合の、事前学習とSFTの合計、という条件付きの数字です。「3元」は電気代ではなく、貸しマシンの借り賃。日本円にするとおよそ60円です。
ひとつ面白いのは、この「2時間」の説明がREADMEの中で少し揺れていること。最初の脚注には「SFT段階の1エポック」と書いてあるのですが、内訳表のSFTは約1.1時間で、2時間台に乗るのは事前学習と合わせたときなんです。細かい話ですが、「キャッチコピーの数字は、内訳まで読んでから信じる」——これ、チカちゃんがこの種のプロジェクトでいちばん大事にしている習慣です。
そして、いちばん大事な条件がもうひとつ。この数字は、あなたのノートPCの話ではありません。訓練にはNVIDIA GPU(RTX 3090級)が現実的な前提で、READMEもCPUやMPSでは「速度と互換性の差がとても大きい」と注記しています。手元ではコードを読み、訓練はレンタルGPUで回す——それが作者の想定している「軽さ」なんですよね。
ここが面白い——訓練の「階段」がひとつながりに見える
チカちゃんがこのプロジェクトで「おっ」と思ったのは、結果の性能ではなく、階段の並び方です。事前学習とSFTの先には、ふつうなら論文とフレームワークの向こうに隠れている段が、ぜんぶ独立したスクリプトとして並んでいます。
| 段階 | スクリプト | 学べること |
|---|---|---|
| LoRA微調整 | train_lora.py | 少ないデータで分野に適応させる(CPUでも比較的軽く回る) |
| 選好学習(DPO) | train_dpo.py | 「良い答え・悪い答え」のペアから好みを学ぶ |
| 強化学習(RLAIF) | train_ppo.py / train_grpo.py | 報酬を頼りに、自分で試して磨く |
| Agentic RL | train_agent.py | ツール呼び出しを含む多ターンを強化学習 |
| 蒸留 | train_distillation.py | 強いモデルの物言いを、小さい子に移す |
そして仕上げに、この小さなモデルをOpenAI互換のAPIサーバーとして立てられます。
cd scripts && python serve_openai_api.py
READMEの例では、ローカルの8998番ポートに「専用ミニAPI」が立ちます。FastGPTやOpen WebUIのような既存のUIから、自分の訓練したモデルにつなげられる設計です。モデル本体・訓練・RL・サービングが一つのリポジトリで完結している教材は、なかなか見かけません。
それから、READMEが「できないこと」も正直に書いているのが、チカちゃんは好きです。たとえば——
- 64M級のモデルで強化学習をやると、「報酬まばら問題」にぶつかる(回答のスコアがほぼ横並びになって、学習信号が消えてしまう。小学生に大学入試を解かせるようなもの、とREADMEは言います)
- ツール呼び出しに特化させた
agent重みは、ツールタスクは上手くなる一方で、事実的な質問では逆に「自信満々に間違える」ことが増える(いわゆるアラインメント税)
「すごい」だけでなく「訓練すると、ここでつまずくよ」まで書いてある。これ、教材として本当に誠実だと思うんです。
気をつけること
ここからは、いつもの「でも、ちょっと待って」の時間です。
- 日本語モデルには、そのままではなりません。 学習データもモデルも中国語が中心です。日本語で話す小さなモデルが欲しい場合、このリポジトリで学べるのは「作り方」で、言語を変えるならデータの差し替えが前提になります。主眼は「パイプラインを一度通すこと」にあると思ってください
- 性能は「規模なり」です。 READMEみずから、ベンチマークの結果を「娯楽」と注記しています。64Mのモデルに事実知識や流暢さを期待すると、がっかりします。逆に言えば、「知識を詰め込まなくても、対話の形はここまで作れる」という見本なんです
- 訓練はNVIDIA GPU前提が現実的です(前述)。MacやCPUでも走らせることはできますが、速度と互換性の壁があります。まずはコードを読むだけでも、価値は十分にあります
- 開発のスピードが速い。 仕様もコマンドも変わっていきます。動かす前に、現行のREADMEで最終確認を
- ライセンスはApache-2.0。 コードは自由に使えますが、学習データはデータごとに条件が異なります。自作データで訓練する場合も含めて、確認を忘れずに
どんな人に向いている?
- LLMの中身を、一度通しで眺めたい人——本命です。各段が「読める」教材として、これ以上ない入口だと思います
- 学ぶ側から、教える側に回りたい人——リポジトリの構造そのものが、教材設計のお手本になります
- 小さいモデルでRLを試したい人——0.1B級で報酬設計をいじれる、貴重な実験場です
- ローカルLLMが好きな人——推論はOllamaで手軽に。手元に置く「ミニモデル」として愛でる楽しみもあります
逆に、「とにかく使える高性能モデルがほしい」「環境構築はしたくない」という人には向きません。このプロジェクトは、手間の先に「理解」があるタイプです。刺さる人には、とことん刺さります。
まとめ——「性能」と「理解」は、別の座標軸
「64Mのモデルなんて、おもちゃでしょ?」——はい、その見方も正しいと思います。実用の道具として見たら、たぶんそうなんです。
でも、ここで反対側の視点をもう一度置いてみましょう。いまのAIの流れは、性能の座標軸でずっと競争しています。大きく、賢く、速く。それはそれで、大事な競争です。でもMiniMindが差し出しているのは、別の座標軸の冒険——理解のための小ささ。
大きなモデルを使い続けていると、知性は魔法に見えてきます。でも、小さなモデルを一度自分の手で組み立てると、その魔法が「部品の組み立て」に変わっていく。魔法が消えるのは寂しいことではなくて、読めるようになる、ということなんですよね。
60円と、数時間と、少しの勇気(とレンタルGPU)。あなたも一度、「作る側」の景色を覗いてみませんか。チカちゃんはまず、Ollamaの小さな子とおしゃべりするところから始めてみます。
あなたは、何を組み立ててみたいですか。答えは急がなくて大丈夫。問いが残るということは、まだ冒険が続いているということなので。
参考URL
- MiniMind リポジトリ → https://github.com/jingyaogong/minimind
- MiniMind 公式ページ(デモ・紹介) → https://jingyaogong.github.io/minimind
- minimind-3 モデル(Hugging Face) → https://huggingface.co/jingyaogong/minimind-3
- MiniMind コレクション(モデル・データセット) → https://huggingface.co/collections/jingyaogong/minimind
- minimind-3(Ollama) → https://ollama.com/jingyaogong/minimind-3
- GitHub Trending(週次) → https://github.com/trending?since=weekly
本記事は公開情報をもとにした個人的な技術メモです。MiniMindは活発に開発中のプロジェクトで、仕様・コマンド・データ構成・数値・料金の目安は変わります。導入前に公式リポジトリとREADME、ライセンスを確認してください。本文中の時間・費用は「単一RTX 3090・軽量データ使用時」のREADME記載の概算で、実際の値は環境と時期によって変わります。スター数などは執筆時点(2026年10月9日)の表示に基づきます。
思索は冒険です。今日の話も、その入口のひとつでした。
- インターネット上のツールは第三者が提供するものです。開発工程や配布経路を悪用した攻撃(サプライチェーン攻撃)が仕掛けられる可能性もゼロではありません。ご利用の際は公式リポジトリの情報をご確認いただき、自己責任でお使いください。
- AIに関する技術や情報は急速に変化します。本記事の内容が公開後に古くなる可能性があります。各サービスの公式ドキュメントや最新情報をご確認ください。