자회귀 단계가 있는 확산 모델

자회귀 단계가 있는 확산 모델 (Diffusion models with autoregressive stages)

이 페이지는 프로세스 내에서 또는 별도로 배포된 자회귀(autoregressive, AR) 인코더로 확산 파이프라인을 실행하는 방법을 설명해요. SGLang Diffusion은 두 가지 AR 실행 경로를 지원해요. Qwen Image Layered와 LongCat-Image는 네이티브 Qwen2.5-VL 컴포넌트를 프로세스 내에서 사용해요. GLM-Image는 번들된 Transformers 구현을 사용하거나 AR 추론을 별도의 SGLang 서버에 위임할 수 있어요.

출처: 문서

본문

SGLang Diffusion은 두 가지 AR 실행 경로를 지원해요. Qwen Image Layered와 LongCat-Image는 네이티브 Qwen2.5-VL 컴포넌트를 프로세스 내(in-process)에서 사용해요. GLM-Image는 번들된 Transformers 구현을 사용하거나 별도의 SGLang 서버에 AR 추론을 위임할 수 있어요.

GLM-Image 빠른 시작 (Quick Start)

번들된 Transformers 구현(기본값)으로 GLM-Image 실행:

# Terminal 1 : launch server
sglang serve --model-path zai-org/GLM-Image --port ${PORT}
# Terminal 2 : launch client
curl http://${HOST}:${PORT}/v1/images/generations \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "prompt",
    "n": 1,
    "size": "widthxheight"
  }'

AR 단계에 별도의 SGLang 서버를 사용해 GLM-Image 실행:

# Terminal 1 : launch server with AR model
sglang serve --model-path /path/to/zai-org/GLM-Image/vision_language_encoder/ \
--tokenizer-path /path/to/zai-org/GLM-Image/processor/ --enable-multimodal --port ${AR_PORT}
# Terminal 2 : launch server with Diffusion model
sglang serve --model-path /path/to/zai-org/GLM-Image/ \
  --srt-encoder-url "http://${HOST}:${AR_PORT}" \
  --port ${PORT}
# Terminal 3 : launch client
curl http://${HOST}:${PORT}/v1/images/generations \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "prompt",
    "n": 1,
    "size": "widthxheight"
  }'

지원 매트릭스 (Support matrix)

Model Transformers backend SGLang backend
GLM-Image T2I, I2I, V2I T2I
Qwen Image Layered Not used I2I, in-process native Qwen2.5-VL
LongCat-Image Not used T2I, in-process native Qwen2.5-VL

배포 가정 및 제한 사항 (Deployment Assumptions & Limitations)

:::warning 네트워크 지연 및 타임아웃: SGLang 백엔드 모드에서 Diffusion 서버는 모든 자회귀(AR) 단계마다 --srt-encoder-url에 HTTP 요청을 보내요.

  • 긴 모델 생성 중 요청이 끊기지 않도록 --srt-encoder-timeout을 늘리세요(예: 100초로 설정).

  • 일시적인 네트워크 지연이나 짧은 연결 끊김으로부터 시스템을 보호하려면 --srt-encoder-connection-timeout을 사용해요. :::

  • 권장 설정: 두 서버를 같은 머신이나 동일한 고속 로컬 네트워크 안에서 실행해요.

  • 크로스-리전 경고: Diffusion 서버와 AR 서버를 서로 다른 지역에서 실행하면 토큰 생성이 느려지고 성능이 크게 저하돼요.

  • 시작 시 연결 확인: SGLang은 시작할 때 --srt-encoder-url에 대한 연결을 자동으로 확인해요. 원격 AR 호스트가 오프라인이면 서버가 즉시 중지돼요.

Ascend NPU 환경 (Ascend NPU ENV)

같은 NPU 그룹에서 2개 서버를 실행하려면 환경 변수를 지정해야 해요. https://www.hiascend.com/document/detail/zh/canncommercial/850/maintenref/envvar/envref_07_0144.html

예시:

# Terminal 1 : server with AR model
export HCCL_IF_BASE_PORT=23000
export HCCL_HOST_SOCKET_PORT_RANGE="23000-23199"
export HCCL_NPU_SOCKET_PORT_RANGE="23200-23399"
# Terminal 2 : server with diffusion model
export HCCL_IF_BASE_PORT=24000
export HCCL_HOST_SOCKET_PORT_RANGE="24000-24199"
export HCCL_NPU_SOCKET_PORT_RANGE="24200-24399"

모범 사례 (Best practices)

Ascend A3 시리즈, 2카드(4디바이스)용 GLM-Image 예시:

# Terminal 1 : server with AR model
export HCCL_IF_BASE_PORT=23000
export HCCL_HOST_SOCKET_PORT_RANGE="23000-23199"
export HCCL_NPU_SOCKET_PORT_RANGE="23200-23399"
sglang serve --model-path /path/to/zai-org/GLM-Image/vision_language_encoder/ \
--tokenizer-path /path/to/zai-org/GLM-Image/processor/ --enable-multimodal \
--cuda-graph-bs-decode 1 --device npu --attention-backend ascend --image-processor-backend pil \
--tp-size 4 --port ${PORT} --mem-fraction-static 0.4

두 번째 터미널에서 확산 서버 실행:

# Terminal 2 : run SGL-Diffusion generate command
export HCCL_IF_BASE_PORT=24000
export HCCL_HOST_SOCKET_PORT_RANGE="24000-24199"
export HCCL_NPU_SOCKET_PORT_RANGE="24200-24399"
SGLANG_CACHE_DIT_FN=2 SGLANG_CACHE_DIT_BN=1 SGLANG_CACHE_DIT_WARMUP=4 SGLANG_CACHE_DIT_RDT=0.4 \
SGLANG_CACHE_DIT_MC=4 SGLANG_CACHE_DIT_TAYLORSEER=true SGLANG_CACHE_DIT_TS_ORDER=2 \
SGLANG_CACHE_DIT_ENABLED=true sglang generate --model-path /path/to/zai-org/GLM-Image/ \
--prompt "A curious raccoon" --height 1920 --width 1088 --num-inference-steps 50 --num-gpus 4 \
--sp-degree 4 --srt-encoder-url "http://${HOST}:${PORT}" --warmup-mode request

결과:

Warmed-up request processed in 33.82 seconds (with warmup excluded)

더 알아보기