ADR 0003: DGX Spark multi-node LLM에 Spark Stacking 사용

1. 상태

Proposed

2. 결정 요약

DGX Spark 여러 대를 이용해 단일 LLM workload를 실행해야 하는 경우, DGX Spark의 ConnectX-7 기반 Spark Stacking을 우선 검토한다.

Kubernetes의 역할은 GPU node와 workload lifecycle을 관리하는 것이다. 여러 DGX Spark의 GPU를 하나의 LLM 실행 단위로 묶는 것은 Kubernetes CNI나 GPU Operator가 아니라, ConnectX-7 고속 네트워크와 NCCL/MPI 같은 distributed runtime 계층이 담당한다.

Cilium은 RKE2 cluster의 primary CNI로 유지한다. 다만 Cilium만으로 Spark Stacking, RoCE, RDMA, NCCL 통신이 자동 구성되는 것은 아니다. 고속 GPU 간 통신은 host network 또는 별도 secondary/RDMA network 설계로 분리해서 다룬다.

3. 배경

DGX Spark는 단일 장비에서도 LLM 개발과 추론을 실행할 수 있지만, 더 큰 모델이나 더 높은 처리량이 필요하면 여러 DGX Spark를 연결해 distributed workload로 실행하는 시나리오가 필요하다.

NVIDIA DGX Spark 문서는 이 시나리오를 Spark Stacking으로 설명한다. DGX Spark 두 대를 QSFP/CX7 cable로 연결하고, Grace Blackwell GPU 간 distributed workload를 MPI와 NCCL로 실행하는 흐름이다. NVIDIA의 Spark playbook도 두 장비 사이에 200GbE direct connection을 구성하고 NCCL을 검증하는 절차를 제공한다.

이때 계층은 다음처럼 나뉜다.

DGX Spark nodes
  |
  v
ConnectX-7 QSFP / 200GbE link
  |
  v
Ethernet / RoCE / high-speed interconnect
  |
  v
NCCL / MPI
  |
  v
distributed LLM runtime

GPU Operator는 이 문제를 해결하지 않는다. GPU Operator는 각 node의 GPU를 Kubernetes resource로 노출하고, driver/runtime/device plugin/telemetry를 관리하는 계층이다. gpu-01, gpu-02의 GPU가 Kubernetes에 보이도록 만드는 것이 GPU Operator의 책임이고, 두 node의 GPU를 하나의 LLM workload가 함께 쓰게 만드는 것은 distributed runtime의 책임이다.

4. 선택 기준

이 결정에서 중요하게 본 기준은 다음과 같다.

  • DGX Spark가 제공하는 공식 multi-node 연결 방식과 맞을 것
  • RKE2/Cilium/GPU Operator의 책임과 충돌하지 않을 것
  • LLM inference 또는 fine-tuning runtime이 NCCL/MPI 기반으로 확장 가능할 것
  • 병원 내부망의 일반 management traffic과 GPU interconnect traffic을 분리할 수 있을 것
  • Kubernetes 안에서 실행할 경우에도 network namespace, RDMA device, GPU resource 할당 경계가 명확할 것
  • 처음부터 복잡한 RDMA Kubernetes 구성을 강제하지 않고, host-level 검증에서 Kubernetes workload로 단계적으로 확장할 수 있을 것

5. 결정

DGX Spark multi-node LLM은 Spark Stacking을 우선 경로로 검토한다.

초기 운영 모델은 다음 순서로 둔다.

1. RKE2 cluster 구성
2. NVIDIA GPU Operator로 nvidia.com/gpu resource 노출
3. DGX Spark 간 ConnectX-7 QSFP link 구성
4. host level에서 NCCL/MPI 통신 검증
5. Kubernetes workload에서 hostNetwork 또는 secondary network로 재검증
6. LLM runtime 선택 후 distributed serving/training manifest 작성

즉 Kubernetes cluster가 먼저 안정적으로 구성되어야 하고, GPU resource가 먼저 노출되어야 한다. 그 다음 DGX Spark 간 고속 네트워크를 검증하고, 마지막으로 LLM runtime을 Kubernetes workload로 올린다.

5-1. Cilium과의 관계

Cilium은 primary CNI로 유지한다. Cilium은 RKE2 cluster의 Pod-to-Pod connectivity, service traffic, network policy, observability를 담당한다.

하지만 Cilium은 Spark Stacking 자체를 구성하지 않는다. Cilium을 설치했다고 해서 ConnectX-7 QSFP link, RoCE/RDMA device, NCCL interface selection, MPI hostfile, distributed rank 구성이 자동으로 준비되는 것은 아니다.

따라서 Cilium에 대한 판단은 다음과 같다.

  • 일반 Kubernetes pod/service traffic에는 Cilium을 사용한다.
  • GPU interconnect traffic은 별도 고속 network path로 취급한다.
  • host-level NCCL 검증 단계에서는 Cilium을 통하지 않는다.
  • Kubernetes workload 안에서 고속 network를 사용해야 하면 hostNetwork 또는 secondary network 구성을 검토한다.
  • RDMA/RoCE device를 pod 안에 노출해야 하면 NVIDIA Network Operator, RDMA Shared Device Plugin, SR-IOV 또는 Multus 기반 secondary network를 별도 ADR로 다룬다.

즉 Cilium은 이 결정과 충돌하지 않지만, Cilium만으로 충분하지도 않다.

5-2. Kubernetes 안에서 실행할 때의 경계

Kubernetes 안에서 multi-node LLM을 실행하려면 workload가 여러 pod 또는 process rank로 나뉘어야 한다.

예시는 다음과 같다.

LLM workload
  rank 0 -> gpu-01 -> nvidia.com/gpu: 1
  rank 1 -> gpu-02 -> nvidia.com/gpu: 1
  rank 2 -> gpu-03 -> nvidia.com/gpu: 1

rank 간 통신 -> NCCL/MPI over ConnectX-7 network

Kubernetes scheduler는 각 pod에 GPU resource를 할당할 수 있다. 하지만 rank 간 통신, rendezvous, NCCL interface 선택, tensor parallelism, pipeline parallelism은 LLM runtime과 job launcher가 책임진다.

따라서 이 ADR은 LLM runtime까지 결정하지 않는다. vLLM, TensorRT-LLM, SGLang, PyTorch DDP, Ray, MPI Operator, Kubeflow Training Operator, Kueue/Volcano 같은 선택지는 별도 workload ADR 또는 운영 가이드에서 다룬다.

5-3. 초기 검증 범위

초기 검증은 Kubernetes보다 host-level Spark Stacking 검증을 먼저 수행한다.

확인할 항목은 다음과 같다.

  • QSFP/CX7 cable 연결 상태
  • ConnectX-7 interface link up
  • interconnect용 static IP 또는 route
  • nvidia-smi
  • NCCL test
  • MPI 기반 multi-node 실행

host-level 검증이 끝난 뒤 Kubernetes workload로 옮긴다. 이 순서를 두는 이유는 CNI, pod network namespace, service discovery 문제와 순수 Spark Stacking 문제를 분리하기 위해서다.

6. 대안

6-1. Cilium만으로 처리

Cilium은 primary CNI로 유지할 가치가 있다. network policy와 observability 측면에서 병원 현장 cluster에 적합하다.

하지만 Cilium은 DGX Spark의 ConnectX-7 link나 NCCL/MPI topology를 구성하지 않는다. RDMA/RoCE device를 pod에 노출하거나 secondary interface를 붙이는 문제도 Cilium만의 책임으로 보기 어렵다.

결정: Cilium은 primary CNI로 사용하지만, Spark Stacking 구현 수단으로 보지는 않는다.

6-2. Kubernetes 밖에서만 실행

DGX Spark playbook을 따라 host OS에서 NCCL/MPI 기반 LLM을 직접 실행할 수 있다.

이 방식은 초기 검증에는 가장 단순하다. 그러나 병원 현장에서 workload lifecycle, 배포 이력, resource scheduling, observability를 Kubernetes/Argo CD와 연결하기 어렵다.

결정: 초기 검증에는 사용하지만, 장기 운영 모델로 고정하지 않는다.

6-3. NVIDIA Network Operator를 즉시 도입

NVIDIA Network Operator는 Kubernetes cluster에서 fast networking, RDMA, GPUDirect 관련 구성요소를 관리하기 위한 Operator다. RDMA Shared Device Plugin, SR-IOV Network Device Plugin, secondary network, Multus 같은 구성요소와 함께 쓰일 수 있다.

하지만 DGX Spark에서 필요한 multi-node LLM 경로가 hostNetwork로 충분한지, secondary RDMA network가 필요한지는 아직 검증되지 않았다. 또한 DGX Spark의 GPUDirect RDMA 지원 범위도 별도로 확인해야 한다.

결정: 즉시 도입하지 않는다. host-level Spark Stacking과 Kubernetes workload 검증 후 필요하면 별도 ADR로 다룬다.

7. 결과

긍정적 영향:

  • GPU Operator와 Spark Stacking의 책임 경계가 명확해진다.
  • Cilium을 primary CNI로 유지하면서 GPU interconnect를 별도 계층으로 다룰 수 있다.
  • host-level NCCL/MPI 검증과 Kubernetes workload 검증을 단계적으로 분리할 수 있다.
  • LLM runtime 선택을 뒤로 미루고 network substrate 결정을 먼저 정리할 수 있다.

부정적 영향:

  • Kubernetes만으로 multi-node LLM이 자동으로 구성되지는 않는다.
  • host-level network 설정, NCCL 설정, Kubernetes workload 설정을 모두 검증해야 한다.
  • secondary network나 RDMA device plugin이 필요해지면 운영 복잡도가 커진다.

중립적 영향:

  • Cilium은 일반 pod networking에는 계속 사용한다.
  • GPU interconnect traffic은 Cilium의 primary pod network와 별도로 볼 수 있다.
  • NVIDIA Network Operator는 후속 검토 대상이다.

8. 후속 작업

  • DGX Spark 간 QSFP/CX7 cable 연결과 ConnectX-7 interface 이름을 문서화한다.
  • interconnect용 IP 대역과 netplan 설정을 정리한다.
  • host-level NCCL/MPI test 절차를 운영 문서에 추가한다.
  • Kubernetes workload에서 hostNetwork 기반 multi-node NCCL test를 검증한다.
  • secondary RDMA network가 필요하면 NVIDIA Network Operator 도입 ADR을 별도로 작성한다.
  • 사용할 LLM runtime을 결정하고 distributed serving/training 배포 방식을 별도 문서로 작성한다.

9. 참고 문서