오늘 2x DGX Spark에서 Qwen3.8-Flash-Next로 181 tok/s(총합) 달성함
Today I hit 181 toks/s (aggregate) on Qwen3.8-Flash-Next on 2x DGX Sparks
핵심 요약
2개의 DGX Spark 클러스터와 NVMe 최적화를 통해 Qwen3.8 모델에서 181 tok/s의 높은 처리량을 달성한 사례 공유.
- 하드웨어 구성 — 2개의 DGX Spark를 RDMA로 연결하여 TP=2 설정함
- 성능 최적화 — NVMe mmap과 64개 gather 스레드로 메모리 병목 해결
- 모델 설정 — 512K 컨텍스트 확장 및 NVFP4 양자화 적용
- vLLM 튜닝 — KV 캐시 고정 및 프리픽스 캐싱으로 효율 극대화
다들 안녕, DGX Spark 쓰는 형들도 반갑다!
오늘 진짜 미친 수치 찍었다: 2× DGX Spark에서 Qwen3.8-Flash-Next 모델, 512K 컨텍스트(2.8M kvc)로 총합 181 tok/s 달성함.
2노드 DGX Spark 클러스터에서 멀티 에이전트 돌리면서 총합 181 tok/s 뽑아냈다. 단일 스트림 디코드는 30~50 tok/s 정도 나오는데, 181은 에이전트 세션 9개 정도가 엔진 공유하면서 나오는 총 처리량이다. 이거 쓰면서 보니까 피크 찍을 땐 195까지 올라가더라. 어떻게 세팅했는지 간단하게 정리해준다.
하드웨어
-
2× NVIDIA DGX Spark (GB10 Grace Blackwell, 각각 128 GB 통합 메모리, 20코어 ARM)
-
노드끼리는 ConnectX-7 케이블로 직결 — NCCL over RDMA (RoCE, 200 Gb), 양쪽 박스에 TP=2 설정
-
NCCL 로그에서
Using network IB뜨는지 꼭 확인해라. TCP로 빠지면 소리 소문 없이 속도 반토막 난다.
모델
-
Qwen3.8-Flash-Next, RadixArk NVFP4 양자화 (4-bit 라우팅 전문가, FP8 n-gram 테이블)
-
하이브리드 아키텍처: 3/4 선형 어텐션 + 1/4 희소 풀 어텐션, 512-전문가 MoE, MTP 추측 디코딩 k=3 (~40% 수용률)
-
네이티브 262K 컨텍스트를 YaRN factor 2.0으로 512K까지 늘림 — 487K 깊이에서 니들 테스트 검증 완료
꿀팁: NVMe에 PLE 테이블 올리기
-
이 모델이 320M 행짜리 n-gram 임베딩 테이블(FP8 기준 47.7 GiB)을 들고 있는데, 토큰마다 이걸 읽어야 하거든. 근데 토큰 하나당 16개 행(~2.5 KB)만 건드리면 됨.
-
그래서 이걸 메모리에 다 안 올리고 NVMe에서 바로 mmap 때렸다. 노드당 가중치 점유율이 65 → 41 GiB로 줄어듦.
-
속도 빨라진 이유 두 가지: 매핑에
madvise(MADV_RANDOM)걸어서 (해시 흩뿌리기 + 커널 리드어헤드 조합으로 읽기 증폭 30배 감소 — 수정 전엔 405K 프리필 한 번에 디스크에서 603 GB 읽던 게 수정 후 19 GB로 줄음) 64개 gather 스레드 돌림 (병목은 디스크 대역폭이 아니라 폴트 레이턴시 직렬화였음). -
이렇게 확보한 메모리는 전부 KV 캐시에 박았다: 이제 풀 사이즈가 2.89M 토큰 (전체 컨텍스트의 5.5배)이고 40.6 GiB 점유함.


