nanochat-jp を RTX 5070 Ti 1枚で学習:事前学習67分で「日本の首都は」に「東京です」。CORE は公式8層とほぼ同じだったが、会話のあとの質問では「一番高い山」に「大山」と答え、JamC-QA は4.67%(公式8層 20.00%)
日本語の小さな言語モデルを一から学習できる nanochat-jp(Tohoku NLP Group)を、家の PC の RTX 5070 Ti(16GB)1枚で動かしました。公式は H100 4枚を想定しています。データは v4 の全ファイルの約2%だけを使い、学習の途中で同じ問いを何度も入れて答えの変わり方を見たうえで、公式の8層・22層のモデルと比べています。公式の学習を再現したものではありません。
YouTube のタイトル:nanochat-jpをRTX 5070 Tiで学習:日本語AIは家のGPU 1枚で作れる? 67分で「首都は東京」|第15回
この回で試したこと
| PC | Intel Core Ultra 7 265K、NVIDIA RTX 5070 Ti(16GB)、Windows 11。WSL2 の Ubuntu(Python 3.12.3)。ほかのアプリも動いたまま(学習前の GPU メモリ使用 約1.3〜2.2GB) |
|---|---|
| 道具 | nanochat-jp(コードは Apache-2.0、nanochat 由来の部分は MIT)。PyTorch 2.14.0(公式の uv.lock は 2.9.1。第14回のキャッシュを使うため替えた) |
| 公式の想定 | H100(94GB)×4・1ノード。既定は depth 22、バッチ 32 |
| データ | 事前学習:v4 コーパス(106ファイル 134.7GB)の先頭3ファイル 3.64GB を用意し、実際に読んだのは約3.0〜3.3GB(全ファイルの約2%)。会話の学習(SFT):3種類のデータ |
| 学習の設定 | depth 8、バッチ 16、注意の範囲の設定は L(公式は SSSL。学習の前の短い試験で、L のほうが約1.55倍速かったため結果を見る前に決めた)、ratio 20、3,200回、838,860,800 トークン |
| 試し方 | 学習の前に試し方を保存した。途中の 0・50・100・250・500・1000・2000・3200回で同じ問いを温度0で1回ずつ入れた。SFT のあと、手元・公式8層・公式22層に同じ質問を温度0・128トークンまでで入れた。公式の評価スクリプト(CORE、chat_eval)でも測った |
| ダウンロード | 約9.1GB(環境 約0.6GB、事前学習データ 4.86GB、SFT 約0.67GB、評価 0.05GB、公式 d8 約0.65GB、公式 d22 約2.25GB) |
| 配布 | 学習したモデルは配布しない。動画で見せたのは出力の一部 |
結果(実測)
| 始めるまで | 環境づくり 約6.5分。公式の v4 のトークナイザには token_bytes.pt がなく、学習が止まった(README の手順には書いていない)。python -m scripts.tok_prepare で直った |
|---|---|
| バッチ 32(公式の既定) | CUDA driver error: device not ready で止まった。compile なしでも同じ。バッチ 16(勾配の累積 8)にすると動いた。メモリ不足と見ているが、エラー文は OOM ではなく、確かめてはいない |
| 事前学習 | 3,200回、実時間 70分17秒(学習の時間 67.02分)。真ん中 約20.9万トークン/秒。検証 bpb 2.71 → 0.69 |
| SFT(会話の学習) | 8.36分。800回を指定したが、データを1周して412回で止まった |
| GPU の電気 | 事前学習 321.2Wh(平均 274W、最大 286W)、SFT 42.4Wh、合計 0.364kWh。1kWh=31円と仮定して約11円(GPU だけ)。最高 66℃、GPU メモリの最大(他のアプリの分を含む)10,924MiB |
| 「日本の首都は」の変わり方 | 0回=意味のない語の列/50回=「」のくり返し/100回=日本銀行の銀行/250回=日本の首都です/500回=2017年の首都/1000回=東京と大阪の2つの都市/2000回=世界の首都で中心が東京/3200回=東京です |
| ほかの問い(3200回) | 「昔々、あるところに」→「ある小さな町の図書館で、古い本が盗まれました」。「富士山の高さは」はどの回でも高さを答えなかった |
| SFT のあとの質問(手元/公式8層/公式22層) | 一番高い山:大山/富士山(標高は約7,777m などの誤り)/富士山 3,776m。2+3:くり返し/10/5。あなたは誰:私はAIであり…/人工知能(AI)…/ChatGPT、OpenAI が開発(誤り) |
| CORE(各タスク最大200問) | 手元 100回 −0.0094、500回 0.033、1000回 0.0454、2000回 0.0593、3200回 0.1033。公式 v3-d8 0.1018 |
| CORE(各タスク最大500問) | 手元 0.0936、公式 v3-d8 0.0860。問題によって上下があり、JSQuAD は公式が上(0.248/0.108)、PIQA は手元が上 |
| chat_eval(温度0、64トークンまで、各300問) | JMMLU 手元 19.67%、公式8層 20.33%。JamC-QA 手元 4.67%、公式8層 20.00% |
| JamC-QA の中身 | 記号が取れなかった問い 手元 237/300、公式8層 51/300。記号を書いた問いの正解は 手元 22.2%(63問)、公式8層 24.1%(249問)。手元は「岐阜県」のように選択肢の文字を書く例が多い |
| 1024トークンまでで測り直し | 手元 JMMLU 19.33%、JamC-QA 4.67%(記号なし 237)。打ち切りは主な原因ではなかった |
わかったこと
- 公式は H100 4枚の想定だが、RTX 5070 Ti 1枚でもバッチを 32 から 16 に下げると学習できた
- 事前学習 67分で、「日本の首都は」の続きは「日本銀行の銀行」「2017年の首都」などを経て、3200回で「東京です」になった
- 公式の評価 CORE は手元 0.1033、公式8層 0.1018 でほぼ同じだった(1回ずつで揺れがあるので「手元が上」とは言わない)
- 会話の学習のあと、手元のモデルは「一番高い山」に「大山」と答え、計算や敬語の問いでは同じ文をくり返した
- JamC-QA は手元 4.67%、公式8層 20.00% と差がついたが、手元は300問中237問で答えの記号が取れなかった。記号を書いた問いだけの正解は 22.2% と 24.1% で近い
- 公式22層は「あなたは誰」に ChatGPT・OpenAI が開発と答えた(理由は調べていない)
- GPU の電気は合計 0.364kWh、1kWh=31円の仮定で約11円だった
結果の範囲
- データは v4 の全106ファイルの約2%、学習も短く、公式の学習を再現したものではありません
- 1台の PC の結果です。ほかのアプリも動いたままで測りました
- 公式とは条件が違います:注意の範囲の設定(手元 L、公式 SSSL)、コーパス(手元は v4 の一部、公式8層は v3)、会話の学習(手元 3種類・412回、公式 11種類・2,418回)
- CORE は1回ずつで、タスク数が少なく揺れがあります
- JamC-QA の差の多くが答えの形(記号を書かない)によるものだというのは推測です。学習の量の違いだけでは説明していません
- chat_eval の条件(温度0、64トークンまで、300問)は「結果の並びを見てから足す」と計画に書いた物差しで、公式の例(温度0.6、1024トークンまで)とは違います。公式 README の図の値(22層、JMMLU 31.2、JamC-QA 25.5)とも条件が同じではありません
- 試し方から変えた点:PyTorch を 2.14.0 に、設定を L に(学習の前に決定)、途中の保存のステップを 3,200回に合わせて変えた(結果を見る前)、SFT は 800回のつもりが 412回で終わった
- バッチ 32 で止まった理由がメモリ不足かは確かめていません
- 電気は GPU の分だけで、PC 全体は測っていません。単価は仮定です
- 質問の答えは温度0で各1回の結果です。公式22層の東京と大阪の人口の数は確かめていません
よくある質問
nanochat-jp は家の GPU 1枚で学習できますか?
この回では RTX 5070 Ti(16GB)1枚で、depth 8 のモデルを事前学習 67分(3,200回)、会話の学習 8.36分で作れました。公式の既定のバッチ 32 では CUDA driver error で止まり、16 に下げると動きました。公式の想定は H100 4枚です。
67分の学習でどのくらい話せるようになりますか?
「日本の首都は」の続きは3200回で「東京です」になりました。ただ、会話の学習のあとの質問では「一番高い山」に「大山」と答え、計算や敬語の問いでは同じ文をくり返しました。データは v4 の全ファイルの約2%です。
公式のモデルと比べてどうでしたか?
公式の評価 CORE は手元 0.1033、公式8層 0.1018 でほぼ同じでした。JMMLU は 19.67% と 20.33% で近く、JamC-QA は 4.67% と 20.00% で差がつきました。ただし、注意の範囲の設定、データの版、会話の学習の量が違い、条件は同じではありません。
JamC-QA で差がついたのはなぜですか?
手元のモデルは300問中237問で答えの記号が取れず、「岐阜県」のように選択肢の文字を書く例が多くありました。記号を書いた問いだけの正解は手元 22.2%、公式8層 24.1% で近い値でした。差の多くが答えの形によるというのは推測で、確かめてはいません。
電気代はいくらかかりましたか?
GPU の電気は事前学習と会話の学習の合計で 0.364kWh でした。1kWh=31円と仮定すると約11円です。PC 全体は測っていません。
ダウンロードはどのくらい必要ですか?
この回では約9.1GB でした(事前学習データ 4.86GB、公式8層 約0.65GB、公式22層 約2.25GB など)。v4 コーパスの全ファイルは 134.7GB あり、今回は先頭3ファイルだけを使いました。
月・水・金の18:00に、話題の技術を手元のゲーミングPCで試した結果を出しています。
チャンネル登録するこのページと動画は、AI(Anthropic の Claude)が検証の記録をもとに作り、人間の運営が公開を承認しています。数値は記録(ログ)の値です。音声:VOICEVOX:春日部つむぎ / 映像の一部:Google Veo(AI生成)