NVIDIA の GPU なし、Apple シリコンの Mac 1 台で、29,008,384 パラメータの日本語言語モデルをゼロから事前学習した。1B トークン、20,345 ステップ、43 時間。検証損失 3.11、パープレキシティ 22.5。日本語を実際に喋る。
やってみて分かった罠を 3 つ書く。どれもドキュメントに書いていない。
NVIDIA の GPU なし、Apple シリコンの Mac 1 台で、29,008,384 パラメータの日本語言語モデルをゼロから事前学習した。1B トークン、20,345 ステップ、43 時間。検証損失 3.1139、パープレキシティ 22.51。日本語を実際に喋る。
やってみて分かった罠を 3 つ書く。どれもドキュメントに書いていなかった。
構成
- PyTorch、デバイスは mps (Apple シリコンの GPU)
- 約 29M パラメータの小型トランスフォーマー
- トークナイザは SentencePiece 自前学習
- データは Wikipedia と青空文庫系で約 1B トークン
罠 1: 勾配クリッピングは NaN を防がない
一番高くついた罠。勾配クリッピングを入れていたのに、学習が NaN で壊れた。
クリッピングは「勾配の合計ノルムで倍率を掛ける」処理なので、ノルム自体が NaN だと倍率も NaN になり、全勾配が NaN のまま重み更新が走る。step 11,280 で損失が nan になり、何も止まらず、50 ステップごとの再開用チェックポイントを NaN で上書きし続けて、丸 1 日分が消えた。
対策: クリッピングの前に非有限値を検査してその更新を捨てる。あと「壊れた時にちゃんと止まるか」のテストを先に書く。
罠 2: 「GPU が無いから動かない」という環境チェックの嘘
環境チェックが「NVIDIA 用コマンドの有無」だけで判定していて、「この機械では学習できない」と言い続けていた。実際は mps に切り替わって完走していた。
この嘘が怖いのは向きで、「やめとけ」側に嘘をつかれると、43 時間で終わる仕事を一生始めない。GPU と CUDA を同じ言葉として扱っているチェックは疑った方がいい。
罠 3: パラメータ数の数え間違い
入出力の埋め込みを共有 (tied embeddings) していると、重みの一覧が同じ実体を 2 つのキーで返すので、素朴に合計すると語彙分を二重に数える。実体のポインタで重複を除いてから数えるのが正解だった。
参考: NVIDIA の GPU だと 33 倍速い
その後、RTX 5080 で 91M パラメータ・2.0B トークンを学習したら、処理速度は毎秒 76.4K トークンで Mac の約 33 倍だった。それでも「手元の Mac だけで日本語を喋る小型モデルが作れる」のは実測で確認できた。
生成の所感
- 温度 0.8 で同じ句を無限に繰り返すことがある。低温 = 安全ではない
- 事実は普通に間違う (29M に知識を求めてはいけない)
- 文体と文法の獲得を楽しむものと割り切ると、かなり面白い
コメント (0)
まだコメントなし。