NVIDIA Nemotronによるドメイン固有埋め込みのファインチューニング – 1日以内
TL;DR: NVIDIA と Hugging Face は、6 段階の単一 GPU パイプラインを公開し、合成ドメインデータ上で 10 億パラメータの Llama‑Nemotron‑Embed‑1B‑v2 モデルを 1 日以内にファインチューニングし、Recall@10/NDCG@10 で 10% 超の向上、実世界のエンタープライズデータセットで最大 26% の改善を実現しました。
概要 – なぜドメイン固有埋め込みのファインチューニングが重要か
汎用埋め込みモデルはインターネット規模のセマンティクスに優れていますが、契約書や製造ログ、内部タクソノミーなどで必要とされる細かな区別を捉えられません。ドメイン固有データでのファインチューニングによりこのギャップが埋まり、Retrieval‑Augmented Generation(RAG)パイプラインにおける検索品質が向上します。この新しいレシピは、データ作成、ハードネガティブマイニング、マルチホップ処理、トレーニング、評価、デプロイをすべて単一の NVIDIA Ampere クラス GPU で自動化します。
クイックアクセスリンク
- 埋め込みモデル:
nvidia/llama-nemotron-embed-1b-v2 - コードリポジトリ: https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/embed
- 合成データセット (NVDocs): https://huggingface.co/datasets/nvidia/Retrieval-Synthetic-NVDocs-v1
統合オープンソースコンポーネント
| コンポーネント | 役割 |
|---|---|
| NeMo Data Designer | 合成質問‑回答ペアを生の文書から生成する |
| NeMo Automodel | 双方向エンコーダ埋め込みモデルを訓練する |
| BEIR | 標準化された評価ベンチマークを提供する |
| NeMo Export‑Deploy | チェックポイントを ONNX/TensorRT に変換する |
| NVIDIA NIM | OpenAI 互換の埋め込みエンドポイントでモデルを提供する |
前提条件
- ドメイン文書のディレクトリ(
.txt,.mdなど) - 無料の NVIDIA API キー(https://build.nvidia.com/)
- 80 GB 以上の VRAM を持つ NVIDIA Ampere GPU 以降(A100‑80GB と H100‑80GB でテスト)
ステップバイステップ パイプライン
1️⃣ 合成トレーニングデータの生成
このパイプラインは LLM nvidia/nemotron-3-nano-30b-a3b を使用して各文書を読み取り、手動ラベリングなしで高品質な QA ペアを生成します。
nemotron embed sdg -c default corpus_dir=./data/my_domain_docs
4 段階の SDG パイプライン(NeMo Data Designer に実装)では、複雑さが異なる質問(1‑3 ホップ)を作成し、品質スコアを付与します。設定可能な閾値以上のペアのみがトレーニングに使用されます。
2️⃣ ハードネガティブのマイニング
ハードネガティブとは、ベースモデルが正解に近い順位でランク付けする非関連パッセージです。マイニングは以下の手順で行われます:
- ベースモデルで全クエリとコーパスパッセージを埋め込む。
- 類似度スコアを計算する。
- 真のポジティブをマスクする。
- 偽ネガティブを防ぐために 95% マージンフィルタを適用する。
- 上位 k(デフォルト 5) の最高スコアの非ポジティブをハードネガティブとして選択する。
nemotron embed prep -c default
このコマンドはデータを分割(80 % 訓練、20 % テスト)し、マルチホップ質問を独立した(クエリ、ポジティブ)例に展開し、各例で同じハードネガティブを保持します。
3️⃣ マルチホップ質問の理解
マルチホップクエリ(2‑3 ホップ)では、モデルが複数の関連パッセージを取得する必要があります。各ホップを別々のトレーニングインスタンスに展開することで、モデルは すべて の関連文書をポジティブとして扱うことを学び、複雑なユーザークエリに対して完全な回答セットを提示する能力が向上します。
4️⃣ 双方向エンコーダのファインチューニング
トレーニングは温度 0.02 のコントラスト損失を使用し、ポジティブとハードネガティブを鋭く分離させます。
nemotron embed finetune -c default
主要ハイパーパラメータ(デフォルト値はサンプルデータセット向けに調整):
| パラメータ | デフォルト |
|---|---|
| エポック | 3(大規模コーパスでは 1–2 エポックが推奨) |
| 学習率 | 1e‑5 |
| ウォームアップステップ | 5(全ステップの約 5‑10%) |
| グローバルバッチサイズ | 128 |
| クエリあたりのパッセージ数 | 5(1 ポジティブ + 4 ハードネガティブ) |
5️⃣ 検索性能の評価
評価は保持されたテストセットで BEIR フレームワークを実行し、k = 1, 5, 10, 100 における nDCG、Recall、Precision、MAP を報告します。
nemotron embed eval -c default
合成 NVDocs の結果(ベース → ファインチューニング後):
- NDCG@10: 0.555 → 0.616(+10.9 %)
- Recall@10: 0.630 → 0.693(+10.0 %)
- すべての k 値で同様の向上が観測されました。
実世界の Atlassian ケース:公開 JIRA データセットでのファインチューニングにより Recall@60 が 0.751 から 0.951 に上昇し、26.7 % の改善を、単一の A100‑80GB GPU で実現しました。
トラブルシューティング
- 合成データの品質が低い → 文書のフォーマットを改善するか、より強力な LLM を使用する。
- データ不足 → ソース文書を増やし、SDG を再実行する。
- 過学習 → エポックを 1‑2 に減らすか、品質閾値を上げる。
- 学習率が最適でない → デフォルトの 0.5 倍または 2 倍を試す。
6️⃣ エクスポートとデプロイ
ファインチューニング済みチェックポイントを ONNX(opset 17)に変換し、必要に応じて最大スループットのために TensorRT エンジンをコンパイルします。
nemotron embed export -c default # ONNX only
nemotron embed export -c default export_to_trt=false
nemotron embed export -c default quant_cfg=fp8 # FP8 quantization
NVIDIA NIM を使用してモデルをデプロイし、OpenAI 互換の /v1/embeddings エンドポイントを公開します。
nemotron embed deploy -c default
例リクエスト:
curl -X POST http://localhost:8000/v1/embeddings \
-H "Content-Type: application/json" \
-d '{"input": ["What cooling is needed for 8 H100 GPUs in a 2U chassis?"], "model": "custom", "input_type": "query"}'
組み込みの NIM 精度チェックが、変換による性能低下がないことを確認するために、デプロイされたサービスを BEIR で再評価します。
エンドツーエンド コマンドサマリー
# 1. Synthetic data generation
nemotron embed sdg -c default corpus_dir=./data/my_docs
# 2. Data preparation (split, hard‑negative mining, unroll)
nemotron embed prep -c default
# 3. Fine‑tune the embedding model
nemotron embed finetune -c default
# 4. Evaluate base vs. fine‑tuned checkpoint
nemotron embed eval -c default
# 5. Export to ONNX/TensorRT
nemotron embed export -c default
# 6. Deploy with NVIDIA NIM
nemotron embed deploy -c default
リソースと時間の見積もり
| ステージ | GPU 必要? | 推定時間(単一 A100‑80GB) |
|---|---|---|
| 合成データ生成 | なし(API) | 約1時間(コーパスサイズに依存) |
| データ準備(ハードネガティブマイニング) | 必要(≈ 40 GB VRAM) | 約5分 |
| ファインチューニング | 必要(80 GB VRAM) | 約1時間 |
| 評価 | 必要(≈ 40 GB VRAM) | 約5分 |
| エクスポート | 必要(≈ 40 GB VRAM) | 約5分 |
| デプロイ | 必要(≈ 40 GB VRAM) | 約5分 |
| 合計: < 24 時間;規模の小さいコーパス(約 500 文書)では全体のフローが 2–3 時間で完了します。 |
実践的なまとめ
このレシピは、ドメイン適応された埋め込みがもはや数週間・複数 GPU の作業ではなくなったことを示しています。合成データ生成、ハードネガティブマイニング、NVIDIA の最適化ツールを活用することで、実務者は単一 GPU と 1 日未満の計算で、標準指標で >10 % 、エンタープライズワークロードで >25 % の検索性能向上を実現できます。
実際に試す
リポジトリをクローンし、NVIDIA API キーを取得して、パイプラインを自分の文書コレクションに向けます。すぐに実験できる nvidia/Retrieval-Synthetic-NVDocs-v1 データセットが用意されています。Nemotron、NeMo Data Designer、NeMo Automodel のリポジトリへの貢献やスター歓迎です。