파라미터 튜닝
파라미터 튜닝 (Parameter Tuning)
이 가이드는 Ascend NPU에서 SGLang 배포에 사용되는 각 파라미터의 역할을 설명해요. DeepSeek-V3.2 best practice 구성을 참조 예시로 사용하며, 테스트된 배포 구성의 전체 목록은 Ascend NPU Best Practice 페이지를 참고하세요.
출처: 문서
본문
이 가이드의 파라미터는 두 가지 범주로 나뉘어요:
- 필수 구성 (
[Required]로 표시): 대상 배포 시나리오(예: 다중 노드 통신, PD 분리)에 맞게 올바르게 설정해야 해요. 잘못된 값은 배포 실패나 잘못된 동작을 일으켜요.- 성능 최적화: 처리량, 지연, 메모리 효율을 향상시켜요. 최적 값은 특정 모델, 하드웨어, 작업 부하에 따라 달라지며 튜닝이 필요할 수 있어요. 최적 값이 명확하지 않은 곳에는 튜닝 지침이 제공돼요.
시스템 레벨 최적화 (System-Level Optimizations)
다음 시스템 레벨 튜닝 단계는 OS 간섭을 줄이고 CPU 스케줄링 결정성을 개선해요:
| 명령 / 변수 | 목적 |
|---|---|
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor |
모든 CPU 코어를 최대 주파수로 고정해 추론 중요 경로에서 DVFS로 인한 지연 지터를 제거해요. |
sysctl -w vm.swappiness=0 |
익명 페이지의 커널 스와핑을 최소화해요. 호스트 RAM에 고정된 NPU 메모리 버퍼의 페이지 폴트 위험을 줄여요. |
sysctl -w kernel.numa_balancing=0 |
자동 NUMA 페이지 마이그레이션을 비활성화해요. 추론이 실행되는 동안 커널이 메모리 페이지를 NUMA 노드 사이에서 이동시켜 지연 스파이크를 일으키는 것을 방지해요. |
sysctl -w kernel.sched_migration_cost_ns=50000 |
최소 작업 마이그레이션 비용을 설정해 스케줄러가 추론 스레드를 CPU 코어 사이에서 불필요하게 이동시키지 않게 해요. |
SGLANG_SET_CPU_AFFINITY=1 |
SGLang 워커 프로세스를 특정 CPU 코어에 바인딩해 고주파 스케줄링 루프의 크로스 코어 마이그레이션 오버헤드를 피해요. |
메모리 및 디바이스 구성 (Memory & Device Configuration)
| 변수 / 인자 | 목적 | 참조 값 |
|---|---|---|
PYTORCH_NPU_ALLOC_CONF=expandable_segments:True |
확장 가능한 NPU 메모리 할당기를 활성화해 메모리 풀이 동적으로 늘어나게 해요. 가변 메모리 요구 사항이 있는 작업 부하에서 OOM 오류를 피하고 MoE 아키텍처 같은 큰 모델에 필수예요. | expandable_segments:True |
STREAMS_PER_DEVICE=32 |
NPU 디바이스당 최대 병렬 스트림 수를 설정해요. 스트림이 많을수록 컴퓨트와 통신 연산의 오버랩이 좋아져요. 기본 32는 대부분 배포에 충분해요. 복잡한 파이프라인 병렬 설정에서 프로파일링이 스트림 경합을 보여줄 때만 늘리세요. |
32 |
--mem-fraction-static |
모델 가중치와 KV 캐시 풀에 할당되는 NPU 메모리 비율을 제어해요. 낮은 값은 중간 활성화를 위한 여유를 남기고, 높은 값은 더 많은 동시 요청을 서빙하기 위한 KV 캐시 용량을 극대화해요. 최적 값은 모델 크기, 시퀀스 길이, 사용 가능한 NPU 메모리에 따라 달라져요. 보수적으로 시작해 OOM 오류를 모니터링하며 점진적으로 늘리세요. | Prefill: 0.73, Decode: 0.79 |
통신 구성 (Communication Configuration)
| 변수 | 목적 | 참조 값 |
|---|---|---|
HCCL_BUFFSIZE |
HCCL 통신 버퍼 크기를 MB 단위로 설정해요. 큰 버퍼는 벌크 전송 처리량을 높이지만 호스트 메모리를 더 소비해요. 최적 값은 통신 패턴에 따라 달라져요 — 큰 값은 prefill(벌크 토큰 전송)에 유리하고, 작은 값은 decode(작은 배치)에 충분해요. 예상 토큰 디스패치량에 맞춰 튜닝하세요. | Prefill: 1200, Decode: 400 |
HCCL_SOCKET_IFNAME / GLOO_SOCKET_IFNAME |
[다중 노드에 필수] HCCL과 GLOO 분산 통신에 사용되는 네트워크 인터페이스를 지정해요. 다중 노드 배포에서는 고대역폭 노드 간 네트워크 인터페이스(예: RDMA 지원 NIC)로 설정해야 해요. 설정하지 않으면 프레임워크가 저대역폭 인터페이스로 기본 설정돼 분산 통신 성능이 심각하게 저하될 수 있어요. 단일 노드 배포에는 필요 없어요. | 클러스터별 설정 |
MoE & 전문가 병렬 처리 (MoE & Expert Parallelism)
| 변수 / 인자 | 목적 | 참조 값 |
|---|---|---|
--moe-a2a-backend |
MoE 전문가 디스패치와 컴바인을 위한 all-to-all 통신 백엔드를 선택해요. Ascend NPU에서 주요 옵션은 deepep(DeepEP)과 ascend_fuseep(Ascend Fused EP)이에요. DeepEP은 유연한 prefill/decode 디스패치 경로를 가진 대규모 모델에 최적화되고, ascend_fuseep은 일반적인 fused MoE 디스패치 경로를 제공해요. |
deepep |
--deepep-mode |
DeepEP 작동 모드를 선택해요. 선택 옵션: normal(높은 처리량, 긴 시퀀스, 큰 토큰 수에 최적화 — prefill에 적합), low_latency(낮은 지연, CUDA Graph 호환, 작은 배치에 최적화 — decode에 적합), auto(연산 유형에 따라 자동 전환). 모르겠으면 auto를, PD 분리에서 prefill/decode를 독립적으로 관리할 때는 명시적 모드를 사용하세요. |
Prefill: normal, Decode: low_latency |
SGLANG_DEEPEP_NUM_MAX_DISPATCH_TOKENS_PER_RANK |
하나의 랭크가 한 번의 DeepEP 연산에서 디스패치할 수 있는 최대 토큰 수를 설정해요(하드 상한: 1024). 큰 값은 디스패치당 더 많은 토큰을 수용하지만 버퍼 할당 오버헤드를 늘려요. prefill의 경우 많은 토큰이 처리되므로 큰 값이나 무제한(0)을 사용하세요. decode의 경우 예상 토큰 수에 맞추세요. max-running-requests * (1 + draft_tokens) <= 이 값을 만족해야 해요. |
Prefill: 0 (unbounded), Decode: 8 |
DEEP_NORMAL_MODE_USE_INT8_QUANT |
1로 설정하면 DeepEP 디스패치 연산자에서 중간 활성화를 INT8로 양자화해 MoE 디스패치 중 통신량을 줄여요. 많은 토큰을 가진 대규모 다중 노드 prefill에 가장 유리해요. 트레이드오프는 양자화로 인한 약간의 정확도 영향과 양자화/역양자화 연산의 추가 컴퓨트예요. |
Prefill: 1 |
TASK_QUEUE_ENABLE |
ASCEND Runtime 작업 큐 최적화 수준을 제어해요: 0 = 비활성, 1 = 기본 최적화, 2 = 더 큰 작업 융합과 오버랩을 가진 공격적 최적화. 높은 수준은 처리량을 높이지만 NPU Graph 실행 작업을 방해할 수 있어요. 일반 사용은 1로 시작하세요. 처리량 중요 prefill 작업부하는 2를, NPU Graph 호환이 필요한 decode는 0을 사용하세요. |
Prefill: 2, Decode: 0 |
--moe-dense-tp-size |
MoE dense(공유) MLP 레이어의 텐서 병렬 처리 크기를 설정해요. DP attention을 사용할 때, 각 DP 샤드가 이미 전체 가중치를 갖고 있으므로 1로 설정하면 dense MLP 레이어에 대한 DP 그룹 전체의 불필요한 all-reduce를 피할 수 있어요. DP attention이 없는 배포에서는 TP 크기와 맞추세요. |
1 |
Prefill 최적화 (Prefill Optimizations)
이 인자들과 환경 변수는 prefill 성능 튜닝에 중요해요:
| 인자 / 변수 | 목적 | 참조 값 |
|---|---|---|
--chunked-prefill-size |
prefill 청크당 최대 토큰 수를 설정해요. 양수 값은 chunked prefill을 활성화해 혼합 작업 부하에서 prefill과 decode를 인터리브해 더 나은 동시성을 제공해요. -1로 설정하면 청크를 비활성화하고 각 요청을 단일 순방향 패스로 처리하며, 이는 긴 컨텍스트 시퀀스를 가진 전용 prefill 서버에 선호돼요. |
-1 |
--max-prefill-tokens |
prefill 서버가 한 배치에서 처리할 수 있는 총 토큰 수를 제한해요. 유효 상한은 max(이 값, model_max_context_length)이에요. 대상 시퀀스 길이와 사용 가능한 NPU 메모리를 기준으로 설정해 메모리 사용량을 제한하면서 처리량을 극대화해요. OOM 오류가 날 때까지 늘려 튜닝하세요. |
68000 |
--max-running-requests |
처리되는 동시 요청 수를 제한해요. prefill의 경우 낮은 값(예: 1)은 각 요청에 더 많은 컴퓨트와 메모리를 집중시켜 요청당 처리량을 높여요 — 긴 시퀀스를 처리하는 전용 prefill 노드에 이상적이에요. 일반 목적 서빙에서는 다중 요청 동시성을 지원하도록 높은 값을 사용하세요. |
1 |
--disable-radix-cache |
RadixAttention을 통한 접두사 캐싱을 비활성화해요. 접두사 캐싱이 이점이 없고 메모리만 소비하는 겹치지 않는 긴 시퀀스를 처리할 때 설정하세요. 공유 시스템 프롬프트를 가진 채팅/대화 작업 부하에서는 설정을 해제(radix cache 활성화) 하세요. | true |
--disable-cuda-graph |
CUDA Graph 캡처를 비활성화해요. CUDA Graph는 작고 예측 가능한 배치 크기의 커널 실행 오버헤드를 줄여 decode에 이상적이에요. 크고 가변적인 배치 크기를 가진 prefill의 경우 CUDA Graph는 이점이 거의 없고 동적 형태에 문제를 일으킬 수 있어요. prefill 노드에서는 설정하고 decode 노드에서는 설정을 해제하세요. | true |
--enable-dsa-prefill-context-parallel |
(DeepSeek V3.2 DSA 전용) DSA(DeepSeek Sparse Attention)를 가진 DeepSeek V3.2의 긴 시퀀스 prefill 단계에 대한 컨텍스트 병렬 처리를 활성화해요. 시퀀스를 CP 랭크에 분산시켜 계산 비용이 큰 DSA prefill을 초장문 컨텍스트에서 병렬화해요. | Enabled |
--dsa-prefill-cp-mode |
(DeepSeek V3.2 DSA 전용) 긴 시퀀스를 컨텍스트 병렬 랭크에 어떻게 나눌지 제어해요: in-seq-split은 각 시퀀스를 CP 랭크에 균일하게 나눠 단일 요청 prefill에 최적이에요. round-robin-split(코드 기본)은 토큰을 인덱스 mod CP 크기로 분배해 다중 배치 prefill을 지원해요. --enable-dsa-prefill-context-parallel이 활성화될 때만 유효해요. |
in-seq-split |
--attn-cp-size |
어텐션 계산을 위한 컨텍스트 병렬 처리 그룹 크기를 지정해요. 큰 값은 시퀀스를 더 많은 랭크에 분산시켜 랭크당 메모리와 컴퓨트를 줄이는 대신 통신을 늘려요. DSA 모델의 경우 희소 어텐션 prefill의 CP 크기를 제어해요. 최대 병렬화를 위해 사용 가능한 디바이스 수로 설정하세요. | 32 |
Decode 최적화 (Decode Optimizations)
이 인자들과 환경 변수는 decode 성능 튜닝에 중요해요:
| 인자 / 변수 | 목적 | 참조 값 |
|---|---|---|
--dp-size / --data-parallel-size |
decode 서버의 데이터 병렬 처리 정도를 설정해요. DP attention이 활성화되면 어텐션 레이어는 DP 랭크에 샤딩되고 FFN/MoE 레이어는 텐서 병렬 처리를 사용해요. 큰 값은 더 많은 독립적인 decode 인스턴스를 만들어 병렬 요청 처리를 통한 처리량을 높여요. 총 카드 수에 균등하게 나누어 떨어지는 값을 선택하고 나머지 카드는 TP/EP에 사용하세요. | 8 |
--ep / --ep-size / --expert-parallel-size |
전문가 병렬 처리 정도를 설정해요. MoE 모델의 경우 전문가를 카드에 분산시켜 카드당 전문가 로딩 오버헤드를 줄이고 all-to-all 디스패치를 가능하게 해요. 코드 기본은 1이며 MoE 모델에서는 명시적으로 설정하세요. 최적 값은 모델의 전문가 수와 아키텍처에 따라 달라져요. 256개의 라우팅 전문가를 가진 DeepSeek V3.2는 ep=32를 사용해요. 전문가가 적은 모델은 비례적으로 작은 값을 사용하세요. |
32 |
--enable-dp-attention |
FFN/MoE 레이어에 텐서 병렬 처리를 유지하면서 어텐션 레이어의 데이터 병렬 처리를 활성화해요. 이것은 decode 처리량의 핵심 최적화예요 — 어텐션은 KV 캐시 중복을 줄이기 위해 DP 샤딩되고, MoE 레이어는 전문가 병렬 처리를 활용하기 위해 TP 샤딩을 유지해요. 어텐션이 컴퓨트 병목이 아닌 MoE 모델에 가장 적합해요. | Enabled |
--enable-dp-lm-head |
DP attention 그룹 전체에서 어휘 병렬 처리를 활성화해 LM head 가중치를 랭크에 샤딩해요. 각 랭크는 자신의 어휘 샤드에 대한 logits만 계산해 DP 그룹 전체에서 logits의 값비싼 all-gather를 피해요. DP attention이 활성화될 때 처리량을 유지하는 데 필수예요. | Enabled |
--cuda-graph-max-bs-decode |
CUDA Graph가 캡처되는 최대 배치 크기를 제한해요. 큰 값은 더 많은 배치 크기를 커버하지만 그래프 캡처 시간과 메모리 오버헤드를 늘려요. max-running-requests가 높지만 일반 배치 크기가 낮다면 더 작은 값을 사용해 캡처 오버헤드를 줄이세요. 서빙 중 관찰한 배치 크기 분포에 맞춰 튜닝하세요. |
4 |
SGLANG_SCHEDULER_SKIP_ALL_GATHER=1 |
DP attention이 활성화되면 스케줄러가 보통 DP 랭크 전체에서 all-gather를 수행해 준비된 요청의 전체 집합을 파악해요. 1로 설정하면 이 연산을 건너뛰어 decode 스케줄링 지연을 줄여요. DP 랭크 전체에 로드가 균형을 이룰 때만 안전해요(예: 라운드 로빈 로드 밸런싱 정책). DP 랭크 전체에 고르지 않은 로드 분포를 관찰하면 비활성화하세요. |
1 |
투기적 디코딩 (Speculative Decoding)
투기적 디코딩은 대상 모델이 검증하는 드래프트 토큰을 생성해 토큰당 지연을 줄여요:
| 인자 / 변수 | 목적 | 참조 값 |
|---|---|---|
--speculative-algorithm |
투기적 디코딩 알고리즘을 선택해요. NEXTN(EAGLE로 별칭)은 모델의 내장 MTP(Multi-Token Prediction) 헤드를 사용해 별도의 드래프트 모델이 필요 없어요. EAGLE3는 외부 드래프트 모델을 사용하며 추가 메모리를 대가로 더 높은 수용률을 달성할 수 있어요. 다른 내장 옵션에는 STANDALONE, NGRAM, DFLASH와 SpeculativeAlgorithm.register를 통한 플러그인 등록 이름이 있어요. 네이티브 MTP 지원 모델(예: DeepSeek V3.2/R1)은 NEXTN을, MTP가 없는 모델(예: Qwen MoE)은 EAGLE3를 선택하세요. |
NEXTN |
--speculative-num-steps |
반복당 투기적 순방향 패스 수예요. 스텝이 많을수록 수용 길이와 처리량이 증가할 수 있지만 지연이 추가돼요. prefill은 작은 값(1)을 사용해 prefill 지연 영향을 최소화하세요. decode는 더 큰 값(2–4)을 사용해 처리량을 극대화하세요. 지연 vs 처리량 요구에 맞춰 튜닝하세요. |
Prefill: 1, Decode: 3 |
--speculative-eagle-topk |
위치당 고려되는 드래프트 토큰 수를 제한해요. 낮은 값은 가능성이 낮은 토큰의 컴퓨트를 줄이고 overlap 스케줄러(기본 활성화)에 필요해요. 높은 값은 수용률을 높일 수 있지만 오버헤드를 더해요. overlap 스케줄러에는 1로 시작하고, 그 외에는 4–8이 일반적이에요. |
1 |
--speculative-num-draft-tokens |
투기적 스텝당 생성되는 드래프트 토큰 수예요. 높은 값은 잠재적 수용 길이와 처리량을 높이지만 스텝당 계산을 더해요. 지연 예산과 균형을 맞추세요 — prefill은 오버헤드를 최소화하려면 일반적으로 드래프트 토큰을 적게(2) 사용하고, decode는 처리량을 극대화하려면 더 많이(4) 사용할 수 있어요. |
Prefill: 2, Decode: 4 |
SGLANG_ENABLE_OVERLAP_PLAN_STREAM=1 |
EAGLE v2/v3 투기적 디코딩 워커의 오버랩 플랜 스트림 기능을 활성화해요. 드래프트 모델 계산을 대상 모델 검증과 오버랩시켜 드래프트 지연을 효과적으로 숨겨요. EAGLE 기반 투기적 디코딩을 사용할 때 활성화하세요. NEXTN에는 적용되지 않아요. | 1 |
양자화 (Quantization)
| 인자 | 목적 | 참조 값 |
|---|---|---|
--quantization modelslim |
Ascend ModelSlim 양자화 도구를 사용해 W4A4/W4A8/W8A8/W4A16 사전 양자화 모델 가중치를 로드해요. 이는 BF16 대비 모델 가중치 크기를 약 50%(w8) 또는 75%(w4) 줄여 더 큰 모델이 최소한의 정확도 저하로 NPU 메모리에 들어가게 해요. 양자화 방법은 모델의 quant_model_description.json 파일에서 자동 감지돼요. |
modelslim |
처리량 구성 (Throughput Configuration)
| 인자 / 변수 | 목적 | 참조 값 |
|---|---|---|
--tokenizer-worker-num |
병렬 토크나이저 워커 프로세스 수를 설정해요. 이걸 늘리면 여러 입력/출력 스트림을 동시에 토큰화할 수 있어 높은 요청 동시성에서 토크나이저가 병목이 되는 것을 방지해요. CPU 코어 수와 예상 요청 속도에 맞춰 설정하세요. | 4 |
--load-balance-method |
DP 로드 밸런싱 전략을 선택해요. 옵션: auto(기본, 최상의 전략 자동 선택), round_robin(균등 분배를 위해 DP 랭크에 요청 순환 할당), total_tokens(토큰 로드로 밸런싱), total_requests(요청 수로 밸런싱), follow_bootstrap_room(부트스트랩 룸 할당을 따름). 간단한 균등 분배는 round_robin으로, 요청 길이가 매우 가변적이면 total_tokens를 사용하세요. |
round_robin |
ASCEND_MF_STORE_URL |
[PD 분리에 필수] PD 분리를 위한 MemFabric config store 주소를 설정해요. 이것은 MemFabric 기반 KV 캐시 전송 서비스를 찾고 연결하기 위해 decode 노드가 사용하는 prefill 프라이머리 노드의 IP와 임의의 포트예요. 비분리 배포에서는 생략하세요. | Prefill IP 및 포트 |
추가 Ascend NPU 특화 파라미터 (Additional Ascend NPU-Specific Parameters)
다음 환경 변수는 다른 best practice 구성에서 사용되며 모델과 배포에 따라 적용될 수 있어요:
| 변수 | 목적 | 일반적 사용 |
|---|---|---|
HCCL_OP_EXPANSION_MODE=AIV |
HCCL 통신 알고리즘 스케줄링을 AIV(Ascend Intelligent Vision) 확장 모드로 구성해 특정 집합 연산의 통신 효율을 개선할 수 있어요. | Qwen MoE 및 R1 비DSA 구성에서 사용 |
SGLANG_NPU_USE_MLAPO=1 |
(DeepSeek MLA 전용) MLA(Multi-Head Latent Attention) 아키텍처를 가진 DeepSeek 모델의 MLA 전처리 단계에서 MLAPO 융합 연산자를 사용해요. |
DeepSeek R1과 함께 사용 |
SGLANG_USE_FIA_NZ=1 |
(DeepSeek MLA 전용) 더 나은 메모리 접근 효율을 위해 KV Cache를 FIA NZ 형식으로 리셰이프해요. SGLANG_NPU_USE_MLAPO=1과 함께 사용해야 해요. |
DeepSeek R1과 함께 사용 |
SGLANG_NPU_USE_MULTI_STREAM=1 |
(DeepSeek MoE 전용) DeepSeek MoE 모델에서 공유 전문가와 라우팅 전문가의 이중 스트림 계산을 활성화해 두 전문가 유형이 별도 스트림에서 동시에 실행되게 해요. | DeepSeek R1과 함께 사용 |
SGLANG_USE_AG_AFTER_QLORA=1 |
all-gather 연산을 Q-LoRA 처리가 끝난 후까지 지연시켜요. all-gather 전에 Q-LoRA 투영을 수행해 전송할 바이트 수를 줄여 통신 오버헤드를 감소시켜요. | DeepSeek V3.2/R1 prefill과 함께 사용 |
기능 호환성 (Feature Compatibility)
이 테이블은 Ascend NPU에서 SGLang 기능의 기능별 호환성을 보여줘요. Ascend에서 성능 영향이 있는 기능이 포함돼요. 두 기능의 교차점에 있는 각 셀은 함께 사용할 수 있는지 나타내요.
사용되는 기호는 다음과 같아요:
- 🟢 = 완전 호환
- 🟠 = 부분 호환
- ❌ = 호환 없음
- ❔ = 알 수 없음 또는 TBD
| 기능 | Tensor Parallelism | Data Parallelism | Expert Parallelism | Context Parallelism | PD Disaggregation | Quantization | Chunked Prefill | NPU Graph | Speculative Decoding | PrefixCache | Overlap Schedule | DP LM Head | MLAPO | Multistream MoE | EPLB | NZ Weight Format |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Tensor Parallelism | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | |
| Data Parallelism | 🟢 | 🟢 | 🟠 | 🟢 | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | |
| Expert Parallelism | 🟢 | 🟢 | 🟠 | 🟢 | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | |
| Context Parallelism | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟠 | ❔ | 🟢 | 🟢 | 🟢 | 🟢 | |
| PD Disaggregation | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | 🟠 | 🟢 | 🟠 | 🟢 | 🟠 | 🟠 | 🟢 | 🟠 | 🟢 | |
| Quantization | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | |
| Chunked Prefill | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟢 | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟢 | |
| NPU Graph | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟢 | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | |
| Speculative Decoding | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | |
| PrefixCache | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | |
| Overlap Schedule | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | 🟠 | 🟠 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | |
| DP LM Head | 🟢 | 🟢 | 🟠 | ❔ | 🟠 | 🟠 | 🟠 | 🟠 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | |
| MLAPO | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | ❔ | 🟢 | |
| Multistream MoE | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | ❔ | 🟢 | |
| EPLB | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | 🟢 | 🟠 | ❔ | ❔ | 🟠 | |
| NZ Weight Format | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 |
기능 설명 (Feature descriptions)
Tensor Parallelism (--tp-size)
모델 가중치를 여러 NPU 디바이스에 분할해 큰 모델을 협력적으로 로드하고 실행할 수 있게 해요. 각 디바이스는 모든 가중치 텐서의 샤드를 보유하고 HCCL all-reduce로 통신해요. 단일 디바이스 메모리를 초과하는 모델을 배포하는 주요 메커니즘이에요.
Data Parallelism (--dp-size, --enable-dp-attention)
독립적인 디바이스 그룹에 모델을 복제해 여러 요청을 병렬로 처리해 처리량을 높여요. --enable-dp-attention을 사용하면 어텐션 레이어는 DP 랭크에 복제되는 반면 FFN/MoE 레이어는 텐서/전문가 병렬로 유지돼요. 이는 작은 배치 decode 중 상당한 TP 어텐션 레이어의 통신 오버헤드를 줄이면서 MoE 레이어의 무거운 컴퓨트와 메모리 요구를 분산된 상태로 유지해요.
Expert Parallelism (--ep-size)
각 디바이스가 전문가의 일부를 보유하고 모델의 gating 네트워크를 기반으로 all-to-all 통신으로 토큰을 라우팅해요. 기본 라운드 로빈 전문가 배치와 동적 EPLB(Expert Parallelism Load Balancing)를 포함한 로드 밸런싱 방법을 지원해요.
Context Parallelism (--attn-cp-size)
긴 입력 시퀀스를 디바이스에 분할해 단일 요청의 KV 캐시와 어텐션 계산을 분산시켜요. 이는 단일 디바이스 메모리를 초과하는 매우 긴 컨텍스트 길이(예: 128k 토큰)를 서빙할 수 있게 해요. Ascend에서 --attn-cp-size는 --tp-size와 같아야 해요.
PD Disaggregation (--disaggregation-mode)
prefill(P)과 decode(D) 단계를 서로 다른 디바이스 그룹으로 분리해 각 단계가 컴퓨트와 메모리 특성에 맞게 독립적으로 최적화되게 해요. Prefill 노드는 긴 입력 처리를 높은 처리량으로 처리하고, decode 노드는 저지연 토큰 생성에 집중해요. Ascend MemFabric 전송 백엔드(--disaggregation-transfer-backend ascend)를 사용해요.
Quantization (--quantization)
모델 가중치와 활성화 정밀도를 낮춰(예: W8A8, W4A8, W4A16) 메모리 사용량을 줄이고 처리량을 높여요. Ascend에서 네이티브로 지원되고 고도로 최적화된 양자화 방법은 ModelSlim이에요(W4A4, W8A8, W4A8 dynamic/static 지원). AWQ, GPTQ, Auto-round, Compressed-tensors 같은 다른 커뮤니티 형식의 지원은 환경에 특정 Ascend 커스텀 커널이 있는지에 따라 달라져요. 자세한 내용과 호환성 매트릭스는 Quantization on Ascend를 참고하세요.
Chunked Prefill (--chunked-prefill-size)
큰 prefill 계산을 더 작고 고정된 크기의 청크로 나눠 decode 배치와 스케줄링 인터리빙을 개선해요. 이를 통해 긴 prefill 요청이 decode 지연을 막지 않게 해요. 전용 prefill 노드에서는 -1을 사용해 chunked prefill을 비활성화하세요. 청크 경계가 스케줄링 복잡성을 도입하므로 대부분 기능과 부분 호환돼요.
NPU Graph (--cuda-graph-bs-decode)
NPU에서 컴퓨트 그래프를 캡처하고 재생해 커널 실행 오버헤드를 제거해요. NVIDIA GPU의 CUDA Graph와 유사해요. 내부적으로 torch.npu.NPUGraph를 사용해요. 고정되고 예측 가능한 배치 크기(--cuda-graph-bs-decode)의 decode에 가장 효과적이에요. 그래프 캡처가 고정된 제어 흐름과 텐서 형태를 요구하므로 대부분 기능과 부분 호환돼요.
--enable-torch-compile은 NPU Graph와 호환되지 않아요. torch.compile을 활성화하면--disable-cuda-graph로 NPU Graph를 비활성화해야 해요.
Speculative Decoding (--speculative-algorithm)
단일 순방향 패스에서 여러 미래 토큰을 예측한 다음 모델에 대해 검증해 토큰당 지연을 줄여요. Ascend는 NEXTN(DeepSeek 모델용, 모델 자체 hidden states 사용)과 EAGLE3(Qwen MoE 모델용, 별도 드래프트 모델 사용)를 지원해요. --speculative-num-steps, --speculative-eagle-topk, --speculative-num-draft-tokens로 제어돼요. Ascend에서 SGLANG_ENABLE_OVERLAP_PLAN_STREAM=1은 투기적 디코딩을 위한 최적화된 overlap 스케줄러를 활성화해요.
비탐욕 요청의 경우 Ascend 대상 검증은 요청 수준의 temperature, top_k, top_p를 적용해요. 기본 대상 전용 모드는 선형 및 트리 형태 후보를 지원해요. 고전적 거부 샘플링은 --speculative-eagle-topk 1로 구성된 선형 체인에 --speculative-use-rejection-sampling으로 사용할 수 있어요.
PrefixCache (--disable-radix-cache)
공통 프롬프트 접두사를 공유하는 요청 간에 KV 캐시를 재사용해(Radix Cache) 반복적인 prefill 계산을 줄이고 첫 토큰 시간을 낮춰요. 기본 활성화. 접두사 재사용이 예상되지 않으면 --disable-radix-cache로 비활성화하세요(예: PD 분리의 전용 prefill 노드, 랜덤 입력 벤치마크).
Overlap Schedule
Ascend에서 이것은 주로 환경 변수 SGLANG_ENABLE_OVERLAP_PLAN_STREAM=1로 제어되며, 투기적 디코딩 시나리오를 위한 최적화된 overlap 스케줄러를 활성화해요. 전문가 디스패치/리듀스 통신이 다음 배치 계산과 오버랩될 수 있는 투기적 디코딩과 DP attention이 있는 decode 중에 가장 효과적이에요.
DP LM Head (--enable-dp-lm-head)
언어 모델 헤드(최종 어휘 투영 레이어)를 DP 랭크에 샤딩해 메모리 소비를 줄이고 decode 처리량을 개선해요. 이것 없이는 각 DP 랭크가 LM head의 전체 복사본을 보유하며, 큰 어휘에 비효율적이에요. 일반적으로 --enable-dp-attention과 함께 사용돼요.
MLAPO (SGLANG_NPU_USE_MLAPO=1)
DeepSeek 스타일 Multi-head Latent Attention 모델을 위한 MLAPO(MLA Pre-Processing Optimization) 융합 연산자를 활성화해 Q/K/V 투영과 흡수를 위한 여러 개별 커널을 단일 통합 커널로 대체해요. prefill 지연과 메모리 대역폭 사용량을 줄여요. 대부분의 DeepSeek best-practice 구성에서 사용돼요.
Multistream MoE (SGLANG_NPU_USE_MULTI_STREAM=1)
MoE 레이어의 이중 스트림 병렬 실행을 활성화해 공유 전문가와 라우팅 전문가가 별도 NPU 스트림에서 동시에 실행되게 해요. 이는 공유 전문가 계산을 라우팅 전문가 디스패치와 오버랩시켜 MoE 레이어 처리량을 개선해요.
EPLB (--enable-eplb)
작업 부하에 따라 전문가를 디바이스에 동적으로 재분배하는 Expert Parallelism Load Balancing을 활성화해 균등한 전문가 활용을 보장하고 핫스팟을 방지해요. deepseek 밸런싱 알고리즘을 사용해요. deepep MoE A2A 백엔드와 호환되지만 ascend_fuseep과는 호환되지 않아요.
NZ Weight Format (SGLANG_NPU_DISABLE_ACL_FORMAT_WEIGHT)
모델 가중치 텐서를 Ascend NPU ACL FRACTAL_NZ 형식(형식 29)으로 캐스팅해 Da Vinci AI 코어의 메모리 접근 효율을 개선해요. 전역에서 기본 활성화. 형식이 다른 기능(예: EPLB)과 충돌하면 SGLANG_NPU_DISABLE_ACL_FORMAT_WEIGHT=1로 비활성화하세요. Linear 가중치, MoE 가중치, 양자화 가중치, MLA QKV 투영, KV Cache(FIA용 PA_NZ / nzcache 모드)에 적용돼요. 관련 환경 변수: SGLANG_USE_FIA_NZ=1(SGLANG_NPU_USE_MLAPO=1 필요).
같이 보기 (See Also)
- Ascend NPU Best Practice — 지원되는 모든 모델의 완전한 배포 구성과 벤치마크 결과
- Ascend NPU 환경 변수 — 모든 Ascend NPU 관련 환경 변수 참조
- DeepSeek V3.2 가이드 — DeepSeek V3.2 배포 상세 사용 가이드
- 전문가 병렬 처리 — DeepEP 구성 및 튜닝 가이드