LongLive 2.0

LongLive 2.0

SGLang-diffusion으로 LongLive 2.0 증류 텍스트-투-비디오 및 이미지-투-비디오 모델을 서빙합니다.

출처: 문서

본문

<DiffusionModelTags tags={["video", "text/image-to-video", "4-step", "multi-shot", "Wan2.2 5B"]} />

1. 모델 소개 (Model Introduction)

LongLive 2.0은 Wan2.2-TI2V-5B에서 증류된 NVIDIA의 4-스텝 텍스트/이미지-투-비디오 모델입니다. 주요 장점은 프롬프트 변경에 걸쳐 few-step 인과 생성을 확장하는 것으로, 단일 요청이 매 샷마다 전체 디퓨전 스케줄을 지불하지 않고도 multi-shot 시퀀스를 만들 수 있습니다.

최대 one-shot 충실도보다 저스텝 장기·multi-shot 생성에 이를 선택하세요. SGLang 경로는 공식 가중치의 Diffusers 변환을 사용하며, 장면 연속성은 여전히 prompt-block과 sink 설정에 의존합니다. 대상 스토리보드에서 전환을 검증하세요.

모델 가중치는 NVIDIA Open Model License를 사용합니다. 훈련 세부사항은 논문GitHub 저장소를 참조하세요.

2. SGLang-diffusion 설치 (Installation)

설치 지침은 공식 SGLang-diffusion 설치 가이드를 참조하세요.

3. 배포 (Deployment)

sglang serve --model-path Rabinovich/LongLive-2.0-5B-Diffusers

auto 모드에서 최소 60 GiB를 사용할 수 있는 GPU는 DiT, 텍스트 인코더, VAE를 상주시킵니다. 이는 H200에서 832x480 프리셋 기준 약 44 GiB를 사용하며 요청마다 인코더·디코더 레이어를 호스트 메모리에서 옮기지 않습니다. 더 작은 GPU는 레이어별 오프로드 기본값을 유지합니다.

GPU 메모리가 부족하면 텍스트 인코더, VAE, DiT를 단계 사이에 CPU로 옮기세요:

sglang serve \
  --model-path Rabinovich/LongLive-2.0-5B-Diffusers \
  --dit-cpu-offload \
  --text-encoder-cpu-offload \
  --vae-cpu-offload

Rabinovich/LongLive-2.0-5B-Diffusers는 공식 Efficient-Large-Model/LongLive-2.0-5B 가중치의 Diffusers 형식 변환입니다.

4. 생성 (Generation)

4.1 단일 프롬프트 (Single prompt)

서버를 시작하지 않고 클립 하나를 생성:

sglang generate \
  --model-path Rabinovich/LongLive-2.0-5B-Diffusers \
  --prompt "A quiet street at dusk" \
  --num-frames 61 \
  --save-output \
  --output-path outputs

61 프레임은 16 잠재 프레임이며, 이는 8개짜리 인과 블록 두 개입니다.

4.2 Multi-shot 장기 비디오 (Multi-shot long video)

Multi-shot 프롬프트는 샘플링 파라미터이므로 Python API로 전달합니다:

from sglang import DiffGenerator

gen = DiffGenerator.from_pretrained("Rabinovich/LongLive-2.0-5B-Diffusers")
result = gen.generate(sampling_params_kwargs={
    "shot_prompts": [
        "A husky walks down a sunlit hallway.",
        "The husky turns and looks at the camera.",
        "Two dogs play together on a carpet.",
    ],
    "chunks_per_shot": 4,
    "num_frames": 381,  # 3 shots x 4 chunks x 8 = 96 latent frames -> 381 frames
    "scene_cut_prefix": "The scene transitions. ",
    "multi_shot_sink": True,
    "multi_shot_rope_offset": 8.0,
    "save_output": True,
    "output_path": "outputs",
})

각 샷은 다음 프롬프트가 사용되기 전에 chunks_per_shot 인과 블록만큼 실행됩니다. multi-shot 기본값은 원래 LongLive prompt-block 설정을 반영합니다.

4.3 주요 파라미터 (Key parameters)

이들은 SGLang 요청 파라미터입니다. 원래 LongLive 구성은 잠재 프레임 num_output_frames을 사용합니다. SGLang은 출력 비디오 num_frames를 노출합니다.

  • num_frames: 예시에서 61. 이는 16 잠재 프레임으로 매핑되며, 원래 릴리스 구성은 128 잠재 프레임 기본값.
  • num_inference_steps: 4, 원래 sampling_steps와 일치.
  • guidance_scale: 1.0, 원래 추론 구성과 일치.
  • height / width: 기본 704 / 1280, 16x 공간 압축으로 원래 잠재 H/W 44 / 80과 일치.
  • shot_prompts, chunks_per_shot, scene_cut_prefix, multi_shot_sink, multi_shot_rope_offset: 원래 prompt-block 및 multi-shot 동작을 위한 SGLang 요청 필드.

4.4 이미지-투-비디오 (Image-to-video)

--image-path로 첫 프레임을 전달해 클립을 이미지로 조건화:

sglang generate \
  --model-path Rabinovich/LongLive-2.0-5B-Diffusers \
  --prompt "A quiet street at dusk" \
  --image-path first_frame.png \
  --num-frames 61 \
  --save-output \
  --output-path outputs

이미지는 첫 프레임 조건으로 사용됩니다.

5. 참고 (Notes)

  • num_frames는 인과 블록의 정수배로 매핑되어야 합니다. 잠재 프레임 수는 (num_frames - 1) / 4 + 1이며 8로 나누어져야 합니다. 예를 들어 61, 125, 189 프레임은 각각 16, 32, 48 잠재 프레임.
  • SGLang은 T2V 크기 1280x704, 704x1280, 832x480, 480x832를 지원합니다.
  • I2V 요청 이미지는 SGLang의 Wan TI2V 전처리 경로를 따릅니다. 이는 원래 LongLive 데이터셋 리사이즈 경로와 다릅니다.
  • Multi-shot 실행의 경우 num_frameslen(shot_prompts) * chunks_per_shot * 8 잠재 프레임과 일치시키세요. 즉 num_frames = (len(shot_prompts) * chunks_per_shot * 8 - 1) * 4 + 1.

6. ComfyUI에서 실행 (Run in ComfyUI)

더 알아보기 (Learn more)