LingBot Video MoE
LingBot Video MoE
네이티브 LingBot Video MoE 30B-A3B 텍스트-투-비디오 모델을 SGLang Diffusion으로 서빙합니다. MoE 경제성이 핵심입니다. 총 30B 파라미터 중 토큰당 3B만 활성화되므로, 병렬화 플래그 없이 sglang serve 한 번으로 출시된 480×480·81프레임 프로파일을 제공합니다.
출처: 문서
본문
네이티브 LingBot Video MoE 30B-A3B 텍스트-투-비디오 모델을 SGLang Diffusion으로 서빙.
<DiffusionModelTags tags={["video", "text-to-video", "mixture-of-experts", "30B-A3B"]} />
1. 모델 소개 (Model Introduction)
LingBot Video MoE 30B-A3B는 네이티브 SGLang Diffusion 파이프라인으로 서빙되는 텍스트-투-비디오 mixture-of-experts 모델입니다. 주요 장점은 MoE 경제성입니다. 총 30B 파라미터 중 토큰당 3B만 활성화되므로, 병렬화 플래그 없이 sglang serve 한 번으로 출시된 480×480·81프레임 프로파일을 제공합니다.
프롬프팅이 이 체크포인트의 독특한 부분입니다. 확장되지 않은 자연어 프롬프트 대신 구조화된 JSON 캡션을 기대하며, 요청의 prompt 문자열로 전달됩니다. 출시된 40스텝 프로파일 옆에 빠른 검증용 컴팩트 17프레임·12스텝 스모크테스트 프로파일도 있습니다.
파이프라인이 서빙하는 공개 체크포인트:
| Model ID | Task | Default output |
|---|---|---|
robbyant/lingbot-video-moe-30b-a3b |
Text to video | 480x480, 81 frames at 16 FPS |
체크포인트는 확장되지 않은 자연어 프롬프트 대신 구조화된 JSON 캡션을 기대합니다. JSON은 요청의 prompt 문자열로 전달됩니다. extra_params 객체가 아닙니다.
2. 설치 (Installation)
디퓨전 의존성으로 SGLang을 설치합니다:
uv pip install "sglang[diffusion]" --prerelease=allow
플랫폼별 설정은 SGLang Diffusion installation guide를 참고하세요.
3. LingBot Video MoE 서빙 (Serve LingBot Video MoE)
Hugging Face 모델 ID로 서버를 시작합니다:
sglang serve \
--model-path robbyant/lingbot-video-moe-30b-a3b \
--port 30010
4. 비디오 생성 (Generate a video)
다음 요청은 컴팩트 17프레임·12스텝 스모크테스트 프로파일을 사용합니다. 출시된 생성 프로파일에는 모델 기본값 81프레임·40스텝을 사용하세요.
import json
import time
from pathlib import Path
import requests
base_url = "http://127.0.0.1:30010"
prompt = json.dumps(
{
"comprehensive_description": {
"scene_content_description": (
"A small silver robot arm on a white table slowly reaches "
"toward a red cube. The background is a softly lit laboratory wall."
),
"camera_movement_description": (
"The camera is static at eye level in a medium shot."
),
},
"camera_info": {
"color": "Neutral",
"frame_size": "Medium",
"shot_type_angle": "Eye level",
"lens_size": "Medium",
"composition": "Center",
"lighting": "Soft light",
"lighting_type": "Artificial light",
},
"world_knowledge": [],
"prominent_elements": [
{
"name": "robot arm",
"description": "A small silver robot arm with a two-finger gripper.",
"actions": [
{
"timestamp": "[0.0s - 1.0s]",
"action": "reaches toward the red cube",
}
],
"location": "center of the frame",
"relative_size": "dominant",
"shape_and_color": "articulated silver metal arm",
"texture": "brushed metal",
"appearance_details": "two-finger gripper and visible joints",
"relationship": "reaching toward the red cube on the table",
"orientation": "upright, base on the table",
"pose": "reaching",
}
],
},
separators=(",", ":"),
)
response = requests.post(
f"{base_url}/v1/videos",
json={
"model": "robbyant/lingbot-video-moe-30b-a3b",
"prompt": prompt,
"size": "640x384",
"num_frames": 17,
"fps": 16,
"num_inference_steps": 12,
"guidance_scale": 6.0,
"flow_shift": 3.0,
"seed": 0,
},
timeout=60,
)
response.raise_for_status()
video_id = response.json()["id"]
while True:
job = requests.get(f"{base_url}/v1/videos/{video_id}", timeout=30).json()
if job["status"] == "completed":
break
if job["status"] == "failed":
raise RuntimeError(job.get("error") or "Video generation failed")
time.sleep(1)
video = requests.get(
f"{base_url}/v1/videos/{video_id}/content",
timeout=300,
)
video.raise_for_status()
Path("lingbot_video_moe.mp4").write_bytes(video.content)
5. 요청 제약 (Request constraints)
num_frames는1또는4n+1이어야 합니다. 17과 81이 예시입니다.- 너비와 높이 모두 16의 배수여야 합니다.
- 네이티브 기본값은
guidance_scale=6.0,flow_shift=3.0,num_inference_steps=40,fps=16입니다. - 프롬프트를 직렬화된 JSON으로 유지하세요. 원시 자유 텍스트는 체크포인트가 기대하는 캡션 형식 밖입니다.