NVIDIA は 2026-07-23 に公開した公式チュートリアルで、Prime Intellect Lab を使って Nemotron 3 Nano に100ステップの強化学習を行い、同じ32問のホールドアウト問題で再評価しました。正解数は7問から29問に増えています。この変化を学習の効果として判断するには、ベースラインと再評価で問題、環境、サンプリング設定を同じにする必要があります。本記事は 2026-07-24 時点で内容を確認しています。
同じ条件で再現するには、prime==0.6.17、[email protected]、Nano BF16 モデルを固定します。最初に32問のベースラインを測定し、検証可能な報酬による強化学習(RLVR)を100ステップ実行した後、モデル ID だけを変えて再評価します。学習で生成されるのは LoRA アダプターであり、ベースモデル全体の重みを書き換えるものではありません。
開始前に、Prime Intellect アカウントで Hosted Training を利用でき、請求設定が完了していることを確認してください。タスクには、結果を自動採点できる検証器または報酬関数も必要です。目的を「より良い回答にする」としか定義できない場合は、学習を始める前に評価規則を設計します。公式結果が示すのは math-python での効果だけです。カスタマーサポート、検索、中国語や日本語などの言語、高リスクのタスクでは、独自の学習セット、テストセット、検証器が必要です。
NVIDIA の例で固定する4つの再現条件
公式結果を再現する際は、次の4項目を変更しません。ただし、モデルの提供状況と価格はコマンドライン(CLI)の最新カタログで確認します。
| 項目 | NVIDIA の例で固定された値 |
|---|---|
| Python | 3.13 |
| Prime CLI | 0.6.17 |
| ベースモデル | nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 |
| 学習環境 | primeintellect/[email protected] |
prime train models と prime inference models を実行し、出力に Nano モデルがあり、現在の学習、入力、出力の価格を確認できた場合だけ先へ進みます。NVIDIA が示した「5ドル未満」は当該実験の総費用であり、継続的に保証される価格ではありません。
初回は公開データまたは合成データだけを使います。本番の個人情報、医療・法律・金融の判断、独立したテストセットがないタスクを、この手順に直接投入しないでください。一時的な推論サービスだけが必要なら、Hugging Face Jobs で vLLM を動かす手順を参照してください。
元の Nano で32問のベースラインを測定する
NVIDIA の例と同じ CLI バージョンをインストールし、Lab ワークスペースを初期化して、環境パッケージを確認します。組織の規定で curl | sh が禁止されている場合は、承認済みの方法で uv をインストールしてください。
curl -LsSf https://astral.sh/uv/install.sh | sh
uv python install 3.13
uv tool install --python 3.13 --force "prime==0.6.17"
prime --version
prime login
mkdir -p nemotron-customization
cd nemotron-customization
prime lab setup
prime env info primeintellect/math-python --version 0.1.10
prime env inspect primeintellect/[email protected] README.md
uv add "math_python==0.1.10" \
--index https://hub.primeintellect.ai/primeintellect/simple/
uv lock --check
prime train models
prime inference models
評価コマンドはスクリプトとして保存します。ベースラインと再評価で同じファイルに異なるモデル ID だけを渡せば、手作業のコピーで評価パラメータが変わるのを防げます。
mkdir -p scripts
cat > scripts/run-math-eval.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
eval_model="${1:?使用法:scripts/run-math-eval.sh <model-id>}"
math_eval_args='{"dataset_name":"math","dataset_split":"test","num_train_examples":-1,"max_turns":5,"sandbox_client_max_workers":8}'
math_sampling='{"max_tokens":2048,"temperature":1.0,"extra_body":{"chat_template_kwargs":{"enable_thinking":false}}}'
prime eval run math-python \
--provider prime \
--model "$eval_model" \
--num-examples 32 \
--rollouts-per-example 1 \
--max-concurrent 8 \
--env-args "$math_eval_args" \
--sampling-args "$math_sampling" \
--timeout 300 \
--max-retries 2 \
--save-results \
--disable-tui \
--abbreviated-summary
EOF
chmod +x scripts/run-math-eval.sh
export BASE_MODEL="nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16"
scripts/run-math-eval.sh "$BASE_MODEL"
--save-results により評価結果ファイルが生成されます。ベースラインの実際の保存先を記録し、再評価の結果は別に保管してください。概要スコアだけでなく、後で問題ごとに比較できる状態にします。
math-python は、Python、NumPy、SymPy、SciPy を使って計算し、最終回答を \boxed{} に入れるようモデルに求めます。この例では各ロールアウトをアシスタント応答5ターンまでに制限します。最終回答を出さずにツール呼び出しを繰り返すと、ターンを使い切るか \boxed{} が欠けるため、報酬は0になります。
NVIDIA が公表したベースラインは、平均報酬 0.219、標準偏差 0.413 です。この環境の報酬は二値で、正解なら1、不正解または回答なしなら0です。したがって、0.219 は 7/32、正解率21.9% に相当します。少なくとも各問題の成否と全軌跡を保存し、出力長と打ち切りの有無も平均値とは別に記録します。出典:NVIDIA 公式チュートリアル
100ステップの RLVR で Nano の LoRA を学習する
configs/rl/nemotron-3-nano-math-python-100step.toml を作成します。学習側は dataset_split = "train" を使い、前節の test から分離します。思考モードを無効にし、各軌跡をアシスタント応答最大5ターン、各ターンを最大2,048トークンに制限して、ベースラインと条件をそろえます。
name = "nemotron-3-nano-math-python-100step"
model = "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16"
loss = "rl"
max_steps = 100
batch_size = 32
rollouts_per_example = 8
max_inflight_rollouts = 32
learning_rate = 2e-5
lora_alpha = 16
[sampling]
max_tokens = 2048
temperature = 1.0
enable_thinking = false
[adapters]
interval = 0
keep_last = 1
[[env]]
id = "primeintellect/[email protected]"
args = { dataset_name = "math", dataset_split = "train", num_train_examples = -1, max_turns = 5 }
NVIDIA の prime==0.6.17 固定バージョン例に合わせ、ここでは run を省略します。
prime train configs/rl/nemotron-3-nano-math-python-100step.toml
このバージョンでは、現在のドキュメントにある prime train run <config> も利用でき、どちらも同じ学習フローを開始します。固定例を再現する際は、上記の省略形を使います。CLI を更新する前に prime train --help を実行し、Prime Intellect Hosted Training ドキュメントに従って調整してください。
実行を確定する前に、モデル ID と [email protected] 環境を再確認します。CLI 出力に許容できる最新価格と、成功した環境アクションチェックが表示されることも確認し、実行 ID とダッシュボード URL を保存します。
export RUN_ID="<run-id>"
# ターミナル A:学習終了または Ctrl-C までログを追跡
prime train logs "$RUN_ID" --follow
# ターミナル B:Ctrl-C まで費用を監視
prime train usage "$RUN_ID" --watch
# 任意のターミナル:進捗と報酬分布を確認
prime train progress "$RUN_ID"
prime train distributions "$RUN_ID" --type rewards
# 任意のターミナル:選択した学習ステップのロールアウトを確認
export STEP="<step>"
prime train rollouts "$RUN_ID" --step "$STEP"
これらは順番に一括実行するスクリプトではありません。ログと費用の継続監視は別々のターミナルで実行します。progress で参照可能な学習ステップを確認し、distributions で報酬に差が出ているかを見てから、STEP を設定して該当する軌跡を確認します。高報酬の軌跡が本当に正解しているか確認し、低報酬は計算、形式、ツール利用のどこで失敗したかを分けてください。すべての試行が同じ報酬なら、ステップ数を増やす前に環境または問題を調整します。報酬が上がっても解法が悪化している場合は、学習・テスト間の漏えい、打ち切り、報酬ハッキングを確認します。
最終アダプターをデプロイし、モデル ID だけを変えて再評価する
学習プロセスが終了したら、最終チェックポイントに READY 状態の LoRA アダプターが生成されていることを確認します。学習プロセスが停止していても READY のアダプターがなければ、必要な学習成果物は完成していません。
export RUN_ID="<run-id>"
prime train checkpoints "$RUN_ID" --status READY
prime deployments list
export ADAPTER_ID="<adapter-id>"
export BASE_MODEL="nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16"
export ADAPTED_MODEL="$BASE_MODEL:$ADAPTER_ID"
prime deployments create "$ADAPTER_ID" --plain
COLUMNS=300 NO_COLOR=1 prime deployments list --plain
状態が DEPLOYED になったら、同じスクリプトに新しいモデル ID だけを渡して再評価します。テストセット、環境、サンプリング設定はファイル内で固定済みです。評価コマンドを別ファイルにコピーしないでください。
scripts/run-math-eval.sh "$ADAPTED_MODEL"
NVIDIA の二値評価では、平均報酬が正解率と一致します。21.9% から90.6% への変化は約68.7パーセントポイントの上昇であり、68.7% の相対的な増加ではありません。
| 指標 | 元の Nano | LoRA 適用後 |
|---|---|---|
| 正解数 | 7/32 | 29/32 |
| 平均報酬 / 正解率 | 21.9% | 90.6% |
| 標準偏差 | 0.413 | 0.291 |
| 結果が変わった問題 | — | 23問改善、1問悪化 |
NVIDIA の100ステップ実行にかかった総費用は 5ドル未満 でした。この結果が示すのは、固定バージョンの数学実験が成功したことだけです。他のデータセットでの改善幅を予測するものでも、対象タスクの評価を置き換えるものでもありません。出典:NVIDIA 公式チュートリアル
推論デプロイには継続して料金が発生します。実験が終わったら、不要なアダプターをアンロードします。
export ADAPTER_ID="<adapter-id>"
prime deployments delete "$ADAPTER_ID" --plain
prime deployments list
ここでの delete は推論サービスをアンロードしますが、アダプターファイルは残すため、後から再デプロイできます。状態は DEPLOYED から UNLOADING に移り、最終的に NOT_DEPLOYED に戻る必要があります。出典:Prime Intellect の LoRA アダプター推論デプロイ手順
Nano が動いてから Super または Ultra を検討する
Nano の設定と費用を、そのまま大きなモデルに適用しないでください。NVIDIA のチュートリアルには次の2つのモデル ID が示されていますが、毎回 prime train models を実行し、アカウント権限、最新価格、ハードウェアの提供状況を確認する必要があります。
| モデル | NVIDIA の例にあるモデル ID |
|---|---|
| Nemotron 3 Super | nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16 |
| Nemotron 3 Ultra | nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4 |
まず Nano で環境、報酬、再評価の一連の手順を検証します。検証器の誤り、データ漏えい、打ち切りを除外しても、Nano が同じ難しい問題群で繰り返し失敗する場合に、モデル容量の制約を検討してください。Super または Ultra を実行する前に、費用上限と最低改善幅を決め、同じ条件で小規模なベースラインを測定します。事前に決めた改善幅に届かなければ中止します。モデルが一覧に表示されても学習権限がない場合は、別のモデル ID を推測して代用しないでください。
数学の例を業務タスクへ移す前に検証器を作り直す
RLVR は、プログラムや規則で結果を判定できるタスクに適しています。数学、コードテスト、構造化データ変換、スキーマ検証付き SQL などです。引用チェッカーは「指定資料にある引用か」を確認できますが、結論の質まで自動で保証することはできません。カスタマーサポートの口調、自由度の高い文章、高リスクな助言は、最初の RLVR 移行先には向きません。
次の順序で実験を組み直します。
- 業務上の成功条件を実行可能な検証器にし、許容できる失敗の境界を決める。
- 学習セット、開発セット、調整に一度も使わない最終テストセットを分離する。
- 元のモデルでベースラインを繰り返し測り、スコアが全問0でも満点近くでもないことを確認する。
- 学習後は、タスク群ごとに悪化、費用、出力長を比較してから継続を判断する。
高品質な入力と正解の組があっても、信頼できる検証器がない場合は、RLVR より先に教師あり微調整(SFT)を検討します。どちらにも独立したテストセットが必要で、学習報酬や学習損失をリリース判定の代わりにはできません。
本番トラフィックを流す前に判定可能な基準を決める
NVIDIA の32問の結果が示すのは、例が正常に動いたことだけです。業務で本番投入する前にテストセットを固定し、再評価の結果を見る前に、全体スコアの下限、重要タスク群の下限、許容する悪化数、1日あたりの推論予算を決めます。以下は AIGCDev の推奨基準であり、NVIDIA または Prime Intellect が示した本番承認基準ではありません。
| 確認項目 | リリース条件 |
|---|---|
| 再現性と回帰 | 同じアダプターを少なくとも3回独立して再評価し、毎回事前設定した全体スコアに到達する。高リスクのタスク群は悪化を認めず、その他の悪化は事前に決めた件数以内に収める |
| データ | 学習・評価データとログが、プライバシー、ライセンス、社内保持規則の確認を通過する |
| 運用 | 元のモデルへ戻す手順を実際に試し、費用アラートが有効で、不要な推論デプロイをアンロードできる |
すべてを確認できるまでは、アダプターを実験環境に残します。平均スコアの上昇で重要問題の悪化を相殺することはできず、中国語や日本語などの言語、長いコンテキスト、複数ツールのタスクも改善したとは判断できません。
症状別に問題を切り分ける
| 症状 | 最初に確認すること |
|---|---|
| ベースラインがすべて0 | モデルと環境が利用可能かを確認し、失敗した軌跡から回答形式、ターン超過、問題の難しさを切り分ける |
| 学習報酬は上がるが再評価は改善しない | 学習セットだけを評価していないか、評価パラメータを変えていないか、報酬ハッキングがないかを確認する |
| 平均スコアは上がるが重要問題が悪化する | テスト問題を業務リスク別に分け、全体平均で重要な失敗を隠さない |
| 実験終了後も課金が続く | prime deployments list が最終的に NOT_DEPLOYED を示すか確認する。特に UNLOADING または UNLOAD_FAILED を含む他の状態では、クリーンアップは完了していない |