>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Python

4 GBのGPU搭載ノートPCで8Bニューラルネットワークをファインチューニングする方法

Soup

LLMのファインチューニングを試みたことがある人なら 누구나知っているこの儀式があります:環境を設定し、CUDAバージョンと戦い、バッチサイズを調整し、延々とCUDA out of memoryエラーをキャッチし、小さなデータセットに対して少数のエポックを実行するためだけにH100をクラウドでレンタルすることになってしまいます。いつか、スクリプトの設定やサーバーとの格子が、データ準備や結果分析よりも多くの時間を取るようになります。

最近、Alpamis MakazhanのSoupリポジトリを見つけました。著者は野心的な目標を設定しました: entire tuning pipeline to a single console command and a simple YAML file. The most interesting thing about the project is the ability to fine-tune a Llama 3.1 model with 8 billion parameters on a mobile RTX 3050 with just 4 GB of video memory.

Sounds like a marketing trick, but under the hood there's some interesting engineering and an open preprint with benchmarks. Let me walk through how it actually works and what the performance looks like in practice.

soup train demo

Soupでできること

本質的に、Soupは一般的なMLスタック(PyTorch、Transformers、PEFT、TRL)をラップしたCLIラッパーです。主なアイデアは、ルーティン作業を自動化することです:利用可能なハードウェアの検出、量子化、バッチサイズの自動調整、データセットのフォーマットです。

このユーティリティは完全なモデルワークフローをカバーします:

  • さまざまなタスク(チャット、コード、ツール呼び出し、分類)のテンプレートを初期化します;
  • JSONL、Parquet、CSVからデータ形式(Alpaca、ShareGPT、ChatML)を自動検出します;
  • SFT、DPO、ORPO、SimPO、KTOメソッドでトレーニングを実行します;
  • 結果の回帰テストを実行し、LoRAアダプタをモデル重みにマージします;
  • Ollamaやllama.cppで実行するためのGGUF形式にモデルをエクスポートします。

基本的な使用では、PyTorchすら必要ありません:軽量なCLIバージョンが数秒でインストールされ、データの検査に役立ちます。そしてトレーニング自体が必要であれば、完全なスタックがプルされます。

# Установка пакета с зависимостями для обучения
pip install "soup-cli[train]"

# Создание конфига через мастер или из готового шаблона
soup init --template chat

# Запуск процесса
soup train

8Bモデルが4 GBのビデオメモリに収まる仕組み

通常、80億パラメータのモデルは4ビット量子化形式(NF4)であっても、メモリにロードするだけで5〜6 GBのVRAMが必要です。コンテキスト、活性化、LoRAアダプタを追加すると、4 GBのカードでは不可避免的にメモリ不足エラーが発生します。

Soupの著者はレイヤーストリーミングテクニックを使用しました。

ベースモデルは完全にビデオメモリに保持されません。コンピュータのRAM(甚至は高速NVMeディスクから直接読み取る)に保存され、レイヤーごとにGPUに供給されます。トレーニング可能なLoRAアダプタと現在のデコーダレイヤーのみがVRAMに永続的に保持されます。

4 GB VRAM搭載ノートPCRTX 3050でのテストでは、NF4量子化を使用したLlama-3.1-8B-Instructモデルは、秒間約119トークンの速度で、ピークメモリ消費量がわずか3.32 GBでした。計算結果は従来の常駐トレーニングとビット単位で同一です。

レイヤーストリーミングは、設定の1行で有効になります soup.yaml

base: meta-llama/Llama-3.1-8B-Instruct
task: sft

data:
  train: ./data/train.jsonl
  format: alpaca

training:
  stream_layers: true      # стриминг слоев из RAM
  quantization: 4bit       # NF4 квантование
  batch_size: 4
  stream_source: auto      # RAM или NVMe
  lora:
    r: 64
    alpha: 16

output: ./output

バージョン0.72以降、レイヤーストリーミングは古典的なSFTだけでなく、DPOやORPOなどのアライメントメソッドにも拡張されました。DPOでは、比較用のベースモデルが必要で、通常はメモリ使用量が2倍になります。ここでユーティリティは同じストリーミングレイヤーをアダプタ無効化して使用し、メモリ内に重複を作成しません。

品質チェックと潜在的なエラーからの保護

一般的なファインチューニングの問題:モデルは特定の質問に答えることを学んだように見えますが、関数の呼び出し方を完全に忘れたか、壊れたJSONを出力し始めました。

Soupには組み込みの検証ツールがあります soup ship。これは内部品質ゲートで、算術、JSONスキーマ遵守、ツール呼び出し、安全性に関するテストセットがあり、元のモデルとファインチューニングされたモデルの両方で実行されます。

soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl

コマンドは具体的な判定を返します:SHIPまたはDON'T SHIP。例えば、アダプタがターゲットタスクでの応答を改善したが、ツール呼び出し構文を壊した場合、ユーティリティはゼロ以外のコードで終了し、回帰が発生した場所を示します。

エクスポートと使用

アダプタのトレーニングと検証が完了したら、希望のフォーマットでパッケージ化できます:

# Проверить ответы в интерактивном режиме
soup chat --model ./output

# Влить LoRA в базовые веса
soup merge --adapter ./output

# Сконвертировать в GGUF для Ollama
soup export --model ./output --format gguf --quant q4_k_m

# Или поднять локальный API-сервер с OpenAI-совместимыми ручками
soup serve --model ./output

リモートマシンでのトレーニングや、手動でドライバーをインストールせずに分離環境でのトレーニングが必要な場合、プロジェクトにはGitHub Packages(GHCR)に готовый Dockerイメージがあります。

誰がこのプロジェクトを見つけるか

Soupは、分散トレーニングの詳細に飛び込まずに高速な実験サイクルを必要とする開発者を対象としています。

以下の場合は、このプロジェクトを試す価値があります:

  1. ホームPCやノートPCで小さなモデル(Qwen 2.5、Llama 3.1、Gemma)で実験したい。
  2. 生データセットからローカル使用的GGUFファイルまでの готовыйパイプラインを探している。
  3. 典型的なSFTタスクのためにHuggingFace TRLに基づいた同じスクリプトを書くのに疲れている。

制限事項:Python 3.10〜3.12が厳密に必要です(PyTorchビルドは現在のところ3.13では不安定です)。巨大なクラスターでのゼロからの完全な事前トレーニングはSoupでは推奨されませんmdashそのためにはMegatronまたはDeepSpeedを直接使用してください。しかし、コンシューマGPUでの応用ファインチューニングとプロトタイピングには、これは便利で考え抜かれたツールです。

関連プロジェクト