画像・動画生成

DGX SparkでCosmos 3 Edgeを使い、画像から短い動画を作る

静止画とJSONプロンプトを渡すと、生成した短いMP4が返ります。

Cosmos 3 EdgeのGeneratorは、参照画像と動画向けのJSONプロンプト1から短い動画を生成します。このガイドでは、ARM64対応を確認したvLLM-OmniコンテナをDGX Sparkで起動し、公開I2Vサンプル画像をローカルAPI2へ送り、返されたMP4を保存します。モデルカードのDGX Spark時間は189フレーム3の公開測定で、実行経路ごとの数値として読みます。Reasonerの文章生成や行動推定とは別のタスクです。

実行条件と要点
  • Cosmos 3 EdgeのGeneratorは参照画像と動画用JSONプロンプトからMP4を作ります。
  • DGX SparkではvLLM-OmniコンテナをARM64で起動し、APIをローカルポートに接続します。
  • 公開I2V時間は480p・189フレームの測定値で、Reasonerや別GPUの結果とは分けて読みます。

画像から短いMP4を作るモデルです

Cosmos 3 Edgeは、テキスト・画像・行動入力から物理世界を生成・解釈するNVIDIAのワールドモデルです。このガイドではGeneratorの画像→動画(I2V)経路を使います。静止画1枚と、場面の続きを示す構造化JSONプロンプトを送ると、APIがMP4を返します。ロボット動作の予測や動画理解を行うReasoner要求は別の処理なので、ここで扱う動画生成時間と比較しません。Cosmos 3 Edgeモデルカード

DGX SparkはGB10を搭載したARM64 Linuxシステムです。vLLM-Omni公式Cosmos3コンテナのイメージマニフェストにはlinux/arm64があるため、この構成ではそのプラットフォームを選びます。APIの公開先は127.0.0.1だけにし、要求時に画像ファイルを直接アップロードします。vLLM-Omni Cosmos3-Edgeレシピ

机の上に小型コンピューターがあり、モニターにはコードとチャット画面が表示されています。
ローカルモデルサーバーが生成要求を受け取り、動画ファイルを保存します。

DockerでARM64サーバーをローカル起動します

DGX SparkにNVIDIAドライバーとNVIDIA Container Toolkitを用意します。標準ガードレールを使うため、先にCosmos Guardrailのモデルページで条件を読み、自分のアカウントでアクセス承認を得てください。続いて下のコマンドでPython環境を作り、ログインしてサーバーを起動します。ログにApplication startup completeが表示されたら要求を送れます。DGX Spark User Guide

Cosmos 3 Edgeサーバーをローカルで起動
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U huggingface_hub requests
hf auth login
cosmos_cache="${HF_HOME:-$HOME/.cache/huggingface}"
mkdir -p "$cosmos_cache"
docker run --rm --name cosmos3-edge --platform linux/arm64 \
  --runtime nvidia --gpus all --ipc=host \
  -p 127.0.0.1:8000:8000 \
  -v "$cosmos_cache:/root/.cache/huggingface" \
  vllm/vllm-omni:cosmos3 \
  vllm serve nvidia/Cosmos3-Edge --omni --host 0.0.0.0 --port 8000 \
    --init-timeout 1800

サーバーを起動したまま、同じ作業フォルダーで2つ目の端末を開きます。仮想環境4を再度有効にし、サンプル画像とJSONプロンプトだけを取得します。動画の確認にはFFmpegに含まれるffprobeが必要です。

公式I2V入力例を取得
source .venv/bin/activate
hf download nvidia/Cosmos3-Edge --include "assets/*" --local-dir Cosmos3-Edge

サンプル画像と構造化プロンプトを送信します

ダウンロードしたサンプルフォルダーへ移動し、次のPythonクライアントを実行します。モデルカードのJSONプロンプトとネガティブプロンプトを読み込み、画像をmultipart要求でローカルサーバーへ送ります。832×480、121フレーム、24fpsを指定し、返されたデータを現在のフォルダーにcosmos3_edge_i2v.mp4として保存します。モデルカードのI2V要求形式

I2V要求を送りMP4を確認
cd Cosmos3-Edge
python - <<'PY'
import json, mimetypes, requests
from pathlib import Path
prompt = json.load(open('assets/example_i2v_prompt.json'))
negative = json.load(open('assets/negative_prompt.json'))
image = Path('assets/example_i2v_input.jpg')
data = {
    'prompt': json.dumps(prompt),
    'negative_prompt': json.dumps(negative),
    'size': '832x480',
    'num_frames': '121',
    'fps': '24',
    'num_inference_steps': '20',
    'guidance_scale': '6.0',
    'max_sequence_length': '4096',
    'flow_shift': '12.0',
    'seed': '0',
    'extra_params': json.dumps({
        'use_resolution_template': False,
        'use_duration_template': False,
        'guardrails': True,
    }),
}
mime = mimetypes.guess_type(image.name)[0] or 'image/jpeg'
with image.open('rb') as file:
    response = requests.post('http://127.0.0.1:8000/v1/videos/sync', data=data, files={'input_reference': (image.name, file, mime)}, headers={'Accept': 'video/mp4'}, timeout=1800)
response.raise_for_status()
output = Path('cosmos3_edge_i2v.mp4')
output.write_bytes(response.content)
print(f'Saved {output} ({len(response.content):,} bytes)')
PY
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,nb_frames,r_frame_rate -of default=noprint_wrappers=1 cosmos3_edge_i2v.mp4

サーバーが動画データを返し、クライアントがファイルに保存します。完了後にffprobeで寸法とフレーム数を調べると、API要求がMP4出力まで完了したか確認できます。

海岸沿いの道に立つ自転車の人物と、移動する複数のフレームが並んでいます。
参照画像が開始場面を定め、プロンプトがその後の動きを説明します。

公開生成時間は同じモデルの別々の記録として読みます

DGX Sparkでは同じ画像→動画の処理でも、実行エンジンによって時間が変わります。下表は189フレーム生成の公開記録です。上の短い実行例は121フレームなので、時間とフレーム数を合わせて確認してください。

モデルカードに掲載されたDGX Spark Generator画像→動画記録
実行経路DGX Spark I2V時間
vLLM-Omni165.96秒
PyTorch179.80秒

DGX Spark・Generator I2V・480p・189フレーム・単一統合プラットフォーム・batch size5 1。測定条件と結果

サーバーが起動しない場合は、docker infoでNVIDIAランタイム6を確認します。422応答になったらサーバーログと要求フィールドを見直し、JPEGと公式JSONがCosmos3-Edge/assets/にあるか確認してください。ffprobeがMP4ストリームを表示すれば、出力ファイルの保存を確認できます。

山道を走る自転車の複数フレームがフィルムに並んでいます。
動画は連続したフレームで出力されるため、枚数とサイズが生成時間に影響します。

用語の注釈

  1. プロンプト — モデルに送る入力文です。生成モデルでは作りたい結果を説明する文になり、出力の構成や内容を大きく左右します。

    本文に戻る
  2. API — 別のコードからプログラムの機能を呼び出すための決められたインターフェースです。

    本文に戻る
  3. フレーム — 動画を構成する1枚の画像です。

    本文に戻る
  4. Python仮想環境 — プロジェクトごとにPythonパッケージを分けて導入する環境です。パッケージのバージョンの衝突を減らせます。

    本文に戻る
  5. バッチサイズ — 1回の処理単位にまとめる入力またはリクエストの数です。

    本文に戻る
  6. ランタイム — プログラムの実行時に必要な機能を提供するソフトウェア環境です。ローカルAIではモデル実行エンジンを指すこともあります。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
Cosmos 3 EdgeのGeneratorは、参照画像と動画向けのJSONプロンプトから短い動画を生成します。このガイドでは、ARM64対応を確認したvLLM-OmniコンテナをDGX Sparkで起動し、公開I2Vサンプル画像をローカルAPIへ送り、返されたMP4を保存します。モデルカードのDGX Spark時間は189フレームの公開測定で、実行経路ごとの数値として読みます。Reasonerの文章生成や行動推定とは別のタスクです。
条件と出典はどこで確認できますか?
Cosmos 3 Edgeは、テキスト・画像・行動入力から物理世界を生成・解釈するNVIDIAのワールドモデルです。このガイドではGeneratorの画像→動画(I2V)経路を使います。静止画1枚と、場面の続きを示す構造化JSONプロンプトを送ると、APIがMP4を返します。ロボット動作の予測や動画理解を行うReasoner要求は別の処理なので、ここで扱う動画生成時間と比較しません。[Cosmos 3 Edgeモデルカード](https://huggingface.co/nvidia/Cosmos3-Edge)