Soup: レイヤー・ストリーミングによる4 GBノートPC GPUでの8B LLMファインチューニング

Soupはコンシューマー向けノートPC GPUでの8Bモデルのファインチューニングを可能にします

Soupは、LLMファインチューニングのインフラストラクチャのオーバーヘッドを排除するために設計された技術フレームワークおよびCLIです。その主な画期的な点はレイヤー・ストリーミングであり、これによりユーザーは4 GBのVRAMを持つGPUでも8Bパラメータモデルをファインチューニングできるようになります。凍結されたベースモデルをVRAM内に常駐させるオブジェクトではなく、読み取り専用のストリームとして扱うことで、Soupはピークメモリ要件をモデル全体のサイズから単一のデコーダー・レイヤーのサイズへと削減します。

レイヤー・ストリーミング:技術的実装とメモリ効率

レイヤー・ストリーミングは、凍結されたベースモデルをVRAMからホストRAM(またはRAMが不足している場合はNVMeディスク)へ移動させることで、VRAMのボトルネックを解決します。モデルは一度に1つのデコーダー・レイヤーずつGPUに供給され、スループットを維持するために、次のレイヤーが専用のCUDAストリームでプリフェッチされます。

4 GBハードウェアにおけるメモリ・パフォーマンス

RTX 3050 Laptop (4 GB VRAM, Windows)で測定された結果、SoupはLlama-3.1-8B (NF4 quantization)に対して以下の結果を達成しました:

  • Peak VRAM Usage: 3.32 GB
  • Throughput: 119.6 tok/s
  • SM Occupancy: 100%

Qwen2.5-3B (un-quantized bf16)のようなより小さなモデルの場合、Soupは2.15 GBのVRAMでのトレーニングを可能にします。これは、モデルがVRAMに常駐している場合、通常であればCUDA Out-of-Memory (OOM)エラーが発生するシナリオです。

正確性とビット・エキサクトネス

ストリーミングは、損失が減少している間もオートグラッド・パスを切り離すことで、サイレントに失敗する可能性があるため、Soupは厳格な正確性プロトコルを実装しています。すべてのリリースは、非ストリーミングの常駐実行と比較してbit-exactであることが検証されており、9つのアーキテクチャ・ファミリーにおいて最大絶対ロジット差が0.0を維持しています。

嗜好最適化(DPO, ORPO, SimPO, KTO)のサポート

バージョン0.72.4において、Soupは、教師ありファインチューニング (SFT) を超えて、嗜好損失(preference losses)をサポートするためにレイヤー・ストリーミングを拡張しました。

メモリ・フリーなリファレンス・モデル

Direct Preference Optimization (DPO) は、通常、チューニングされたモデルと比較するためのリファレンス・モデルを必要とし、これは通常VRAM要件を2倍にします。Soupは、アダプターをオフにした同じストリーミング・ベースモデルをリファレンスとして使用することで、これを最適化します。

RTX 3050 4 GBにおいて、ストリーミングDPOのピークはSFTのピークの**0.914×**でした。対照的に、2つ目の物理モデルをVRAMに強制的に常駐させることは、730 MBのオーバーヘッドを追加しました。

計算上のトレードオフ

メモリは節約されますが、時間のコストがかかります。DPOは、SFTよりもステップごとにレイヤー・スタックを**1.52×**頻繁に読み取る必要があります。ORPOやSimPOのような他の手法は、真にリファレンス・フリーであり、この特定のオーバーヘッドは発生しません。

Soupのワークフロー:設定からデプロイまで

Soupは、ポスト・トレーニング・スタックを単一のCLIに簡素化します。ワークフローは「1つの設定、1つのコマンド」で設計されています。

インストールとセットアップ

SoupはPyPI経由でsoup-cliとして配布されています。ユーザーはニーズに応じて特定のスタックをインストールできます:

  • pip install soup-cli (Light core)
  • pip install "soup-cli[train]" (Training stack including PyTorch, Transformers, and PEFT)
  • pip install "soup-cli[all]" (Complete suite)

設定とトレーニング

トレーニングはsoup.yamlファイルを通じて管理されます。4 GBカード用の典型的な設定は以下の通りです:

  • stream_layers: true: ベースモデルをVRAMからストリーミング・アウトさせることを有効にします。
  • quantization: 4bit: NF4を使用して、保存サイズを削減します。
  • stream_source: auto: RAMとNVMeディスクの間で自動的に選択します。

ポスト・トレーニング・ツール

トレーニング以外にも、Soupはデプロイメントおよび評価ツールのスイートを提供します:

  • soup ship: 回帰規制ゲートとして、出荷前にチューニングがコア能力(例:ツール・コーリングやJSONの妥当性)を損なわないことを、抽出ベースのスコアラーを使用して確認します。
  • soup reward synth: リファレンス出力から決定論的な報酬検証器を生成します。
  • soup draft: Speculative Decodingの受け入れ率を測定し、ターゲット・モデルを密なドラフト・モデルへと蒸留します。
  • soup export: GGUF (Ollamaやllama.cpp用)、ONNX、およびTensorRTを含む複数のフォーマットをサポートします。

コミュニティによるローカルLLMのROIに関する洞察

プロジェクトに関する議論は、ビジネスアプリケーションにおける、小型でオープンウェイトのローカル・モデルへのシフトを強調しています。コミュニティ・メンバーは、大規模なホスト型モデルがヘッドラインを独占している一方で、多くのエンタープライズ・ユースケース(例:地域銀行のAMLコンプライアンス)では、そのレベルのパワーが必要ではなく、ファインチューニングされた小型モデルでより費用対効果の高い解決策が得られる可能性があり、現在LLMベースのAI実装が直面している「ROI危機」を損なうことなく解決できる可能性があると指摘しています。

Sources