Gemma-4の微調整とデプロイ:試行錯誤の記録 [P]

Reddit r/MachineLearning / 2026/4/19

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical UsageModels & Research

要点

  • MLチームは、Gemma-4の微調整とデプロイで遭遇した複数の統合課題(特にPEFT/LoRAがGemma-4の独自投影レイヤーを認識できない問題など)を整理して共有しました。
  • TRLのSFTTrainerがuse_cache=Falseを固定しているために学習が“静かに”失敗し、Gemma 4のKV共有アテンションを壊して損失が収束しないことを見つけました。
  • DeepSpeed ZeRO-3では学習損失は良好に見える一方で、いくつかの層で要素数0のテンソルを含む壊れたLoRAアダプタが保存され、実質的に微調整が無効になることがありました。
  • 提供(サービング)面では、vLLMやSGLangなどのランタイムがGemma-4のランタイムLoRAをすぐにサポートしない場合があり、その際は重みの手動マージとstate dictキーの付け替えを行ってから提供する必要があります。
  • 記事は、Oxen AIのブログにある詳細な修正手順と、Gemma-4向け微調整/デプロイのパイプラインを改善するための実践的な学びへの導線も示しています。

みなさん、

今週、MLチームがGemma-4向けの学習とデプロイが動くようになるまでの調整に少し時間を費やし、その過程で遭遇したことをすべて記録したかったので共有します。

  • PEFTはGemma 4のカスタム層を認識しません。 Googleが、視覚/音声のプロジェクションを新しい ClippableLinear クラスで包み、これは nn.Linear を継承していません。そのため、PEFTはLoRAの取り付けを拒否します(テキストのみの微調整であっても拒否します)。修正策:重みを読み込んだ後、PEFTを呼び出す前にラッパーを解いてください。
  • SFTTrainerが学習を黙って殺します。 TRLは use_cache=False をハードコードしており、これがGemma 4のKV共有アテンションを壊します。損失は収束せず、エラーも出ません。出ているのはゴミのような勾配です。修正済み:transformers v5.5.2+で上流対応されました。
  • DeepSpeed ZeRO-3が半分空のアダプタを保存します。 学習損失は完璧に見えますが、保存されたLoRAファイルには半分の層で要素数が0のテンソルが入っています。モデルは、まったく微調整されていなかったかのように振る舞います。回避策:Gemma 4に対するLoRAではDeepSpeedを使わないでください。
  • 実行時のLoRA配信がどこにもありません。 ことがありますが、vLLMやSGLangがGemma 4のマルチモーダルアーキテクチャに対する実行時LoRAをサポートするまで、1分ほどかかることがあります。配信前に、重みを手動でマージし、state dictキーをリマップする必要があります。

ブログにはさらに詳しい情報がたくさんありますが、あなたのGemma-4の取り組みにも役立てば幸いです!

submitted by /u/FallMindless3563
[link] [comments]