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_frames를len(shot_prompts) * chunks_per_shot * 8잠재 프레임과 일치시키세요. 즉num_frames = (len(shot_prompts) * chunks_per_shot * 8 - 1) * 4 + 1.