확산 언어 모델
확산 언어 모델 (Diffusion language models)
이 페이지는 확산 언어 모델(Diffusion language model, DLLM)을 SGLang에서 실행하는 방법을 설명해요. 확산 언어 모델은 병렬 디코딩 능력을 갖춘 비자회귀(non-autoregressive) 텍스트 생성에 유망한 방식이에요. 자회귀 언어 모델과 달리, 확산 언어 모델마다 서로 다른 디코딩 전략이 필요해요.
출처: 문서
본문
확산 언어 모델은 병렬 디코딩 능력을 갖춘 비자회귀 텍스트 생성에 유망한 분야예요. 자회귀 언어 모델과 달리, 서로 다른 확산 언어 모델은 서로 다른 디코딩 전략을 필요로 해요.
예시 실행 명령 (Example Launch Command)
SGLang은 LowConfidence, JointThreshold 같은 다양한 DLLM 알고리즘을 지원해요.
python3 -m sglang.launch_server \
--model-path inclusionAI/LLaDA2.0-mini \ # example HF/local path
--dllm-algorithm LowConfidence \
--dllm-algorithm-config ./config.yaml \ # Optional. Uses the algorithm's default if not set.
--host 0.0.0.0 \
--port 30000
FDFO 스케줄링 (First-Done-First-Out Scheduling)
FDFO 스케줄링은 기본적으로 활성화돼요. 각 요청은 fast-converging 요청이 slow long-tail 요청을 기다려야 하는 lockstep 방식(헤드 오브 라인 차단) 대신, 자체 블록이 해결되자마자 배치에서 나가요. 이는 처리량을 개선하며 --dllm-algorithm과 직교하므로 어떤 dLLM 알고리즘과도 동작해요. 동기식 lockstep 스케줄링으로 폴백하려면 --no-dllm-fdfo를 전달해요:
python3 -m sglang.launch_server \
--model-path inclusionAI/LLaDA2.0-mini \
--dllm-algorithm LowConfidence \
--no-dllm-fdfo \
--host 0.0.0.0 \
--port 30000
예시 구성 파일 (Example Configuration File)
선택한 알고리즘에 따라 구성 파라미터가 달라져요.
LowConfidence 구성:
# Confidence threshold for accepting predicted tokens
# - Higher values: More conservative, better quality but slower
# - Lower values: More aggressive, faster but potentially lower quality
# Range: 0.0 - 1.0
threshold: 0.95
# Default: 32, for LLaDA2MoeModelLM
block_size: 32
JointThreshold 구성:
# Decoding threshold for Mask-to-Token (M2T) phase
# - Higher values: More conservative, better quality but slower
# - Lower values: More aggressive, faster but potentially lower quality
# Range: 0.0 - 1.0
threshold: 0.5
# Decoding threshold for Token-to-Token (T2T) phase
# Range: 0.0 - 1.0
# Setting to 0.0 allows full editing (recommended for most cases).
edit_threshold: 0.0
# Max extra T2T steps after all masks are removed. Prevents infinite loops.
max_post_edit_steps: 16
# 2-gram repetition penalty (default 0).
# An empirical value of 3 is often sufficient to mitigate most repetitions.
penalty_lambda: 0
예시 클라이언트 코드 (Example Client Code Snippet)
다른 지원 모델과 마찬가지로 확산 언어 모델도 REST API나 Python 클라이언트로 사용할 수 있어요.
실행된 서버에 생성 요청을 보내는 Python 클라이언트 예시:
import sglang as sgl
def main():
llm = sgl.Engine(model_path="inclusionAI/LLaDA2.0-mini",
dllm_algorithm="LowConfidence",
max_running_requests=1,
trust_remote_code=True)
prompts = [
"<role>SYSTEM</role>detailed thinking off<|role_end|><role>HUMAN</role> Write a brief introduction of the great wall <|role_end|><role>ASSISTANT</role>"
]
sampling_params = {
"temperature": 0,
"max_new_tokens": 1024,
}
outputs = llm.generate(prompts, sampling_params)
print(outputs)
if __name__ == '__main__':
main()
실행된 서버에 생성 요청을 보내는 curl 예시:
curl -X POST "http://127.0.0.1:30000/generate" \
-H "Content-Type: application/json" \
-d '{
"text": [
"<role>SYSTEM</role>detailed thinking off<|role_end|><role>HUMAN</role> Write the number from 1 to 128 <|role_end|><role>ASSISTANT</role>",
"<role>SYSTEM</role>detailed thinking off<|role_end|><role>HUMAN</role> Write a brief introduction of the great wall <|role_end|><role>ASSISTANT</role>"
],
"stream": true,
"sampling_params": {
"temperature": 0,
"max_new_tokens": 1024
}
}'
지원 모델 (Supported Models)
지원 모델은 아래 표에 정리돼 있어요.
| Model Family | Example Model | Description |
|---|---|---|
| LLaDA2.0 (mini, flash) | inclusionAI/LLaDA2.0-flash |
LLaDA2.0-flash는 100B Mixture-of-Experts(MoE) 아키텍처를 갖춘 확산 언어 모델이에요. |
| SDAR (JetLM) | JetLM/SDAR-8B-Chat |
SDAR 시리즈 확산 언어 모델(Chat), 밀집(dense) 아키텍처. |
| SDAR (JetLM) | JetLM/SDAR-30B-A3B-Chat |
SDAR 시리즈 확산 언어 모델(Chat), MoE 아키텍처. |
| DiffusionGemma | google/diffusiongemma-26B-A4B-it |
균일 상태(renoising) 블록-확산 멀티모달(텍스트 + 이미지) MoE, 총 25.2B / 활성 3.8B, Gemma4Renoise 샘플러로 서빙. |