4x DGX Spark에서 고품질 GLM-5.2 NVFP4 양자화 구동 - 가이드, 결과 및 비교
High-quality GLM-5.2 Quant on 4x DGX Spark - Guide, Results, and Comps
핵심 요약
4개의 DGX Spark 노드에서 GLM-5.2 모델을 128K 컨텍스트로 구동한 실험 결과와 최적화 가이드를 공유합니다.
- 성능 결과 — 128K 컨텍스트에서 약 13~16 tps의 디코드 속도 달성함
- 양자화 기술 — NVFP4를 사용하여 모델 크기를 1.5TB에서 410GB로 축소함
- 최적화 기법 — vLLM 패치, DCP4, MTP1 및 Ray 설정 최적화를 통해 구동함
- 하드웨어 비교 — M3 Ultra와의 성능 차이 및 DGX Spark 환경의 제약 사항 분석함
4개의 DGX Spark에서 128K 컨텍스트로 GLM-5.2 NVFP4를 구동하는 데 성공했습니다. 여전히 틈새/해킹 수준의 설정이지만, 이제는 단순한 생존 증명을 넘어 실질적인 서빙 포인트가 되었습니다.
목표: 4x Spark에서 구동되는 고품질 4비트 양자화. 모델: https://huggingface.co/Mapika/GLM-5.2-NVFP4
TL;DR: fp8_ds_mla에서 128k 컨텍스트, c0 디코드에서 초당 약 15-16 토큰, 긴 컨텍스트에서는 약 13 tps로 떨어짐(매우 잘 유지됨)
다른 TL;DR: unsloth Q4_K_S 양자화를 "그냥 돌릴 수 있는" m3ultra 512GB도 있음. 자세한 내용은 아래에 있지만, MLA 커널 지원 부족으로 인해 맥은 c=0에서 약간의 디코드 우위를 가지고 시작하지만 컨텍스트가 커질수록 매우 나쁘게 무너짐.
하드웨어: 4x 표준 nVidia 브랜드 GB10 DGX Spark, 그리고 Microtik RoCE 스위치.
카드 내용을 인용하자면:
MoE 전문가 FFN(라우팅 + 공유)은 NVFP4로 양자화됨; 어텐션(MLA + DeepSeek 스타일 DSA 라이트닝 인덱서), 라우터, LM 헤드는 BF16으로 유지됨. 이는 체크포인트를 1.5 TB에서 410 GB(~3.7배)로 줄이면서도 GSM8K 정확도를 BF16의 2포인트 이내로 유지함.
이게 흥미로운 이유: 모델이 너무 크고 메모리가 너무 빡빡해서 Spark를 일반적인 개별 GPU 하드웨어처럼 다룰 수 없음. 승부수는 디코드-컨텍스트 병렬 처리와 공격적인 시스템/Ray 메모리 트리밍을 결합한 것임. DCP4는 디코드 컨텍스트를 4개의 TP 랭크에 걸쳐 샤딩하는데, 이것이 128K를 가능하게 함. MTP1은 사용 가능한 수준으로 생성 속도를 회복함.
주요 결과:
4x DGX Spark / GB10, 노드당 GPU 1개
GLM-5.2 NVFP4 MTP 하이브리드 체크포인트
DCP + B12X 희소 MLA 패치가 포함된 vLLM 포크
TP4 / PP1 / DCP4 / MTP1
fp8 KV 캐시, 랭크당 명시적 1.81 GB
131,072 최대 모델 길이
132,096 피팅된 KV 토큰
512 토큰/초 프리필
짧은 프롬프트 코드 생성 시 초당 약 14.5-15.2 출력 토큰
약간 일관성이 없을 수 있음, 예를 들어 캐시되지 않은 112k 프롬프트에서:
(APIServer pid=736) INFO 06-29 00:12:03 [loggers.py:277] Engine 000: Avg prompt throughput: 511.6 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 7.2%, Prefix cache hit rate: 0.0%
(APIServer pid=736) INFO 06-29 00:12:13 [loggers.py:277] Engine 000: Avg prompt throughput: 512.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 11.1%, Prefix cache hit rate: 0.0%
(APIServer pid=736) INFO 06-29 00:12:23 [loggers.py:277] Engine 000: Avg prompt throughput: 511.9 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 15.0%, Prefix cache hit rate: 0.0%
(APIServer pid=736) INFO 06-29 00:12:33 [loggers.py:277] Engine 000: Avg prompt throughput: 511.9 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 18.8%, Prefix cache hit rate: 0.0%
(APIServer pid=736) INFO 06-29 00:12:43 [loggers.py:277] Engine 000: Avg prompt throughput: 512.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 22.7%, Prefix cache hit rate: 0.0%
(APIServer pid=736) INFO 06-29 00:12:53 [loggers.py:277] Engine 000: Avg prompt throughput: 409.6 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 25.8%, Prefix cache hit rate: 0.0%
(APIServer pid=736) INFO 06-29 00:13:03 [loggers.py:277] Engine 000: Avg prompt throughput: 512.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 29.7%, Prefix cache hit rate: 0.0%
(APIServer pid=736) INFO 06-29 00:13:13 [loggers.py:277] Engine 000: Avg prompt throughput: 511.9 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 33.6%, Prefix cache hit rate: 0.0%
(APIServer pid=736) INFO 06-29 00:13:23 [loggers.py:277] Engine 000: Avg prompt throughput: 512.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 37.5%, Prefix cache hit rate: 0.0%
(APIServer pid=736) INFO 06-29 00:13:33 [loggers.py:277] Engine 000: Avg prompt throughput: 409.5 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 40.6%, Prefix cache hit rate: 0.0%
(APIServer pid=736) INFO 06-29 00:13:43 [loggers.py:277] Engine 000: Avg prompt throughput: 512.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Waiting: 0 reqs, GPU KV cache usage: 44.5%, Prefix cache hit rate: 0.0%


