hero画像
技術コラム
開発部技術コラム

NVIDIA CosmosをGAT(DGX-H100)で動かそう

目次

はじめに

こんにちは、ネクスティ エレクトロニクス開発部メンバーです。
筆者は、割安かつ期間占有で各種GPUサーバーの自由度の高いトライアルができる、 GPU Advenced Test Drive(GAT)の技術サポートを担当しております。

昨今、GPUによる動画生成も実用的になってきており、ロボットの自動制御や車の自動運転などの、通常では撮影が困難な例外ケースのテスト用データとして、生成動画を活用する動きが始まっております。
その1つに、NVIDIA社がリリースしているNVIDIA Cosmosというプロジェクトがございます。

そのうち、Cosmos-Predict1というモデルは、AI Enterprise という枠組みの1つとしてもリリースされております。(こちらは当社のGATではご利用期間中、有償版もご利用頂けるようなサービスも行っておりますので、ぜひご活用ください) こちらを利用しますと、以下のような動画をテキストから生成することができます。

AI EnterpriseでのCosmos-Predict1は「NIM」と呼ばれる賢いDocker形式になっており、 DGX機ではpullするだけで、最適なセルフホスティング形式の実行環境の構築が可能になっております。 今回はこちらのNGC形式の構築手順や、気になるDGX-H100/DGX-A100での生成速度などを記していきます。

利用した機器

今回利用したDGX-H100/DGX-A100のスペックは以下になります。どちらも8GPUを積んだDGXサーバーです。GATでご利用頂けます。

カテゴリーDGX-H100DGX-A100
GPUNVIDIA H100 SXM 80GB ×8基NVIDIA A100 SXM 40GB ×8基
CPUDual x86Dual AMD Rome 7742
Memory2TB2TB
Storage OS1.92 TB M.2 NVMe ×21.92 TB M.2 NVMe ×2
Strage DATA30 TB (3.84 TB U.2 NVMe ×8)30 TB (3.84 TB U.2 NVMe ×8)
OSDGX OS(Ubuntuベース)DGX OS(Ubuntuベース)

環境の構築(text2world)

今回は、テキストから動画を生成する text2worldを構築していきます。

  1. 1.(ご自身のローカルに構築される場合)事前にAI EnterpriseのNGC用トークンを発行しておきます。
    (こちらはDeveloper Program権限でも良いようです)

  2. 2.H100にSSHで接続します(GATではSSH接続で利用します)。その際、NVIDIA Cosmosサーバーのポートをフォワードする設定をしておきます。
    (ローカル側から、NVIDIA Cosmosサーバーに送受信出来る様になります)
    ※以下コマンドはあくまで例で、アドレスなどは正しくありません

ssh -L 18000:localhost:18000 username@h100.gat.hogehoge
      
  1. 3.SSH接続したH100上で、1.の手順で発行した AI Enterpriseのトークン鍵をNGC_KEYを環境変数に設定します。
h100> export NGC_KEY=.......
  1. 4.(コンテナイメージがない場合)dockerのpullを行います。イメージは14.9Gあります。
h100> docker login nvcr.io
Username: $oauthtoken (←この通り入力)
Password: (←ここでもNGCトークンを入力)

Login Succeeded ←成功時はこの表示です

h100> docker pull nvcr.io/nim/nvidia/cosmos-predict1-7b-text2world:latest
  1. 5.H100上で、以下のdocker起動スクリプトを実行します
#!/bin/bash

#毎回打つのが面倒な場合、鍵設定もスクリプトに含めます
#export NGC_API_KEY=.....

#NIMのキャッシュを置く場所
#無い場合はフォルダを事前に作成し、ユーザー権限でアクセスできるようにしておきます
export LOCAL_NIM_CACHE=/home/username/.cache
mkdir -p "$LOCAL_NIM_CACHE"

#dockerの起動
docker run -it --rm \
  --gpus all \
  --ipc host \
  -v "$LOCAL_NIM_CACHE:/opt/nim/.cache" \
  -u $(id -u) \
  -e NGC_API_KEY \
  -p 18000:8000 \
  nvcr.io/nim/nvidia/cosmos-predict1-7b-text2world:latest

実行ログが表示されるのでdocker起動完了を待ちます 、初回はモデル等のダウンロードが実施されますので時間が掛かります(12G/28G/9Gなど)。 以下のような表示があれば、起動完了です

INFO 2025-05-19 02:39:22.057] Serving endpoints:
0.0.0.0:8000/v1/health/live (GET)
0.0.0.0:8000/v1/health/ready (GET)
0.0.0.0:8000/v1/metrics (GET)
0.0.0.0:8000/v1/license (GET)
0.0.0.0:8000/v1/metadata (GET)
0.0.0.0:8000/v1/manifest (GET)
0.0.0.0:8000/v1/infer (POST)
INFO 2025-05-19 02:39:22.057] {'message': 'Starting HTTP Inference server', 'port': 8000, 'workers_count': 1, 'host': '0.0.0.0', 'log_level': 'info', 'SSL': 'disabled'}

エラーとなる場合は、VRAMメモリー不足の場合が多いです(こちらのNIM版の実行には、合計100G以上/各GPUは48G以上が必要なようです)

  1. 6.ローカルマシンで別のターミナルを開き、以下のスクリプトを実行すると、プロンプト等の設定を送信し、生成されたデータを受信し、受信データのうち動画部分を動画ファイル化、アップサンプルされたプロンプトをテキストに保存するまでが実行されます。
#!/bin/bash
video_no=0
curl -X 'POST' \
'http://localhost:18000/v1/infer' \
 -H 'Accept: application/json' \
 -H 'Content-Type: application/json' \
 -d@- <<EOF > infer
{
       "prompt": "The video is captured from a camera mounted on a car. The camera is facing forward. The footage shows a quiet American street corner on a sunny day. A small diner with a retro sign stands at one corner, while the other corners feature low-rise office buildings and wide sidewalks. A single pickup truck waits at the intersection, with its brake lights visible with no visible movement. Suddenly, the car collides with the back of the truck.",
       "seed": 0
}
EOF

cat infer | jq -r ".b64_video" | base64 -d > video${video_no}.mp4
cat infer | jq -r ".upsampled_prompt" > upprompt${video_no}.txt
  1. 7.プロンプトやシード値(同じプロンプトでも、数値を変えることで結果が変わります)を変更して、4のリクエスト送信を繰り返し、色々と作成してみてください。 video_noの部分を変更することで、保存する動画ファイル名を変更することが出来ます。
  2. 8.終了する場合は、dockerを起動したスクリプトのターミナルにてCtrl-CでNVIDIA Cosmosサーバーを終了します。

生成される動画の作例

当社では、主に車載動画の生成を行っております。
文頭でも1例を示しましたが、以下の動画は、Cosmos Predict1での撮影困難なシーンの作例です。 (プロンプトのノウハウは当社までぜひお問い合わせ下さい)

生成にかかる時間

GATサーバーのDGX-A100 / DGX-H100にて、動作検証を実施しております。
その際の1動画作成の目安は、以下になっております。

機種起動後初回の生成時間(分:秒)
DGX-H10001:18
DGX-A10002:36

初回起動後のみ、一番時間がかかるようでその場合の時間を測定したものです(続けて生成する場合は、やや短くなります)。
8GPUが並列で動くDGX機であれば1動画を生成するのにさほど時間は掛からず、
動画生成はシード変更やプロンプトの手直しなどで繰り返しとなりがちですが、現実的な待ち時間で生成することができます。

発展 Cosmos-Predict2 / Cosmos-Transfer1

当社では、今回ご紹介致しました Cosmos-Predict1 の次世代バージョンである Cosmos-Predict2 や、 既存データセットのLidarデータ等から動画を作り変える事ができるtransfer1についても、 環境構築やノウハウ、動画生成のご依頼や関連するご相談を承っております。

以下に作例を示します。

Cosmos-Predict2

Cosmos-Predict2にて、テキストのみで生成した例(前を行く車がスピンする例外ケース)を以下に示します。

また、1枚の写真を最初のフレームとして、続きをテキストで生成した例(前を行く車が故障したケース)を以下に示します。

Cosmos-Transfer1

Cosmos-Transfer1にて、社内のLidarデータ(nuScenes形式に変換)を入力として、天候だけを変更した例を以下に示します。
同じLidar入力からなので、シーンとしては同じですが、天候だけ通常→雪→夜の雨→早朝の逆光と変化させることができているのが分かるかと思います。

おわりに

Cosmos-Predict1のDGX機での実行方法、処理時間などを説明致しました。また併せてCosmos-Predict2とCosmos-Transfer1の当社作例の一部を掲載致しました。

また今回は車載映像でしたが、ロボット視点の制御用映像や駐車場や工事現場の監視用途など、 様々な映像が作れることを確認できております。 「こういった動画は作れますか?」など、お気軽にお問い合わせ下さい。

過去GAT関連の記事へのリンク

※NVIDIA CosmosはNVIDIA社の商標です

関連製品情報