nv-generate-mr-brain-finetune について
NV-Generate-MR-Brain-Finetuneは、ユーザー提供のNIfTIボリュームでNV-Generate-CTMRのrflow-mr-brain拡散UNetをファインチューニングするコマンドラインスキルです。設定を準備し、データ作成、学習、任意の推論を上流スクリプトに委ねます。
主な機能
- 01事前検証と設定ファイルの準備
- 02NIfTIボリュームから潜在埋め込みを作成
- 03モダリティとエポック数を指定した調整
- 04任意の推論と実行サマリー
- 05マルチGPU学習オプション
活用シーン
- 01GPU学習前のデータリストとデータセット確認
- 02脳MRIボリュームを使った拡散UNetの調整
- 03任意の推論による生成ボリュームの確認
- 04学習状況と出力ファイルの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ promptingcompany/ nv-skills --skill nv-generate-mr-brain-finetuneインストール後、Claude Code で/nv-generate-mr-brain-finetuneを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BENCHMARK.mdskill_manifest.yamlskill-card.mdskill.oms.sigevals/evals.jsonfixtures/preflight_datalist.jsonREADME.mdfixtures/preflight_dataset/imagesTr/placeholder_mri_t1.txtscripts/run_mr_brain_finetune.pytests/test_run_mr_brain_finetune.pyvalidators/output_schema.json詳細
NV-Generate-MR-Brain-Finetune
目的
- ユーザーが提供する NIfTI トレーニングボリュームを使用して、NV-Generate-CTMR の
rflow-mr-brain拡散 UNet をファインチューニングするために使用します。 - 臨床的な解釈、規制目的、または合成データを本番トレーニングに使用する承認には使用しないでください。
- このラッパーは設定ファイルをローカルにステージングし、既存の上流スクリプト
scripts.diff_model_create_training_data、scripts.diff_model_train、および必要に応じてscripts.diff_model_inferに実行を委任します。ノートブックは実行しません。 - マニフェストの入出力:入力は
datalistとdata_base_dir、出力はfinetuned_checkpoint、任意のinference_outputs、およびresult_jsonです。 - 基盤となるトレーニングの契約は、上流の config/env JSON(
train_diff_unet_tutorial.ipynbのセル[10]から実行するものと同じ)です。このラッパーはこれらの JSON ファイルをステージングし、最も調整頻度の高いフィールドを CLI フラグとして公開します。以下のセクションでは、各フィールド、そのデフォルト値、実行の監視方法と調整方法について説明します。
手順
- 引数、副作用、または検証ゲートを変更する前に、
skill_manifest.yamlを読んでください。 - Medical AI Skills リポジトリのルートから
scripts/run_mr_brain_finetune.pyを実行してください。 - ホストエージェントで
run_scriptが利用できる場合は、run_script("scripts/run_mr_brain_finetune.py", args=[...])を使用してください。それ以外の場合は、以下の Bash/Python コマンドを実行してください。 - 新しい datalist を確認する際は、まず
--preflightを使用してください。ユーザーが GPU ファインチューニングの開始を明示的に希望する場合にのみ、--preflightを削除してください。 - ステージング済みの preflight 入力バンドルディレクトリを使用する場合、該当ファイルが存在すれば、
BUNDLE/preflight_datalist.jsonを datalist として指定し、BUNDLE/preflight_datasetを--data-base-dirに指定してください。
例
入力バンドルから preflight ファインチューニングチェックを検証してステージングします(推奨される最初の手順 — GPU もトレーニングも使用しません)。これが唯一の標準コマンドです。INPUT_BUNDLE と OUT_DIR を使用するパスに置き換えてください。
export NV_GENERATE_ROOT="${NV_GENERATE_ROOT:-.workbench_data/upstreams/NV-Generate-CTMR}" && \
python skills/nv-generate-mr-brain-finetune/scripts/run_mr_brain_finetune.py \
INPUT_BUNDLE/preflight_datalist.json \
--data-base-dir INPUT_BUNDLE/preflight_dataset \
--output-dir OUT_DIR \
--modality mri_t1 \
--preflight
実際の GPU ファインチューニングやその他のバリエーションについては、以下の使用方法を参照してください。
利用可能なスクリプト
| スクリプト | 目的 | 引数 |
|---|---|---|
scripts/run_mr_brain_finetune.py | skill_manifest.yaml で宣言されている主要なエントリーポイントです。 | DATALIST.json --data-base-dir DATA_DIR --output-dir OUT_DIR [--epochs N] [--modality mri_t1] [--num-gpus N] [--no-amp] [--model-config FILE] [--run-inference] [--preflight] |
前提条件
NV_GENERATE_ROOTは、scripts/diff_model_create_training_data.py、scripts/diff_model_train.py、およびscripts/diff_model_infer.pyを含む、現在のhttps://github.com/NVIDIA-Medtech/NV-Generate-CTMRのチェックアウトを指定できます。NV_GENERATE_ROOTが設定されていない場合、ラッパーは.workbench_data/upstreams/NV-Generate-CTMRを検索します。CUDA_VISIBLE_DEVICESは任意で、実際のトレーニングに使用する GPU の選択に利用できます。- ランタイム要件:実際のトレーニング用の NVIDIA CUDA GPU、上流の
requirements.txtに記載された Python パッケージ、およびダウンロード済みの MR-brain の重み。 - 副作用:呼び出し元が指定した
--output-dirの下に、ステージング済みの設定ファイル、埋め込み、チェックポイント、任意の推論画像、ログを書き込みます。上流のチェックアウトと~/.cache/huggingface/の下にモデルキャッシュを書き込む場合があります。また、モデルアセットの取得のためにhttps://huggingface.co、上流のチェックアウトのためにhttps://github.comに接続する場合があります。 - datalist は MONAI 形式の JSON オブジェクトで、
training[].imageのパスは--data-base-dirからの相対パスです。training[].modalityは任意で、省略した場合のデフォルトはmri_t1です。
1. 設定と環境 JSON(データに合わせて調整)
これは、上流の train_diff_unet_tutorial.ipynb のフローを薄くラップしたものです。各実行では、モデル作者のスクリプトに重い処理を委ねながら、次の 4 つのステップを実行します。
- 設定ファイルを準備する — 3 つの設定 JSON をコピーし、実行ごとのパスと
n_epochsのみを書き換えます(ノートブックのセル 15)。 python -m scripts.diff_model_create_training_data→ 潜在表現の*_emb.nii.gz埋め込みを作成します(セル 17)。- 埋め込みのサイドカーファイルを書き込む — 各埋め込みに対して
spacing/modality(およびモデルが使用する場合は身体領域のインデックス)を含む<emb>.nii.gz.jsonを作成します。これは上流のscripts/ではなく、ノートブック(セル 19)にある唯一の接続処理であり、diff_model_trainに必要です。このスキルが担当します。 python -m scripts.diff_model_train(セル 21)、必要に応じてpython -m scripts.diff_model_inferも実行します。
フラグを追加するのではなく、設定 JSON を編集して調整してください。 トレーニング/推論のハイパーパラメーター(lr、batch_size、cache_rate、推論の dim/spacing/num_inference_steps/cfg_guidance_scale など)は、すべて config_maisi_diff_model_rflow-mr-brain.json にあります。上流のコピーを編集するか、--model-config FILE(他の 2 つについては --env-config/--model-def)で独自のファイルを指定してください。このラッパーが書き換えるのは、以下のフィールドだけです。
環境 JSON(environment_maisi_diff_model_rflow-mr-brain.json)— ラッパーが実行ごとに書き換えるフィールド:
| フィールド | 設定元 | 備考 |
|---|---|---|
data_base_dir | --data-base-dir | 相対パスの training[].image のルートです。 |
json_data_list | ユーザーのデータリスト | 各エントリーに modality を入力した、準備済みのコピーです。 |
embedding_base_dir、model_dir、output_dir | --output-dir | 潜在表現の埋め込み、チェックポイント、推論画像の保存先です。 |
modality_mapping_path | 上流の設定 | モダリティ名を整数コードに対応付けます。 |
model_filename | --model-filename | 出力するチェックポイント名(デフォルトは diff_unet_3d_rflow-mr-brain_v0.pt)です。 |
existing_ckpt_filepath | 上流の重み/--existing-ckpt-filepath | 開始時に使用するチェックポイントです。--train-from-scratch を指定するとクリアされます。 |
trained_autoencoder_path | 上流の重み/--trained-autoencoder-path | 潜在表現のエンコード/デコードに使用する VAE です。 |
モデル設定(config_maisi_diff_model_rflow-mr-brain.json)— ラッパーが変更する唯一のフィールド:
| フィールド | 設定元 | デフォルト | 備考 |
|---|---|---|---|
diffusion_unet_train.n_epochs | --epochs | 2(上流の設定では 1000) | 便宜上の上書きです(セル 15 でも同じ処理をします)。ラッパーのデフォルト値は検証用に小さく設定されています。 |
diffusion_unet_inference.modality | --modality | modality_mapping.json から取得 | 任意の --run-inference に備えて、トレーニング時のモダリティと一致させます。 |
このファイルのその他すべて(lr、batch_size、cache_rate、diffusion_unet_inference の残りの項目)は、記載どおりに保持されます。変更するには JSON を編集してください。
実行時フラグ(設定フィールドではありません):--num-gpus N(>1 の場合は torch.distributed.run を起動)、--no-amp(混合精度を無効にし、diff_model_train に渡します)。
--modality は configs/modality_mapping.json の整数コードを選択します。サポートされている脳の値:mri(8)、mri_t1(9、デフォルト)、mri_t2(10)、mri_flair(11)、mri_swi(20)、およびそれぞれの *_skull_stripped バリアント(29/30/31/32)。症例ごとの training[].modality は --modality より優先されます。モダリティはステップ 3 の埋め込みサイドカーファイルにも反映されます。
サンプルデータのダウンロードとチェックポイントの読み込みを含む、エンドツーエンドのリファレンスについては、上流のチュートリアル train_diff_unet_tutorial.ipynb を参照してください。
2. 使用方法(1 行でトレーニング)
事前チェックのみ:
export NV_GENERATE_ROOT="${NV_GENERATE_ROOT:-.workbench_data/upstreams/NV-Generate-CTMR}" && \
python skills/nv-generate-mr-brain-finetune/scripts/run_mr_brain_finetune.py \
PATH_TO_DATALIST.json \
--data-base-dir PATH_TO_DATA_ROOT \
--output-dir runs/nv_generate_mr_brain_finetune_preflight \
--preflight
事前チェック用のバンドル入力:
export NV_GENERATE_ROOT="${NV_GENERATE_ROOT:-.workbench_data/upstreams/NV-Generate-CTMR}" && \
python skills/nv-generate-mr-brain-finetune/scripts/run_mr_brain_finetune.py \
PATH_TO_INPUT_BUNDLE/preflight_datalist.json \
--data-base-dir PATH_TO_INPUT_BUNDLE/preflight_dataset \
--output-dir runs/nv_generate_mr_brain_finetune_preflight \
--preflight
GPU ファインチューニング:
export NV_GENERATE_ROOT="${NV_GENERATE_ROOT:-.workbench_data/upstreams/NV-Generate-CTMR}" && \
python -m pip install -r "$NV_GENERATE_ROOT/requirements.txt" && \
python skills/nv-generate-mr-brain-finetune/scripts/run_mr_brain_finetune.py \
PATH_TO_DATALIST.json \
--data-base-dir PATH_TO_DATA_ROOT \
--output-dir runs/nv_generate_mr_brain_finetune \
--epochs 2 \
--modality mri_t1 \
--run-inference
PATH_TO_DATALIST.json と PATH_TO_DATA_ROOT を、ユーザーが実際に使用するパスに置き換えてください。実際のトレーニングにはフィクスチャのデータリストを使用しないでください。これは事前チェック専用のプレースホルダーです。
3. トレーニングをモニタリングする(TensorBoard)
scripts.diff_model_train は、ステージングされた model_dir(OUT_DIR/artifacts/models)の下に TensorBoard イベントファイルを書き込みます。出力ディレクトリを指定して TensorBoard を起動し、損失曲線を確認します。
python -m pip install tensorboard && \
tensorboard --logdir runs/nv_generate_mr_brain_finetune/artifacts
実行の概要は OUT_DIR/artifacts/workflow_summary.json に書き込まれます(チェックポイントのパス、埋め込みサイドカー、推論出力)。ラッパーが標準出力に出力する JSON には、同じパスに加えて、すばやく問題を切り分けるための exit_code と stderr_tail が含まれます。
4. ハイパーパラメーターの調整とよくある落とし穴
- 損失が減少しない/不安定 — モデル設定 JSON の
diffusion_unet_train.lr(デフォルトは1e-5)を下げるか、AMP をオンのままにします(デフォルト)。--no-ampは低速ですが、古い GPU では数値的に安定します。 - メモリ不足 — 設定 JSON で
diffusion_unet_train.batch_sizeを1、cache_rateを0に保ち、スケールアップする前にオートエンコーダー/UNet が GPU に収まることを確認します。マルチ GPU(--num-gpus N)では、torch.distributed.runを介してバッチが分割されます。 - ケース数が少ない/簡易チェック —
--epochsは小さい値に保ちます(ラッパーのデフォルト2は検証用であり、収束用ではありません。アップストリームの設定では1000が指定されています)。 - モダリティの条件付けが不適切 —
--modalityまたはケースごとのtraining[].modalityに、configs/modality_mapping.jsonに存在する値を設定します。一致しない場合は、潜在表現に誤ったラベルが黙って付けられるのではなく、明確なエラーが発生します。 - 初回実行時の起動が遅い —
diff_model_create_training_dataは潜在埋め込みを一度だけ事前計算します。同じ--output-dirを再利用すると、再計算を避けられます。
5. ファインチューニング済みモデルを評価する
ステージングされたチェックポイント(OUT_DIR/artifacts/models/<model_filename>)を生成用の拡散 UNet として使用し、合成したボリュームを確認します。
- 手早く組み込みの健全性チェック用レンダリングを行うには、ここで
--run-inferenceを渡します。または、 - ファインチューニング済みチェックポイントを
nv-generate-mr-brainの推論スキルに指定し、定性的なレビュー用に新しい脳 MRI ボリュームを生成します。
このスキルが確認するのはファイルの照合とコマンドの出所だけです。解剖学的なリアリティと後続処理での有用性は、生成画像をもとに専門家が判断する必要があります。
制限事項
- 既存の拡散トレーニングスクリプトを含む、最新のアップストリーム
NV-Generate-CTMRチェックアウトが必要です。このスキル自体は必要な設定とデータリストの接続部分をローカルでステージングするため、ノートブックや PR #33 には依存しません。 - トレーニング全体には高いコストがかかる場合があり、ハードウェア、CUDA、パッケージのバージョンによって結果の再現性は異なります。
- このラッパーが確認するのはファイルの照合とコマンドの出所であり、解剖学的なリアリティや後続のモデルでの有用性ではありません。
- 臨床導入、臨床的解釈、自律診断、規制当局への申請、または本番環境で使用するトレーニングデータの承認には使用しないでください。
トラブルシューティング
| エラー | 原因 | 対処方法 |
|---|---|---|
diffusion training scripts were not found | NV_GENERATE_ROOT が最新の NV-Generate-CTMR チェックアウトを指していません。 | https://github.com/NVIDIA-Medtech/NV-Generate-CTMR をクローンまたは更新し、NV_GENERATE_ROOT を設定します。 |
missing datalist image | training[].image のパスが --data-base-dir からの相対パスではないか、ファイルが存在しません。 | データリストを修正するか、正しいデータルートを渡します。 |
| CUDA または MONAI のインポート失敗 | 実行環境にアップストリームの依存関係がありません。 | 選択した環境に "$NV_GENERATE_ROOT/requirements.txt" をインストールします。 |