【NVIDIA Cosmos実践入門】第2回:運用編 — Jupyter NotebookでCosmosを使う(Windows PCからのアクセス含む)

はじめに

こんにちは。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から条件を指定して実行する」という運用方法は共通化しています。

第1回の記事はこちら
Cosmosの検証環境を構築する手順は、【NVIDIA Cosmos実践入門】第1回:環境構築編で紹介しています。
まずはNVIDIA Cosmosの概要を知りたい方へ
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.5http://<DGX SparkのIPアドレス>:8802
Cosmos Predict 2.5http://<DGX SparkのIPアドレス>:8803
Cosmos Reason 2http://<DGX SparkのIPアドレス>:8804
Cosmos 3系http://<DGX SparkのIPアドレス>:8805

この方式では、Windows PC側はWebブラウザがあれば基本的な操作ができます。GPU、CUDA、Python環境、モデル本体はDGX Spark側のDockerコンテナに集約されています。

Windows PCからJupyterLabへアクセスした画面
今回の社内検証環境ではJupyterLabのトークン認証を無効化しています
コンテナ起動時に--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.pyJSONCのコメントを除去し、Cosmosへ渡せるJSONへ変換するスクリプト
/workspace/scsk/jsonc/編集用JSONCと変換後JSONを置く場所
/workspace/scsk/output/transfer2_5/生成結果と実行用JSONを保存する場所
Notebookのパス設定セル

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 / visTransfer 2.5の各種コントロール設定
JSONCテンプレートの設定例

Notebookの実行フロー

実際に使用しているTransfer 2.5用Notebookは、セルを上から順に実行すれば推論まで進められるように整理しています。大まかな流れは次の通りです。セル1は以降の処理の入力となるため、ここではセル2以降を中心に説明します。

セル処理目的
1リポジトリ、JSONC、JSON、出力先、GPU実行条件を設定利用者が主に変更する部分を一か所へ集約する
2JSONCをJSONへ変換コメント付きテンプレートをCosmosが読める形式へ変換する
3JSON内容と素材パスを確認入力動画や制御素材のパス間違いを推論前に検出する
4実行対象JSONを確定し、必要に応じて絶対パス化Notebookの作業場所による相対パスずれを避ける
5CUDAメモリキャッシュをクリアGPU状態を確認して推論前の状態を整える
6examples/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内容も表示するため、推論前に設定値を確認できます。プロンプトの詳細は次回以降で紹介します。

JSONCからJSONへの変換結果

入力素材のパスを確認する

動画生成では、設定値そのものよりも「指定したファイルがコンテナから見えていない」という原因で停止することがあります。そのため、このNotebookでは推論前にvideo_path、prompt_path、control_path、mask_path、image_context_pathなどを探索します。

相対パスの場合は、JSONの保存場所、Notebookの現在位置、Cosmosリポジトリのルートなどを候補として確認します。見つかった素材は、必要に応じて絶対パスへ変換した実行用JSONをOUTPUT_DIR/_resolved_jsonへ作成します。

入力素材のパス確認結果
絶対パスへ変換した実行用JSONの作成結果
Notebook化で特に効果があった部分
Cosmosの推論コマンドを直接実行する前に、設定ファイルと入力素材の整合性を確認できるようにしたことで、「長い初期化の後にパス間違いで停止する」という無駄を減らせます。

Cosmos Transfer 2.5を実行する

まず、OUTofMemoryを回避するための公式推奨設定を行います。

CUDAメモリキャッシュのクリアと推論前設定

次にモデルを実行します。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の設定から追加できるようにしています。生成を開始するとモデルのダウンロードや各種ログが流れますが、最終的に以下の様になれば成功です。

Cosmos Transfer 2.5の推論完了画面

生成動画をNotebook上で確認する

推論が完了したら、Notebookの最後のセルで出力ディレクトリ配下のMP4ファイルを更新日時順に検索し、直近の動画をHTMLの<video>タグで表示します。

Windows PC側へ動画をコピーして別のプレイヤーで開かなくても、生成直後の結果をJupyterLabの画面で確認できます。

Notebook上で生成動画を確認している画面

バッチ実行・複数GPU実行への拡張

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

Notebookの実行オプション設定例

よく使われるのは以下の設定です。

複数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上で扱えるようにすることも考えられます。

参考情報

  1. NVIDIA Cosmos Documentation
    NVIDIA Cosmos Documentation
  2. NVIDIA Cosmos GitHub Organization
    NVIDIA Cosmos GitHub Organization

著者プロフィール

著者プロフィール画像

濱田 悠(はまだ ゆう)
SCSK株式会社 プロダクトエンジニア
NVIDIA GPU、Omniverse / Isaac Sim、Physical AI、生成AI基盤などの技術検証・提案に従事。

お問い合わせ・資料DL

NVIDIAソリューションに関するご相談や、各種資料ダウンロードはこちらから