JapanRailwayLLM LoRA ― 60ステップで完成したはずが、再び学習し直すことになった話/JapanRailwayLLM LoRA — A Model That “Finished” in 60 Steps, Yet Needed to Be Retrained from Scratch
JapanRailwayLLM LoRA ― 60 ステップで完成したはずが、再び学習し直すことになった話 Gemma 2 9B IT をベースにした JapanRailwayLLM LoRA の開発を始めた当初、私は「まずは最小限のステップでモデルを形にする」ことを目標にしていました。 Google Colab と Unsloth を使い、学習ステップはわずか 60 step 。処理も軽く、 LoRA の保存も問題なく、 Hugging Face へのアップロードまでスムーズに進みました。 「これでひとまず完成だろう」 そう思っていたのですが、推論テストで予想外の問題が発生します。 ■ 60 ステップ版 LoRA で発生した違和感 LM Studio でアップロード済みモデルを試すと、鉄道用語は多少出るものの、 回答が極端に短い あるいは 空のまま終了する という現象が多発しました。 特に深刻だったのが、以下のような出力です。 <start_of_turn>model <end_of_turn> これは典型的な 「回答の枠組みだけ学習し、本文が学習されていない」 状態です。 この時点で私は、 「 LoRA 自体は壊れていない。学習データかコードに問題がある」 と判断しました。 ■ 原因調査:学習データとコードの両方に不備があった 調査を進めると、学習に使った JSONL の中に複数の問題が見つかりました。 output が空の行が混入 instruction/output 形式と text 形式が混在 chat template の BOS が二重に入る データ件数が少ないのに 9B モデルへ学習させていた 特に致命的だったのは 回答が空のデータ です。 コード {"instruction": "ATC とは? ", "output": ""} このようなデータが混ざると、モデルは 「回答しない癖」 を学習してしまいます。 さらに、学習コード側でもテンプレート構造が統一されておらず、 「 60 ステップで完成した」というより 60...