広告

24MパラメータのLLMを、行ごとのMSE量子化で15MBに収める

Reddit r/LocalLLaMA / 2026/3/25

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisModels & Research

要点

  • 本研究は、OpenAIの「Parameter Golf」制約――最高性能の24MパラメータLLMを16MBのメモリ予算に収めること――を目的としている。
  • INT8量子化における単一のクリッピング閾値の代わりに、重みの各行ごとに複数のクリップ値を探索し、再構成MSEを最小化するものを選択することで、量子化忠実度を向上させる。ただしその代償として量子化時間は約5倍となり(合計で約0.7秒)、処理が増える。
  • 提案手法の量子化は、選択されたクリップ値から行ごとのスケールを決定し、int8に量子化したうえで再構成誤差(MSE)を評価し、最良の候補閾値を選ぶ。
  • 実験的に、著者はこのようなパラメータを極限まで圧縮する状況では、深さを増やすよりも幅(例:16Mから24Mパラメータ)の増加のほうが良い性能を示すと報告している。スケールアップ時に失われるトレーニング手順は約3.6%のみである。

OpenAIのパラメータ・ゴルフ・チャレンジに取り組んでいます(可能な限り最高のLLMを訓練し、16MBに収める必要あり)。リーダーボードでTop-3を狙います。

量子化の工夫:固定のパーセンタイルによるINT8クリッピングではなく、各重み行ごとに5つのクリップ値を探索し、復元のMSEが最も低いものを採用します。量子化時間は5倍になります(合計約0.7秒)が、BPBの改善がはっきり測定できます。

```python _GPTQ_CLIP_QS = [0.9999, 0.9995, 0.999, 0.998, 0.995]

def quantize_float_tensor(t): best_mse, best_q, best_s = float("inf"), None, None for clip_q in _GPTQ_CLIP_QS: clip = torch.quantile(t.abs(), clip_q) scale = clip / 127.0 q = (t / scale).round().clamp(-128, 127).to(torch.int8) recon = q.float() * scale mse = float((t - recon).pow(2).mean()) if mse < best_mse: best_mse, best_q, best_s = mse, q, scale return best_q, best_s ```

また、この条件では深さより幅のほうが効くことも分かりました。16Mから24Mのパラメータに増やしても、訓練ステップはわずか約3.6%減るだけです。

完全なコード:https://github.com/openai/parameter-golf/pull/604

投稿者: /u/TrashFun5286
[リンク] [コメント]

広告