Nvidia Cosmos tutorial

공부용·2025년 10월 17일

nvidia cosmos를 사용하기 앞서 유튜브에 사용해본 사람의 리뷰가 있는지 확인했다.
Pixel Reconstruct의 nvidia cosmos tutorial

이 영상을 분석해서 어떤 하드웨어 조건에서 어떤 기능을 사용했는지 확인해 볼 것이다.

1. 하드웨어 요구 사항

Cosmos-WLS2
윈도우 기준으로 WSL2를 요구한다.

GPU 메모리는 AI 모델의 작업 공간 역할을 한다.

  • 모델 로딩: AI 모델을 구성하는 수십억 개의 파라미터는 연산을 위해 GPU 메모리에 올라가야 한다. 모델의 크기가 클수록 더 많은 메모리 공간이 필요하다.
  • 데이터 처리: 입력된 텍스트, 이미지, 그리고 생성되는 비디오 프레임과 같은 데이터들이 실시간으로 GPU 메모리 위에서 처리된다.
  • 연산 효율성: VRAM이 클수록 더 많은 데이터를 한 번에 처리(배치 사이즈 증가)할 수 있어, 비디오 생성 속도가 빨라지고 전체적인 효율이 올라간다.

  • Minimum hardware configuration for 7B: NVIDIA RTX 3090. Recommended 4090 or better
  • Minimum hardware configuration for 14B: NVIDIA RTX A6000. Recommend RTX 6000 Ada or better

2. 모델 체크포인트

models
사전 훈련된 모델 체크포인트(pre-trained model checkpoints)를 다운로드한다.

사양별로 모델을 다운받을 수 있는 경로가 만들어져 있다.

  • 모델 파일의 총 크기가 200GB가 넘기 때문에 여유공간을 확보 해야한다.

3. Cosmos 핵심 기능

  1. Text-to-World: 텍스트 프롬프트로 비디오를 생성
  2. Video/Image-to-World: 기존 이미지나 비디오를 기반으로 새로운 비디오를 생성
  3. Batch Generation: 여러 개의 프롬프트나 파일을 한 번에 처리

1. 텍스트-비디오 변환 (Text-to-World)

영상에서는 밤에 경주 트랙을 달리는 포뮬러 원 경주차라는 간단한 프롬프트로 시작한다.

기본 실행 커멘드 구조:

# 1. (선택 사항) 프롬프트를 변수로 저장
$ prompt="a formula car driver racing down a track at night"

# 2. text_to_world.py 스크립트 실행
$ python scripts/inference/text_to_world.py \
    --checkpoint_dir checkpoints/ \
    --model_name 7b \
    --prompt "$prompt" \
    --video_save_name "outputs/race_car_night.mp4" \
    --offload_tokenizer \
    --offload_text_encoder \
    --offload_world_model \
    --offload_lora \
    --offload_diffusion
  • --model_name 7b: 설치 가이드에서 다운로드한 모델을 지정한다. (RTX 3090/4090 사용자는 7b, RTX 6000 Ada 사용자는 14b 시도 가능)
  • --prompt "$prompt": 비디오로 만들고 싶은 텍스트를 입력한다.
  • --offload_... (모든 offload 플래그): 24GB VRAM 사용자에게 필수적인 옵션입니다. 이 플래그들은 모델의 각 부분을 GPU 메모리(VRAM)에서 시스템 메모리(RAM)로 옮겨(offload), VRAM이 부족할 때 발생하는 'Out of Memory' 오류를 방지한다. VRAM이 48GB 이상으로 넉넉하다면 이 플래그들을 제거하여 더 빠른 속도로 생성할 수 있다.

Cosmos는 기본적으로 프롬프트 업스케일러(Prompt Upscaler)가 활성화되어 있다. 사용자가 "race car"처럼 간단한 프롬프트를 넣어도, AI가 "숨 막히는 포뮬러 원 레이싱 시퀀스...(a breathtaking Formula 1 racing sequence...)"처럼 훨씬 더 화려하고 구체적인 프롬프트로 자동 변환하여 더 극적인 영상을 만든다.

하지만 개발자가 의도한 정확한 프롬프트를 그대로 사용하고 싶다면, --disable_prompt_upscaler 플래그를 추가하여 이 기능을 비활성화할 수 있다.

2. 이미지/비디오-비디오 변환 (Image/Video-to-World)

이 기능은 텍스트 대신 정지 이미지(Image-to-World)나 짧은 비디오 클립(Video-to-World)을 입력받아, 그 장면의 '다음'을 예측하고 생성한다.

이미지로 동적 영상 생성
정지된 건물 이미지를 입력하면, 카메라가 움직이는 듯한 동적인 비디오가 생성된다. AI가 이미지의 3D 공간과 맥락을 이해하고 애니메이션을 적용한다.

영상의 다음 장면을 AI가 예측
비디오를 입력할 경우, AI는 비디오의 마지막 1~9 프레임을 분석하여 그 이후에 이여질 120 프레임의 새로운 비디오를 생성한다.

커멘드 구조 (Image-to-World 기준):

$ python scripts/inference/video_to_world.py \
    --checkpoint_dir checkpoints/ \
    --model_name 7b \
    --input_video_path "inputs/my_image.jpeg" \
    --num_input_frames 1 \
    --video_save_name "outputs/animated_image.mp4" \
    --offload_tokenizer \
    --offload_text_encoder \
    --offload_world_model \
    --offload_lora \
    --offload_diffusion
  • scripts/inference/video_to_world.py: text_to_world.py 대신 다른 스크립트를 사용한다.
  • --input_video_path "inputs/...": 텍스트 프롬프트 대신 입력할 이미지 또는 비디오 파일의 경로를 지정한다.
  • --num_input_frames 1: 1은 입력 파일이 정지 이미지임을 의미한다. 2~9로 설정할 경우 입력 파일이 비디오임을 의미하며, 마지막 2~9 프레임을 분석한다.

3. 배치 처리 (Batch Generation)

수십, 수백 개의 프롬프트나 이미지를 한 번에 처리해야 할 때 사용하는 기능이다. .jsonl (JSON Lines) 파일을 입력으로 받아 모든 작업을 자동으로 수행하고 폴더에 순차적으로 저장한다.

여러 텍스트 프롬프트를 한 번에 영상으로 만들기
1. batch_prompts.jsonl 파일 준비
먼저 inputs 폴더에 다음과 같은 .jsonl파일을 생성

{"prompt": "a race car driving down a large city block at night"}
{"prompt": "Stone Building walking around"}
{"prompt": "A drone flying over a beautiful mountain range"}
  1. 배치 실행 커멘드
$ python scripts/inference/text_to_world.py \
    --checkpoint_dir checkpoints/ \
    --model_name 7b \
    --batch_input_path "inputs/batch_prompts.jsonl" \
    --video_save_folder "outputs/batch_text_outputs/" \
    --offload_tokenizer \
    --offload_text_encoder \
    --offload_world_model \
    --offload_lora \
    --offload_diffusion

다수의 이미지/비디오 일괄 변환

  1. batch_visuals.jsonl 파일 준비 prompt 키 대신 visual 키를 사용한다.
{"visual": "inputs/image1.jpeg"}
{"visual": "inputs/video1.mp4"}
{"visual": "inputs/image2.png"}
  1. 배치 실행 커멘드 (Video-to-World)
$ python scripts/inference/video_to_world.py \
    --checkpoint_dir checkpoints/ \
    --model_name 7b \
    --batch_input_path "inputs/batch_visuals.jsonl" \
    --video_save_folder "outputs/batch_visual_outputs/" \
    --num_input_frames 1 \
    --offload_tokenizer \
    --offload_text_encoder \
    --offload_world_model \
    --offload_lora \
    --offload_diffusion

파라미터 설명:

  • --batch_input_path "inputs/...": 개별 프롬프트 대신 .jsonl 파일의 경로를 지정한다.

  • --video_save_folder "outputs/...": 개별 파일명이 아닌, 결과물이 저장될 폴더를 지정한다. (예: 0.mp4, 1.mp4 ... 순서로 저장됨)

  • --num_input_frames: 비디오 배치 처리 시, 모든 입력 파일의 타입을 지정해야 한다. (예: 이미지 배치일 경우 1, 비디오 배치일 경우 9)


4. input/output 정리

1. 텍스트 -> 비디오 (Text-to-World)**

1. 야간 도시를 주행하는 자동차

  • 입력 (Input):

    • 타입: 텍스트 프롬프트
    • 내용: "a car driving down a large city block at night" (밤에 큰 도시를 달리는 자동차)
    • 영상 위치
  • 결과 (Output):

    • 타입: 비디오
    • 내용: 자동차가 길을 따라 주행하다가 멈춘 뒤 후진하는 듯한 짧은 비디오 클립.
    • 영상 위치
  • 주요 포인트: AI가 사용자의 간단한 프롬프트를 훨씬 더 길고 서술적인 '업스케일된 프롬프트(Upscaled Prompt)'로 자동 변환하여 영상 생성

2. 레이싱 트랙의 경주차

  • 입력 (Input):

    • 타입: 텍스트 프롬프트
    • 내용: "숨 막히는 포뮬러 원 레이싱 시퀀스..."로 시작하는 매우 길게 업스케일된 프롬프트가 영상 생성에 사용.
    • 영상 위치
  • 결과 (Output):

    • 타입: 비디오
    • 내용: 레이싱 트랙을 달리는 경주차의 모습을 담은 120프레임 비디오.
    • 영상 위치

2. 이미지 → 비디오 (Image-to-World)

3. 현대적인 건축물

  • 입력 (Input):

    • 타입: 이미지
    • 내용: 현대적인 디자인의 복합 건축물(complex)을 담은 단일 정지 이미지 (complex.jpeg).
    • 영상 위치
  • 결과 (Output):

    • 타입: 비디오
    • 내용: 정지된 건물 이미지에 카메라가 움직이는 듯한 효과가 추가되어 동적인 느낌을 주는 비디오 클립.
    • 영상 위치
  • 주요 포인트:

    • AI는 이미지를 분석하여 장면을 묘사하는 텍스트 프롬프트를 자동으로 생성하고, 이 텍스트와 원본 이미지를 함께 사용하여 비디오를 만든다.
    • 이미지를 입력으로 사용할 때는 --num_input_frames 파라미터를 1로 설정해야 한다.

3. 비디오 -> 비디오 (Video-to-World)

4. 1인칭 시점 자동차 주행

  • 입력 (Input):

    • 타입: 비디오
    • 내용: 자동차 내부에서 1인칭 시점으로 주행하는 모습을 담은 짧은 비디오 클립.
    • 영상 위치
  • 결과 (Output):

    • 타입: 비디오
    • 내용: 정지된 건물 이미지에 카메라가 움직이는 듯한 효과가 추가되어 동적인 느낌을 주는 비디오 클립.
    • 영상 위치
  • 주요 포인트:

    • 비디오를 입력으로 사용할 때는 일반적으로 --num_input_frames 파라미터를 9로 설정한다.
profile
공부 내용을 가볍게 적어놓는 블로그.

0개의 댓글