메인 콘텐츠로 건너뛰기
DGX Spark의 128GB 규모 통합 메모리 풀은 가장 큰 장점이자 동시에 튜닝상의 난제이기도 합니다. 개별 GPU의 경우 VRAM이 고정되어 시스템 RAM과 분리되어 있지만, Grace CPU와 Blackwell GPU는 하나의 메모리 풀을 공유합니다. 메모리가 부족해지면 깔끔한 메모리 부족 오류 대신 시스템이 반응을 멈추게 됩니다. 이 페이지에서는 메모리가 어디에 사용되는지, KV 캐시 크기를 어떻게 설정할지, 그리고 워크로드에 맞게 vLLM 파라미터를 어떻게 조정해야 하는지 설명합니다.

How unified memory works on GB10

DGX Spark uses NVIDIA’s GB10 chip, which combines a Grace ARM CPU and a Blackwell GPU on one package. They share 128GB of LPDDR5X memory over a 273 GB/s interconnect. 별도의 VRAM은 존재하지 않습니다. vLLM이 “GPU 메모리”를 할당할 때 실제로는 DGX OS, CUDA 런타임 및 애플리케이션들도 함께 사용하는 128GB 풀에서 일부 영역을 분리해내는 것입니다. 이로 인해 다음과 같은 현상이 발생합니다:
  • gpu_memory_utilization은 전체 메모리 풀 중 일부만을 제어할 뿐, GPU 전용 메모리 할당량을 의미하지 않습니다.
  • 시스템 프로세스들도 같은 메모리 공간을 경쟁합니다. DGX OS, 백그라운드 서비스, CUDA 컨텍스트 오버헤드 등이 모델이 사용할 수 있는 메모리 양을 줄여줍니다.
  • 메모리 부족 시 프로세스를 강제 종료하는 안전장치가 없습니다. 메모리 풀이 고갈되면 문제가 있는 프로세스가 종료되는 대신 DGX Spark 시스템 전체가 멈춰버립니다.
실제 메모리 할당 계획은 다음과 같습니다:

KV cache overhead on 128GB

KV 캐시는 활성화된 모든 시퀀스에 포함된 각 토큰의 키-값 텐서를 저장합니다. 이 캐시의 크기는 3 요소들에 따라 증가하는데, 여기에는 컨텍스트 길이, 동시에 처리되는 시퀀스의 수, 그리고 모델 아키텍처(레이어 및 KV 헤드의 수)가 포함됩니다.

산출식

주어진 컨텍스트 길이에서 단일 시퀀스를 처리할 경우:
The factor of 2 accounts for both keys and values.

예시: 다양한 컨텍스트 길이에서 사용되는 70B 방식의 밀집형 모델

일반적인 70B 모델을 기준으로 80개의 레이어와 8개의 KV 헤드, 그리고 헤드 차원이 128인 경우를 가정해보겠습니다:
FP8 KV 캐시를 활용하면 메모리 사용량을 절반으로 줄일 수 있습니다. vLLM 실행 명령어에 --kv-cache-dtype fp8 값을 설정해주세요. 대부분의 벤치마크에서 품질 저하 폭은 2% 미만에 불과하며, 이를 통해 동시에 처리 가능한 시퀀스 수나 컨텍스트 길이도 두 배로 늘릴 수 있습니다.

예시: 35B MoE 모델

MoE models have the same KV cache math as dense models for their total layer count. A 35B MoE model with ~64 layers at the same KV head configuration: At 35B MoE with NVFP4 weights (~18 GB), you can fit 128K context with FP8 KV cache and still have ~65 GB of headroom.

컨텍스트 길이와 배치 크기 간의 균형

활성화된 모든 시퀀스에서 사용되는 각 토큰마다 KV 캐시 메모리가 소모됩니다. 전체 KV 캐시 용량은 다음과 같습니다:
실제로 DGX Spark 환경에서는 다음과 같은 균형이 나타납니다: For a 70B dense model at NVFP4 (~35 GB weights, ~75 GB remaining for KV cache):

실제 벤치마크 결과와 NVIDIA의 주장 비교

NVIDIA가 DGX Spark에 대해 발표한 82,739 토큰/초라는 수치는 단일 사용자 추론 속도가 아닌 전체 미세 조정 처리량을 의미합니다. 실제 대화형 서비스에서의 수치는 다음과 같습니다:
The 82,739 tok/s figure measures aggregate throughput across many parallel fine-tuning streams. Single-user interactive inference is a different workload — expect 15-120 tok/s depending on model size and engine, which is still fast enough for real-time chat and coding agent use.

메모리 보호 기능: 시스템 정지 현상을 방지합니다

DGX Spark에서 가장 중요한 튜닝 파라미터는 --gpu-memory-utilization입니다. 이 값을 지나치게 높게 설정하면 복구 불가능한 오류로 인해 시스템이 멈추게 됩니다. 반대로 보수적으로 설정하면 KV 캐시의 여유 공간이 줄어들게 됩니다

권장되는 초기 설정값

DGX Spark에서는 절대로 gpu_memory_utilization 값을 0.90 값보다 높게 설정해서는 안 됩니다. 개별 GPU와 달리 통합 메모리가 고갈되면 전체 시스템이 반응하지 않게 됩니다. 복구를 위해서는 전원을 강제로 껐다 켜야만 합니다. 처음에는 보수적인 값으로 설정한 뒤 실제 작업 부하에서 안정성을 확인한 후에만 값을 높여주시기 바랍니다.

메모리 사용량을 실시간으로 모니터링하세요

두 번째 터미널을 열어서 서비스 실행 중의 메모리 사용량을 관찰하세요:
만약 memory.free 값이 2에서 3 GB 미만으로 떨어진다면 시스템이 멈출 위험이 있습니다. 이때 max_model_len, max_num_seqs, 혹은 gpu_memory_utilization 값을 줄여주어야 합니다.

튜닝 파라미터 관련 참고 자료

DGX Spark 환경에서 가장 영향력이 큰 vLLM 플래그들을 영향도 순서대로 나열했습니다:

결정표: 일반적인 설정 예시

최적화 설정 방법에 관한 안내

단일 사용자 환경에서 처리량을 극대화하는 방법

Maximize concurrent users for 70B

대형 모델 배포 시 가장 안전한 설정 방안

후속 작업 및 활용 방향

DGX Spark 환경에서의 vLLM 활용법

각 모델 크기에 맞는 설치 및 실행 명령어 안내

모델 호환성

Which models fit in 128GB and their quantization options.

스파크 하나 vs 두 개

메모리 튜닝만으로는 부족할 때 두 번째 스파크가 필요한 상황에 대해 설명합니다.

KV 캐시의 개념

다양한 모델 아키텍처에서 KV 캐시가 작동하는 방식에 대한 심층적인 설명입니다.