자회귀 단계가 있는 확산 모델
자회귀 단계가 있는 확산 모델 (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)