NCCL 의 collective 추상 아래에서 — 커널 안에서 직접 다른 GPU 의 메모리에 put / get 하는 NVSHMEM 의 자리. CPU 의 launch overhead 를 우회하고 small-message latency 를 한 자리수 마이크로초까지 끌어내리는 기법. Prajwal Singhania 가 깐 NVSHMEM put/get 모델, GPU-initiated 통신의 가치, NCCL 대비 latency 의 실제 격차, 그리고 production AllReduce 가 어디서 NVSHMEM 으로 갈아타는지 — 자막 없이 외부 자료로 재구성한 학습 노트.
대부분의 multi-GPU 학습/추론 코드는 NCCL 을 통한다 — torch.distributed.all_reduce, broadcast, all_to_all. NCCL 은 잘 도는 추상이지만 — 한 가지 자리에서 일관되게 부족하다. 작은 메시지의 latency. 그 자리를 NVSHMEM 이 메운다.
강의 자막이 실패해 발표자의 정확한 워딩은 못 잡았지만, distributed systems 영역에서 NVSHMEM 의 입장은 일관된다.
NCCL 은 collective 단위 추상 — AllReduce 한 번이 한 launch. CPU 가 launch 하고, GPU 가 받고, 끝나면 CPU 에 신호. 한 step의 collective 에는 좋다.
그런데 collective 호출이 50개씩 쌓이면 — 각 호출마다 launch overhead 와 host-device 동기화 비용이 누적. 학습 한 step 안에서 작은 collective 가 많을수록 성능이 깎인다.
NVSHMEM 은 한 단계 아래 — 커널 안에서 직접 remote GPU 의 메모리에 put/get. CPU 가 다음 launch 를 안 기다려도 되는 구조. 커널 fusion 으로 통신을 같이 묶을 수 있다.
자료 한계 · 확인 필요
강의 자막 실패. 슬라이드 / 코드 / repo 폴더가 GPU Mode 측에 미공개. 이 노트는 NVIDIA 의 NVSHMEM 공식 문서, DeepSeek DeepEP / DeepGEMM 등의 NVSHMEM 활용 사례, distributed training 영역의 일반 지식으로 재구성. 강의의 정확한 데모 / 수치는 보강 필요.
“NCCL 은 ‘한 collective 한 launch’ 의 모델 위에 잘 도는 추상이다. 그 모델 자체가 작은 메시지의 latency 를 못 받쳐주는 자리에서 — NVSHMEM 으로 내려간다.”강의 재구성
§ 02latency-critical comm 의 자리· where every us matters
한 자리수 마이크로초가 결정적인 영역들
NCCL 이 잘 받쳐주는 메시지 크기는 보통 수 MB 이상이다. 그 아래의 자리는 — production 영역에서도 — 자주 등장한다.
expert MoE all-to-all
MoE 모델의 forward/backward 가 token 을 expert 로 분배. 각 메시지가 작고 (수십 KB), 전부 latency-critical. DeepSeek 가 NVSHMEM 위에 DeepEP 를 짠 자리.
tensor parallel small ops
TP 의 layer 마다의 small AllReduce. residual / norm 사이의 collective. 한 step 안에 수십 번 호출.
sequence parallel scatter/gather
Megatron-LM 의 sequence parallel 영역. 짧은 메시지를 여러 번 분배.
speculative decoding sync
draft / verifier 사이의 small token batch 전송. latency 가 곧 throughput.
control / coordination msg
parameter server 에서의 작은 control message. launch overhead 가 메시지보다 큼.
communication-compute overlap
한 커널 안에서 compute 와 통신을 묶는 자리. NCCL 의 separate kernel 모델로는 자연스럽지 않음.
이 자리들의 공통점 — 한 step 안에 통신 호출이 많거나, 한 호출의 메시지가 작거나, 통신과 compute 가 같은 커널 안에서 묶여야. NCCL 의 launch-per-collective 모델이 자연스럽지 않은 자리들.
FIG · 메시지 크기별 latency 의 자리NCCL vs NVSHMEM (확인 필요 · 개념적)
8 KBNCCL
~20 us
20 us
8 KBNVSHMEM
~5 us
5 us
256 KBNCCL
~30 us
30 us
256 KBNVSHMEM
~22 us
22 us
16 MBNCCL
~80 us
80 us
16 MBNVSHMEM
~85 us
85 us
대략적 패턴 — 작은 메시지에서 NVSHMEM 이 4–5× 빠름, 큰 메시지에서는 NCCL 과 비슷하거나 약간 느림. 위 수치는 H100 NVLink 의 일반적 측정 형태로, 정확한 값은 hardware/topology/구현에 따라 다름. 확인 필요.
§ 03NVSHMEM put/get 모델· PGAS for GPUs
“원격 GPU 의 메모리를 자기 메모리처럼 다룬다” 의 추상
NVSHMEM 의 모델은 PGAS (Partitioned Global Address Space). 모든 GPU 가 “symmetric heap” 이라는 공유 주소 공간을 가지고, 각자 자기 부분에만 직접 메모리를 쓸 수 있고, 다른 GPU 의 부분에는 put / get 으로만 접근.
NCCL 모델 — collective
# CPU 가 launch
ncclAllReduce(send, recv, count, ...)
# 모든 GPU 가 같은 collective 에 참여# CPU 가 끝을 기다리거나 stream sync
CPU 가 collective 의 launch 와 wait 을 담당. GPU 가 한 번에 한 collective 의 일부.
NVSHMEM 모델 — put/get
// 커널 안에서 직접
__global__ void my_kernel(...) {
// 다른 GPU 의 symmetric heap 위치에// 직접 데이터를 쓴다
nvshmem_float_put(
dest, // remote address
src, // local data
nelems,
target_pe // PE = processing element (GPU)
);
}
CPU 는 한 번 init 만. 통신은 커널 안에서. 다른 GPU 의 메모리가 자기 메모리처럼 보임.
symmetric heap
모든 PE 에서 같은 사이즈로 할당된 공유 주소 공간. nvshmem_malloc 으로 할당. 어떤 PE 에서 보든 같은 offset 이 같은 logical 위치.
PE (Processing Element)
한 GPU = 한 PE. nvshmem_my_pe() 로 자기 ID, nvshmem_n_pes() 로 전체 수.
put / get
nvshmem_put = 자기 데이터를 다른 PE 에 쓴다. nvshmem_get = 다른 PE 의 데이터를 자기로 읽는다. 둘 다 RDMA-style — 원격이 안 깨어남.
atomic / signal
put 의 끝을 다른 PE 가 알게 하려면 signal (counter, flag) 를 함께 보낸다. nvshmem_put_signal_nbi 같은 형태.
non-blocking
put/get 은 보통 non-blocking (NBI). 커널이 통신을 시작만 하고 다른 일을 한다. nvshmem_quiet 로 끝을 기다림.
collective ops
NVSHMEM 도 collective (allreduce, alltoall) 를 제공. 그러나 launch 가 host 에서가 아니라 device 에서 가능.
§ 04GPU-initiated 통신의 가치· no CPU on the path
CPU 가 critical path 에서 빠질 때 무엇이 달라지는가
FIG · 통신 한 번의 sequence diagramNCCL vs NVSHMEM
위쪽: NCCL 의 통신 — CPU 가 launch / sync 를 담당. 한 통신마다 4 번의 host-device 왕복. 아래쪽: NVSHMEM — 커널이 이미 떠 있는 동안 GPU 가 직접 다른 GPU 의 메모리에 put. CPU 는 critical path 에 없음.
이 차이가 만드는 효과는 세 가지로 정리된다.
launch overhead 제거 — 한 통신당 ~10 us 의 cudaLaunchKernel 비용이 사라짐. 작은 메시지에서 결정적.
compute-comm overlap 의 자연스러움 — 같은 커널 안에서 한 thread 는 compute, 다른 thread 는 put. CUDA stream 차원의 overlap 보다 fine-grained.
persistent kernel 의 가능성 — 한 커널이 한 번만 launch 되고 안에서 여러 step 을 돈다. CPU 동기화가 step 별로 안 필요.
“CPU 가 critical path 에서 빠질 때 — 통신은 ‘한 단계 더 작은 단위’ 로 다뤄질 수 있게 된다.”강의 재구성
§ 05NCCL 대비 latency· small-message
실제 측정에서 어떤 패턴이 등장하는가
강의에서 발표자가 보여줬을 가장 핵심 그래프 — 같은 hardware, 같은 message, NCCL vs NVSHMEM 의 latency 비교. 정확한 수치는 시점/구현에 민감 (확인 필요), 패턴은 일관됨.
FIG · AllReduce latency vs message size8-GPU H100 NVLink (개념적)
1 KB · NCCL
~22 us
22
1 KB · NVSHMEM
~4 us
4
64 KB · NCCL
~25 us
25
64 KB · NVSHMEM
~9 us
9
1 MB · NCCL
~40 us
40
1 MB · NVSHMEM
~38 us
38
128 MB · NCCL
~1.5 ms
1500
128 MB · NVSHMEM
~1.55 ms
1550
cross-over point 가 ~1 MB 근처. 그 아래에서 NVSHMEM 이 결정적, 그 위에서 두 도구가 거의 같음. 큰 collective 에서는 NCCL 의 잘 튜닝된 ring/tree 알고리즘이 여전히 강함.
이 패턴이 가리키는 의사결정 — “메시지 크기가 1 MB 이하이거나 한 step 안에 collective 호출이 많을 때 NVSHMEM”. 두 조건 모두 LLM 학습/추론에서 자주 등장한다.
§ 06예시: AllReduce· ring vs one-shot
같은 AllReduce, 다른 알고리즘
NVSHMEM 위에서 AllReduce 를 짜는 방법은 여러 가지다. 메시지 크기에 따라 다른 알고리즘이 자연스럽다.
one-shot (small)
모든 PE 가 자기 데이터를 모든 PE 에 직접 put. N×N 메시지지만 한 step 완료. 메시지가 작을 때 가장 빠름.
ring (medium-large)
N–1 step 의 ring 으로 진행. NCCL 의 표준. bandwidth 기준 효율적. 큰 메시지에서 자연스러움.
tree / hierarchical
log N step 의 reduction tree. 작은 메시지의 latency 최적. 그러나 bandwidth 활용 떨어짐.
double binary tree
두 binary tree 를 동시에 — bandwidth 와 latency 모두 좋음. NCCL 도 채택.
recursive halving / doubling
log N step 의 효율적 알고리즘. 짧은 latency + 좋은 bandwidth.
algorithm selection
runtime 에 메시지 크기 / topology 보고 선택. NCCL 은 자동, NVSHMEM 은 사용자가 직접 (또는 helper 라이브러리).
NVSHMEM 의 가치 — 같은 코드 안에서 알고리즘을 바꾸기 쉽다. one-shot AllReduce 한 번 짜본 후 ring 으로 변경하는 게 — NCCL 의 wrapping 보다 — primitives 차원에서 자연스럽다.
DeepEP 의 사례
DeepSeek 의 DeepEP 가 NVSHMEM 위에 MoE 의 all-to-all 을 짠 사례. 메시지가 작고 (token batch), expert 간 분배가 dynamic. NCCL 의 collective 추상으로는 자연스럽지 않은 자리. 확인 필요 — 정확한 구현 디테일은 DeepEP repo 에서.
§ 07hardware 매핑· NVLink · IB · GDR
NVSHMEM 의 통신이 실제로 어디로 나가는가
FIG · NVSHMEM 의 transport 스택같은 API, 다른 hardware path
user kernelnvshmem_put / get / atomic사용자가 짜는 자리 — 통신이 어떤 hardware 로 나가는지 모름user
NVSHMEM devicedevice-side runtimeput 을 실제 hardware-specific 명령으로 lowering. transport 선택은 PE pair 의 위치에 따라.L1
NVLink / NVSwitch같은 노드 안 GPU 사이P2P load/store. 가장 짧은 path. H100 NVLink ~900 GB/s, 마이크로초 단위.L2a
GDR (GPUDirect RDMA)다른 노드 — InfiniBand 통해CPU 메모리를 거치지 않고 GPU 메모리 ↔ NIC ↔ 원격 NIC ↔ GPU 메모리. ConnectX/Quantum NIC.L2b
IB / Ethernet물리 네트워크노드 간 transport. NVLink 가 없는 GPU pair 에서 사용. 노드 안보다 높은 latency.L3
같은 nvshmem_put 호출이 — 두 GPU 가 같은 노드면 NVLink, 다른 노드면 GDR-over-IB 로 나간다. 사용자가 코드를 다시 짤 필요 없음. 같은 추상이 다른 transport 로 lowering.
이 통합이 NVSHMEM 의 큰 가치 — 코드 수준에서는 모든 PE 가 평등해 보인다. 실제로는 NVLink 의 GPU pair 와 IB 너머의 GPU pair 가 latency 차이가 큰데, 같은 API 로 다룬다. 알고리즘 선택은 사용자가 “이 PE 들이 어디 있는지” 의 hint 로 가능.
NVL72 / Blackwell 의 의미
Blackwell GB200 NVL72 는 한 rack 안에 72 개의 GPU 가 NVLink 로 연결된 한 도메인. 이 영역 안에서는 NVSHMEM 의 NVLink path 가 모든 통신에 적용 — IB-over-Ethernet 으로의 fallback 이 거의 없는 환경. NVSHMEM 의 성능 자리가 더 커지는 이유.
§ 08production 사례· Megatron · vLLM · DeepEP
현재 시점 NVSHMEM 이 자리잡은 곳
DeepSeek DeepEP — MoE 모델의 expert all-to-all. NVSHMEM 위에 fine-grained dispatch / combine 커널. NCCL 의 latency 한계를 넘은 가장 분명한 사례.
Megatron-LM 의 일부 영역 — sequence parallel 의 small all-gather, tensor parallel 의 일부 영역에서 — NVSHMEM 백엔드 옵션 — 확인 필요.
vLLM / SGLang 의 추론 collective — TP 추론의 작은 AllReduce. 한 step 안에 호출 횟수가 많아 NVSHMEM 채택의 자연스러운 자리.
NVIDIA NVSHMEM-X — NCCL 과 NVSHMEM 의 통합 시도. 확인 필요 — release 시점에 따라 다름.
학계의 communication-compute fusion 연구 — 한 커널 안에서 GEMM 과 AllReduce 를 묶는 연구. NVSHMEM 의 커널 안 통신이 핵심.
강의에서 Singhania 가 강조했을 입장 — NVSHMEM 은 일반 사용자가 매일 만지는 도구는 아니다. NCCL 이 잘 도는 자리에서는 NCCL 이 답. 그러나 NCCL 이 못 받쳐주는 자리에서는 NVSHMEM 외 대안이 거의 없다.
“DeepEP 같은 산업 사례가 등장하기 전까지는 NVSHMEM 이 학계의 도구처럼 보였다. 이제는 production stack 의 한 자리.”강의 재구성
§ 09한계· where NCCL still wins
NVSHMEM 이 답이 아닌 자리
큰 collective
≥ 수십 MB 메시지의 AllReduce / AllGather. NCCL 의 잘 튜닝된 ring/tree 알고리즘이 여전히 빠름.
학습 곡선
put/get 모델은 NCCL 보다 깊은 이해가 필요. 사용자 측 디버깅 비용이 큼.
디버깅 어려움
잘못된 put 이 silent corruption 을 만들 수 있음. NCCL 의 collective 단위 검증보다 어렵다.
topology 의존성
잘 짜인 NVSHMEM 코드도 hardware topology 가 바뀌면 다시 튜닝 필요. 알고리즘 선택의 책임이 사용자에게.
single-vendor
NVIDIA only. AMD ROCm shmem 같은 alternative 가 있지만 ecosystem 차이.
PyTorch 통합 비용
PyTorch 의 자연스러운 추상은 NCCL 의 collective. NVSHMEM 통합은 추가 boilerplate. 점차 개선 중.
의사결정 trigger
NVSHMEM 으로 가는 trigger — (1) 메시지 ≤ 1 MB 그리고 (2) 한 step 안에 collective 호출 ≥ 10 회 또는 (3) compute-comm fusion 이 본질적. 셋 중 하나가 안 맞으면 NCCL 이 답.
§ 10기억할 메모· key takeaways
다시 열었을 때 5분 안에 손에 잡혀야 할 것
NVSHMEM 의 위치
GPU 의 PGAS 라이브러리. 커널 안에서 직접 다른 GPU 의 메모리에 put/get. NCCL 의 collective 추상보다 한 단계 아래.
put / get
nvshmem_put(dst, src, n, pe) = 자기 데이터를 다른 PE 의 위치에 RDMA-style 로 쓴다. CPU 안 거침.
symmetric heap
모든 PE 가 같은 사이즈로 할당. nvshmem_malloc. 같은 offset 이 같은 logical 위치.
강의의 정확한 latency 수치 — § 02, § 05 의 막대 그래프는 외부 자료 + 일반 지식 기반의 개념적 형태. 강의 안의 실제 측정 hardware 와 정확한 수치는 영상 직접 확인 필요.
스피커의 background — Prajwal Singhania 의 정확한 affiliation, NVSHMEM 활용 사례. 영상의 자기소개 부분 확인.
NVSHMEM-X 의 release — NCCL 과 NVSHMEM 의 통합 — 발표 시점 기준 release 상태.
PyTorch 통합 status — torch.distributed 가 NVSHMEM backend 를 받는지. 직접 사용해야 하는지.
DeepEP 의 정확한 구현 디테일 — dispatch / combine 의 알고리즘, signal 의 사용 방식.
NVL72 의 실측 — Blackwell NVL72 환경에서의 NVSHMEM AllReduce latency. 발표 시점에 데이터가 있다면 확인.
검증 메모
이 노트는 자막 실패 + slide / repo 부재 상태에서 NVSHMEM 공식 문서 + DeepEP 같은 외부 사례 + distributed training 일반 지식으로 재구성. § 05 의 latency 막대는 “자리잡기용 형상” 이지 정확한 측정값이 아니다. 실제 NVSHMEM API 의 정확한 형태는 NVIDIA 공식 문서가 답.