はじめに
こんにちは。SCSKの濱田です。
第1回では、NVIDIA CosmosTMの検証環境として、NVIDIA DGX SparkTM上へモデルごとのDocker環境を構築し、JupyterLabを起動するところまで紹介しました。本検証では、推論処理はDGX Sparkで行い、利用者は社内LAN上のWebブラウザからJupyterLabを操作します。
そこで、連載第2回となる今回は、実際に使用しているCosmos Transfer 2.5用Notebookを例に、入力条件の設定から動画生成結果の確認までの流れを紹介します。Predict 2.5、Reason 2、Cosmos 3でも、モデル固有の実行部分は異なりますが、「モデル別コンテナへブラウザで入り、Notebookから条件を指定して実行する」という運用方法は共通化しています。
Cosmosの検証環境を構築する手順は、【NVIDIA Cosmos実践入門】第1回:環境構築編で紹介しています。
NVIDIA Cosmosの基本機能や世界基盤モデル(WFM)の仕組み、Predict・Transfer・Reasonの違いについては、NVIDIA Cosmos製品ページで詳しく解説しています。
Windows PCからDGX Spark上のJupyterLabへアクセスし、Cosmos Transfer 2.5用のNotebookとJSONC設定ファイルを使って、条件設定、JSON変換、入力パス確認、推論実行、生成動画確認までを一連の操作として行います。
Windows PCからCosmos環境へアクセスする
第1回で起動したJupyterLabは、コンテナ内部の8888番ポートをDGX Sparkのホスト側ポートへ割り当てています。Windows PCではWebブラウザを開き、DGX SparkのIPアドレスとモデルごとのポート番号を指定してアクセスします。
| モデル | アクセスURLの例 |
|---|---|
| Cosmos Transfer 2.5 | http://<DGX SparkのIPアドレス>:8802 |
| Cosmos Predict 2.5 | http://<DGX SparkのIPアドレス>:8803 |
| Cosmos Reason 2 | http://<DGX SparkのIPアドレス>:8804 |
| Cosmos 3系 | http://<DGX SparkのIPアドレス>:8805 |
この方式では、Windows PC側はWebブラウザがあれば基本的な操作ができます。GPU、CUDA、Python環境、モデル本体はDGX Spark側のDockerコンテナに集約されています。

コンテナ起動時に
--NotebookApp.token=''を指定しているため、社内LANから対象ポートへ到達できる利用者はJupyterLabへアクセスできます。これは社内の共同検証を容易にするための構成です。外部公開用途には使用せず、利用範囲はネットワーク側で限定します。
Transfer 2.5で使用しているファイル構成
Transfer 2.5では、Notebookだけにすべての条件を書き込むのではなく、Notebook、JSONC、JSONC変換スクリプト、入力動画、出力先を分けています。実際のNotebookでは、次のようなパスを設定しています。
REPO_DIR = Path("/workspace")
INPUT_JSONC = Path("/workspace/scsk/jsonc/prompt1.jsonc")
INPUT_JSON = Path("/workspace/scsk/jsonc/prompt1.json")
OUTPUT_DIR = Path("/workspace/scsk/output/transfer2_5")
| ファイル・ディレクトリ | 役割 |
|---|---|
Transfer2-5実行用.ipynb | パス設定、JSON変換、入力確認、推論、結果確認を順番に実行するNotebook |
プロンプト説明.jsonc | 生成条件をコメント付きで記述するテンプレート |
jsonc2json.py | JSONCのコメントを除去し、Cosmosへ渡せるJSONへ変換するスクリプト |
/workspace/scsk/jsonc/ | 編集用JSONCと変換後JSONを置く場所 |
/workspace/scsk/output/transfer2_5/ | 生成結果と実行用JSONを保存する場所 |

JSONCで生成条件を記述する
Transfer 2.5では、生成条件をJSONで渡します。ただし、毎回JSONの各項目の意味を覚えて設定するのは負担が大きいため、今回の運用ではコメント付きJSONであるJSONCを編集用テンプレートとして使っています。
最低限、次のような項目を記述します。
{
"name": "生成する動画の名前",
"prompt": "生成したい動画の内容を英語で詳しく記述する",
"video_path": "input_videos/sample_input.mp4"
}
テンプレート側には、必要に応じて有効化できるオプションもコメントとして残しています。乱数シード、プロンプト追従度、条件フレーム数、解像度、ノイズ量、拡散ステップ数、Depth、Edge、Segmentation、Visなどの設定を、使う項目だけ有効化できます。
| 代表的な項目 | 意味 |
|---|---|
name | 出力動画を識別する名前 |
prompt / prompt_path | 生成内容を指定する文章、または外部プロンプトファイル |
video_path | 変換元として使用する入力動画 |
negative_prompt | 生成結果へ含めたくない要素 |
seed | 乱数シード |
guidance | プロンプトへの追従度 |
resolution | 出力解像度 |
sigma_max | 入力映像へ加えるノイズ量 |
num_steps | 拡散サンプリングのステップ数 |
depth / edge / seg / vis | Transfer 2.5の各種コントロール設定 |

Notebookの実行フロー
実際に使用しているTransfer 2.5用Notebookは、セルを上から順に実行すれば推論まで進められるように整理しています。大まかな流れは次の通りです。セル1は以降の処理の入力となるため、ここではセル2以降を中心に説明します。
| セル | 処理 | 目的 |
|---|---|---|
| 1 | リポジトリ、JSONC、JSON、出力先、GPU実行条件を設定 | 利用者が主に変更する部分を一か所へ集約する |
| 2 | JSONCをJSONへ変換 | コメント付きテンプレートをCosmosが読める形式へ変換する |
| 3 | JSON内容と素材パスを確認 | 入力動画や制御素材のパス間違いを推論前に検出する |
| 4 | 実行対象JSONを確定し、必要に応じて絶対パス化 | Notebookの作業場所による相対パスずれを避ける |
| 5 | CUDAメモリキャッシュをクリア | GPU状態を確認して推論前の状態を整える |
| 6 | examples/inference.pyを実行 | Transfer 2.5の推論を開始する |
| 7 | 直近のMP4を検索してNotebook内へ表示 | 生成結果をブラウザからそのまま確認する |
JSONCをJSONへ変換する
Cosmos本体へ渡すファイルはJSONなので、Notebookの2番目のセルでJSONCをJSONへ変換します。外部のjsonc2json.pyが見つかればそのスクリプトを使用し、見つからない場合はNotebook内蔵の変換処理へ切り替える構成です。
jsonc2json.pyは、文字列リテラル内部の//や/* */を誤って削除しないように判定しながらコメントを取り除き、json.loads()で正常に読み込めることを検証してから整形保存します。
python jsonc2json.py prompt1.jsonc prompt1.json
Notebookから実行する場合は、この処理がセル内で自動化されています。変換後のJSON内容も表示するため、推論前に設定値を確認できます。プロンプトの詳細は次回以降で紹介します。

入力素材のパスを確認する
動画生成では、設定値そのものよりも「指定したファイルがコンテナから見えていない」という原因で停止することがあります。そのため、このNotebookでは推論前にvideo_path、prompt_path、control_path、mask_path、image_context_pathなどを探索します。
相対パスの場合は、JSONの保存場所、Notebookの現在位置、Cosmosリポジトリのルートなどを候補として確認します。見つかった素材は、必要に応じて絶対パスへ変換した実行用JSONをOUTPUT_DIR/_resolved_jsonへ作成します。


Cosmosの推論コマンドを直接実行する前に、設定ファイルと入力素材の整合性を確認できるようにしたことで、「長い初期化の後にパス間違いで停止する」という無駄を減らせます。
Cosmos Transfer 2.5を実行する
まず、OUTofMemoryを回避するための公式推奨設定を行います。

次にモデルを実行します。Transfer 2.5では、リポジトリ内のexamples/inference.pyへJSONと出力先を渡します。Notebookではsubprocessから同じコマンドを組み立てて実行します。
python examples/inference.py -i /workspace/scsk/jsonc/prompt1.json -o /workspace/scsk/output/transfer2_5
Notebookでは、実際に実行するコマンドを画面へ表示してからsubprocess.run(..., check=True)で実行します。これにより、Notebook上に実行条件と実行コマンドを残せます。
検証用Notebookでは、必要に応じて--disable-guardrails、モデル指定、--keep-going、Tokenizerのコンパイル設定などもセル1の設定から追加できるようにしています。生成を開始するとモデルのダウンロードや各種ログが流れますが、最終的に以下の様になれば成功です。

生成動画をNotebook上で確認する
推論が完了したら、Notebookの最後のセルで出力ディレクトリ配下のMP4ファイルを更新日時順に検索し、直近の動画をHTMLの<video>タグで表示します。
Windows PC側へ動画をコピーして別のプレイヤーで開かなくても、生成直後の結果をJupyterLabの画面で確認できます。

バッチ実行・複数GPU実行への拡張
Notebookは単発実行だけでなく、複数条件のバッチ実行と複数GPU実行にも対応できるようにしています。以下は一例ですが、セル1に設定項目を集めることで利用者の手間を減らしています。

よく使われるのは以下の設定です。
複数JSONをまとめて実行する
BATCH_JSON_GLOB = "/workspace/scsk/jsonc/test/*.json"
この設定を行うと、指定したglobに一致するJSON群を実行対象にできます。
複数GPUで実行する
USE_TORCHRUN = True
NPROC_PER_NODE = 4
MASTER_PORT = 12341
複数GPU環境では、通常のpython実行の代わりにtorchrunを使うコマンドへ自動的に切り替えます。
使用GPUを限定する
CUDA_VISIBLE_DEVICES = "0,1"
特定GPUだけを使用したい場合は、Notebookの最初の設定セルから指定できます。コンテナに割り当てているGPUがホストマシンの2、3、4、5番だった場合、コンテナ内部で0、1と指定しても、実際にはホスト側の2、3番を使用します。
複数モデルを同じDGX Sparkで運用する
Transfer 2.5以外のCosmos 2.5モデルやCosmos 3モデルでも、同じ考え方でNotebookを作成しています。モデルによって推論コマンドや設定項目は異なりますが、利用者から見た操作はできるだけ共通化します。
| 共通化する部分 | モデルごとに変わる部分 |
|---|---|
| ブラウザからJupyterLabへアクセスする | アクセスするポート番号 |
| 最初のセルでパスと実行条件を指定する | モデル名、チェックポイント、推論オプション |
| 入力ファイルの存在を推論前に確認する | 動画、画像、テキストなどの入力形式 |
| Notebookから推論プロセスを起動する | Pythonスクリプト、torchrun、モデル固有CLI |
| 結果をNotebook上で確認する | 出力が動画、画像、テキストのいずれか |
この共通化によって、利用者はモデルごとに環境構築手順を覚えるのではなく、「使いたいCosmosモデルのJupyterLabを開き、そのNotebookを上から実行する」という操作へ寄せられます。
おわりに
今回は、DGX Spark上のCosmosコンテナを、社内LAN上のWindows PCからJupyter Notebookで操作する運用方法を紹介しました。
今回の構成では、計算環境をDGX Spark側に集約し、利用者側はWebブラウザから操作します。さらに、NotebookとJSONCテンプレートを用意することで、Cosmos固有の長いコマンドや多数のオプションを毎回入力せずに、検証条件をファイルとして残しながら繰り返し実行できます。
特にTransfer 2.5では、「JSONCで条件を編集する」「JSONへ変換する」「入力素材のパスを確認する」「推論する」「結果動画を見る」という流れを一つのNotebookへまとめたことで、生成条件を変えながら比較する作業を行いやすくしました。
さらに操作性を高める方法として、セル1やJSONCにまとめているオプション設定をGUI上で扱えるようにすることも考えられます。
第3回では、ここまでに構築した環境を使い、Cosmos 2.5のPredict、Transfer、Reasonを実際に動かします。それぞれにどのような入力を与え、どのような結果が得られたのかを、実行結果とともに紹介します。
参考情報
- NVIDIA Cosmos Documentation
NVIDIA Cosmos Documentation - NVIDIA Cosmos GitHub Organization
NVIDIA Cosmos GitHub Organization
著者プロフィール
お問い合わせ・資料DL
NVIDIAソリューションに関するご相談や、各種資料ダウンロードはこちらから