《GPU Mode》
L046
2025 · MAR
High priority
transcript · 실패 · 외부 슬라이드 + 도메인 지식
Distributed GEMM
한 GPU 안에 안 들어가는 큰 GEMM 을 여러 GPU 사이로 분할하면서, compute 와 communication 을 어떻게 overlap 시키는가. tensor parallel 의 row-split / column-split, all-reduce / reduce-scatter / all-gather 의 패턴, NCCL 위 구현, ring vs hierarchical topology — 의 묶음. Ali Hassani 의 강의. transcript 가 누락된 강의이므로 본 노트는 슬라이드 링크와 도메인 지식 (Megatron-LM, ColossalAI, NCCL 의 공식 자료) 위에서 정리.
tensor parallel
all-reduce
reduce-scatter
comm-compute overlap
NCCL
ring topology
SP / sequence parallel
async TP
A
Speaker
Ali Hassani
Distributed GEMM 연구 · NATTEN / GEMM 컨트리뷰터
§ 01강의가 풀려는 문제· 왜 GEMM 을 GPU 사이로 잘라야 하는가
한 GPU 의 메모리/연산 한계 너머 — GEMM 자체가 분산된다
현대 LLM 의 한 layer 는 이미 한 GPU 안에 다 안 들어간다. 70B 모델의 한 attention block 의 weight 만 해도 수십 GB. 그래서 layer 안의 GEMM 자체를 여러 GPU 로 split 한다 — 이게 tensor parallelism 의 코어. 그리고 그 split 은 communication 과 compute 의 overlap 이라는 새 문제를 만든다.
강의 transcript 가 누락되었지만 슬라이드 링크가 살아 있어 핵심 토픽이 분명하다 — distributed GEMM 의 표준 패턴, 통신 비용 분석, NCCL 매핑, production trade-off. 본 노트는 슬라이드 + Megatron-LM / NCCL 공식 자료 + 도메인 지식 위에서 정리한다.
강의의 인지적 frame · 추정
distributed GEMM 의 모든 결정은 한 식으로 회수된다 — compute time vs comm time. tensor parallel 가 GEMM 을 N 등분 하면 compute 는 1/N 로 줄지만 comm 이 추가된다. comm 이 compute 보다 길면 scaling efficiency 가 떨어진다. “comm 을 compute 와 overlap 시킨다” 가 모든 transformation 의 핵심 motive.
“TP 의 본질은 메모리 절감이 아니라 compute 분담이다 — 단, comm 비용이 GEMM 비용을 넘는 순간 scaling 이 깨진다.”학습 노트 · LLM scaling 정리
이 강의가 가리키는 자리 — single-GPU GEMM 강의 (L045) 의 위에 한 단계 — multi-GPU GEMM. L048 의 ultra scale playbook 이 다양한 parallelism 의 결합을 다룬다면, 본 강의는 그 중 한 축 (TP) 의 구체적 GEMM 구현 메커니즘.
§ 02큰 모델의 GEMM 분할· layer 의 weight tensor 모양
한 layer 안의 GEMM 들이 분할되는 구체적 모양
transformer 의 한 layer 가 안고 있는 GEMM 은 큰 것 4개. attention 의 QKV projection, attention output projection, MLP 의 두 linear (up_proj + down_proj). 이 GEMM 들이 각자 다른 split 전략을 만난다.
QKV projection
X @ W_qkv. output dim 으로 split — 각 GPU 가 일부 head 를 담당. column-parallel.
attention output
O @ W_o. input dim 으로 split — partial result 들을 합쳐야 한다. row-parallel + all-reduce.
MLP up_proj
X @ W_up. output dim 으로 split. 각 GPU 가 hidden dim 의 일부. column-parallel.
MLP down_proj
H @ W_down. input dim 으로 split. 결과를 sum. row-parallel + all-reduce.
핵심 패턴 — Megatron-LM 의 표준 구조. QKV(column) → O(row), up_proj(column) → down_proj(row). 두 linear 를 묶으면 column-parallel 의 결과를 그대로 row-parallel 의 입력으로 흘려보낼 수 있어 — 중간에 통신 없이 두 GEMM 을 묶을 수 있다. 통신은 attention output 끝과 MLP 끝에 한 번씩.
왜 이 패턴이 표준이 됐는가
column → row 의 짝짓기는 통신 두 번을 한 번으로 만든다. 만약 두 GEMM 이 모두 column-parallel 이면 — 첫 GEMM 의 output 을 합쳐야 두 번째 GEMM 의 input 이 된다 = 중간 all-reduce. column → row 짝짓기는 그 중간 all-reduce 를 제거. 그래서 한 transformer block 당 forward 의 통신은 2회: attention output, MLP output.
§ 03row vs column tensor parallel· 두 split 방향
같은 weight 행렬을 두 가지로 자를 수 있다 — 비용 구조가 다르다
한 GEMM Y = X @ W 를 N GPU 사이로 자르는 방법은 두 가지. output dim 으로 (column-parallel), input dim 으로 (row-parallel). 둘은 입출력의 shape 이 다르고 통신이 다르다.
① Column-parallel · output split
W 를 output dim 으로 N 등분. 각 GPU 가 일부 column 의 W 를 들고 있음.
입력: 모든 GPU 가 같은 X 가 필요 (또는 미리 broadcast). 출력: 각 GPU 가 Y 의 일부 column. 통신: 그 자체로는 없음, 입력 broadcast 가 미리 되어 있다는 가정.
② Row-parallel · input split
W 를 input dim 으로 N 등분. 각 GPU 가 일부 row 의 W 를 들고 있음.
G0 · row 0..d/N
G1 · row d/N..2d/N
G2
G3
입력: 각 GPU 가 X 의 일부 column. 출력: 각 GPU 가 Y 의 partial sum. 통신: all-reduce 로 partial sum 합산해야 최종 Y.
두 방식의 비용 구조 차이 — 통신이 입력 쪽에서 발생하는가, 출력 쪽에서 발생하는가. 그래서 column-parallel 의 output → row-parallel 의 input으로 묶으면 중간 통신 없이 흐른다. Megatron-LM 의 핵심 설계.
§ 04통신 패턴 3종· all-reduce · reduce-scatter · all-gather
같은 “결과를 합친다” 인데 메시지 흐름이 다르다
distributed GEMM 의 통신은 거의 모두 NCCL 의 표준 collective 로 표현된다. 세 종류가 한 transformer block 안에서 모두 등장.
AR
all-reduce
모든 GPU 가 같은 sum 값을 받음. row-parallel 끝에서 partial sum 합치기. 가장 흔한 통신.
2(N−1)/N · message · ring 위
RS
reduce-scatter
모든 GPU 가 sum 의 자기 부분만 받음. all-reduce = RS + AG 의 합.
(N−1)/N · message
AG
all-gather
모든 GPU 가 모든 GPU 의 partial 을 모음. column-parallel 의 입력 broadcast 또는 sequence parallel 의 결합.
(N−1)/N · message
A2A
all-to-all
expert parallel (MoE) 에서. 각 GPU 가 자기 token 을 다른 GPU 의 expert 로 라우팅.
(N−1)/N · message
all-reduce = reduce-scatter + all-gather
NCCL ring 알고리즘에서 all-reduce 는 이 두 단계로 분해된다. 그래서 sequence parallel 같은 트릭이 가능 — “이 자리에서 어차피 all-gather 할 거였다면, all-reduce 를 reduce-scatter 로 쪼개고, all-gather 와 다음 통신을 합친다”. 중간 텐서가 작아지는 효과가 있다 (각 GPU 가 sequence 의 일부만 들고 있음).
§ 05compute-comm overlap· latency hiding
“GEMM 도는 동안 통신도 한다” — 의 실제 모양
tensor parallel 의 모든 최적화가 가리키는 한 자리 — compute 와 comm 을 같은 시간에 굴린다. naive 구현은 compute 끝나고 comm 시작 = serial. 좋은 구현은 그 둘이 시간 위에서 겹친다.
FIG · TP 의 naive vs overlap 비교한 transformer block · 4-GPU TP
naive
GEMM (column-par)
GEMM (row-par)
all-reduce
layernorm + ...
next block
overlapped
GEMM (column-par)
GEMM (row-par)
RS partial 0
layernorm chunk 0
RS partial 1
layernorm chunk 1
next block start
naive 는 GEMM 끝나고 all-reduce 가 따로. overlapped 는 GEMM 결과를 chunk 단위로 reduce-scatter 하면서 동시에 다음 layer 의 chunk 처리. 이론적 최대 — comm 비용이 compute 뒤로 완전히 숨음.
overlap 을 가능하게 하는 메커니즘들.
- multi-stream — CUDA stream 두 개 이상. 한 stream 이 compute, 다른 stream 이 comm. NCCL 이 별도 stream 을 사용하도록 지정.
- chunked communication — 한 큰 all-reduce 대신 작은 reduce-scatter 들. 각 chunk 가 끝나는 대로 다음 단계 시작.
- async TP — GEMM 의 일부 결과를 forward 하면서 통신 시작. Megatron-LM 의 새 기능.
- dependency 관리 — CUDA event 로 stream 간 dependency 정리. naive 하게 두면 race / 잘못된 순서.
compute-bound 의 한계
overlap 이 잘 되려면 compute 가 comm 보다 길어야. compute 가 짧으면 — 작은 batch, 작은 hidden — comm 이 노출된다. 이때 overlap 의 한계 = comm 비용이 그대로 latency 에 추가. scaling 의 한계가 여기서 결정된다.
§ 06NCCL 위에서의 매핑· ring · double-tree · all-to-all
collective 의 추상이 hardware 위에 어떻게 내려가는지
all-reduce 같은 추상 연산이 실제 hardware 의 link 위에서 어떻게 실행되는지. NCCL 은 데이터 크기와 GPU 토폴로지에 따라 두 알고리즘 사이에 자동 분기.
RING
ring all-reduce
N GPU 가 ring 을 형성. 각 GPU 가 자기 chunk 를 다음 GPU 에 sum-pass. 2(N−1)/N · 메시지 의 통신량. bandwidth-optimal.
큰 메시지 · bandwidth-bound
TREE
double-tree
두 개의 binary tree. log(N) 단계. O(log N) latency. 작은 메시지에 유리.
작은 메시지 · latency-bound
HIER
hierarchical
노드 안 NVLink 로 reduce → 노드 사이 IB 로 reduce → 노드 안 broadcast. NVLink/IB 대역폭 차이 활용.
multi-node · 대역폭 격차 큼
A2A
pairwise
all-to-all 의 pairwise 구현. expert parallel.
MoE 전용
FIG · ring all-reduce 의 모양 (8 GPU)각 GPU 가 1/8 chunk 들고 있음
8 GPU ring · 7 step 의 reduce-scatter + 7 step 의 all-gather
각 step 마다 chunk 하나가 한 칸 이동 + sum. 14 step 후 모든 GPU 가 같은 결과. NCCL 이 각 step 을 micro-stage 로 더 쪼개서 hardware 위에서 connection 별로 오버랩. 알고리즘은 단순하지만 implementation 디테일은 깊다.
§ 07topology · NVLink 와 InfiniBand· 노드 안 vs 노드 사이
같은 collective 가 다른 link 위에서 다른 비용
distributed GEMM 의 비용 분석은 hardware topology 에 종속이다. 한 노드 (8 GPU) 안의 NVLink 와 노드 사이의 InfiniBand 의 대역폭 차이가 결정 요소.
NVLink (intra-node)
H100 SXM5: 18 link × 25 GB/s = 450 GB/s 양방향. 노드 안 8 GPU 의 모든 쌍 직접 연결. 매우 빠름.
NVSwitch
노드 안 GPU 들을 mesh 형태로 연결. 모든 GPU 가 모든 GPU 와 풀 NVLink 대역폭으로 통신.
InfiniBand HDR/NDR
노드 사이 — 보통 GPU 당 200–400 Gbps = 25–50 GB/s. NVLink 의 1/10 수준.
Ethernet RoCE
IB 대신. 비슷한 수준. cloud 환경에 자주.
topology-aware collective
NCCL 이 자동 — 노드 안에선 NVLink 를 우선. 노드 사이에는 IB. hierarchical 알고리즘 적용.
MNNVL · multi-node NVLink
최신 시스템 (GB200 NVL72) 에서는 노드 사이까지 NVLink. 64+ GPU 의 single NVLink domain.
이 hierarchy 가 결정을 만든다 — TP 는 보통 한 노드 안 (8 GPU) 까지. 노드를 넘어서 TP 를 키우면 IB 위 통신 = 10배 느림. 노드 사이는 PP (pipeline parallel) 또는 DP (data parallel) 로 — 이쪽은 통신 빈도가 낮다.
실전 패턴
TP=8 (한 노드), PP=4 (4 노드), DP=N 의 3D parallelism 이 대규모 학습의 표준. TP 가 가장 통신이 많은 축이라 가장 빠른 link 위에. PP 가 다음, DP 가 가장 통신 적음. "hot link 에 hot communication"의 매핑.
§ 08production trade-off· sequence parallel · async TP
표준 TP 위에 추가로 들어간 두 트릭
최근 (2024–2025) production system 에 들어간 두 추가 트릭이 강의가 다뤘을 자리. 둘 다 통신을 더 잘게 쪼개서 overlap 을 가능하게 하거나 메모리를 절약.
SP
sequence parallel
layernorm 같은 element-wise 연산을 sequence 차원으로 분산. activation 메모리 N 등분. all-reduce 를 RS+AG 로 쪼개고 layernorm 을 그 사이에 끼움.
메모리 절감 + 통신 동일
aTP
async tensor parallel
Megatron-LM 의 새 기능. GEMM 의 일부 chunk 가 끝나면 바로 통신 시작. compute 와 comm 의 fine-grained overlap.
latency 추가 hide
CP
context parallel
긴 sequence (예: 128K context) 를 sequence dim 으로 split. attention 안에 ring all-gather + masked attention.
long context · 메모리 절감
EP
expert parallel (MoE)
MoE 의 expert 들을 GPU 사이로 split. all-to-all 로 token 라우팅. TP 와 결합 시 micro-batch 별로.
MoE 전용
DistGEMM 의 자리
본 강의의 토픽이 가리키는 가장 최신 자료 — "async-TP" 또는 "fused-TP" 라 불리는 패턴. NVIDIA Megatron-LM 과 PyTorch 의 DTensor / TorchTitan 이 표준 구현체. CUTLASS 3.x 가 일부 distributed primitive 를 직접 노출하면서, GEMM 자체가 통신을 인지하는 방향으로 — kernel-level distributed GEMM.
§ 09Megatron-LM 사례· 표준 구현 따라 읽기
이 강의의 토픽이 실제 코드로 어디에 있는가
distributed GEMM 의 reference 구현 — NVIDIA Megatron-LM. 한 transformer block 의 forward 가 어떤 NCCL 호출 시퀀스를 거치는지 확인할 수 있는 가장 깨끗한 자료.
# Megatron-LM 의 ColumnParallelLinear 흐름 (간략)
class ColumnParallelLinear:
def forward(self, x):
# 1. 모든 TP rank 가 같은 x 가 필요
x = copy_to_tensor_model_parallel_region(x) # identity in fwd, AR in bwd
# 2. 각 rank 의 partial weight 와 GEMM
out = F.linear(x, self.weight_local, self.bias_local)
# 3. output 은 column-split — 그대로 반환
return out
class RowParallelLinear:
def forward(self, x):
# 1. 입력은 column-split (이전 column-par 의 output)
out_partial = F.linear(x, self.weight_local, bias=None)
# 2. partial sum 합치기 → all-reduce (또는 RS for sequence parallel)
out = reduce_from_tensor_model_parallel_region(out_partial)
# 3. bias 는 reduce 후 한 번만 적용
return out + self.bias if self.bias is not None else out
이 두 클래스를 묶으면 — QKV(Column) → attention → O(Row + AR) → up(Column) → activation → down(Row + AR). 한 block 당 통신 2번. backward 에서 추가 2번 (column-par 의 bwd 가 AR).
코드 읽기 팁
Megatron-LM 의 tensor_parallel/layers.py 를 직접 읽는다. 그 안의 copy_to_tensor_model_parallel_region, reduce_from_tensor_model_parallel_region 같은 helper 가 NCCL 호출의 wrapper. forward 의 identity 가 backward 에서 collective 로 바뀌는 “autograd 위 collective” 패턴이 학습 자료로 좋다.
§ 10기억할 메모와 코드· key takeaways
다시 열었을 때 5분 안에 손에 잡혀야 할 것
column → row 짝짓기
Megatron-LM 의 표준. 중간 통신 제거. 한 block 당 통신 2회.
all-reduce = RS + AG
NCCL ring 알고리즘. SP 가 이 분해를 활용해서 통신을 절감 없이 메모리 절감.
ring all-reduce 비용
2(N−1)/N · message. bandwidth-optimal. 큰 메시지에 사용.
tree all-reduce
log(N) latency. 작은 메시지에 사용. NCCL 자동 분기.
topology hierarchy
NVLink (450 GB/s) ≫ IB (25–50 GB/s). TP 는 한 노드 안.
3D parallelism
TP × PP × DP. hot communication 은 hot link 위에 매핑.
sequence parallel
activation 메모리 N 등분. all-reduce → RS + AG.
async TP
GEMM 의 chunk 와 통신 fine-grained overlap. Megatron-LM 의 새 기능.
관련 논문
Megatron-LM (Shoeybi et al, 2019), Sequence Parallelism (Korthikanti et al, 2022)
손에 새기기 — 실습 시퀀스
- 2-GPU all-reduce 측정 — torch.distributed 로 작은 tensor all-reduce. NVLink 위 latency 와 bandwidth 가 NCCL 공식 수치와 일치하는지.
- row-parallel linear 직접 구현 — Megatron-LM 의 RowParallelLinear 를 자기 코드로 재현. forward 에서 all-reduce, backward 에서 identity.
- 한 transformer block 의 forward — QKV(column) → attention → O(row) → up(column) → down(row) 를 8 GPU 위에서. 통신이 정확히 2회인지 확인.
- compute-comm overlap 측정 — Nsys 로 trace 떠서 GEMM 과 NCCL 이 같은 시간에 도는지 확인.
- SP 추가 — all-reduce 를 RS + AG 로 분해. layernorm 을 그 사이에. 메모리 사용량 확인.
- 크기 별 strong scaling 측정 — TP=1, 2, 4, 8 에서 latency 측정. ideal scaling 과의 격차 = 통신 비용.
§ 11다른 강의로 이어지는 길· connections
이 강의의 도구가 다음에 어디에 다시 등장하는지
§ 12열린 질문· open questions
transcript 누락으로 비어 있는 자리들
본 노트는 슬라이드 링크 + Megatron-LM 코드 + NCCL 문서를 베이스로 토픽을 추정. 영상 직접 확인이 필요한 사항들.
- 강의가 직접 다룬 구체적 패턴 — async TP 가 본 강의의 메인 토픽인지, fused TP 인지, 또는 일반 TP 의 introduction 인지 — 슬라이드 직접 확인 필요.
- 구체적 benchmark 수치 — H100 / A100 / 노드 수 별 throughput, scaling efficiency 의 실측. 슬라이드의 그래프와 영상의 발화 직접 확인.
- CUTLASS 3.x distributed primitive — 강의 시점(2025-03) 에 CUTLASS 가 부분적으로 distributed primitive 노출. 강의가 이 자리를 다뤘는지.
- TorchTitan / DTensor 와의 관계 — PyTorch 의 새 distributed API. 본 강의의 패턴이 이 추상 위에서 어떻게 표현되는지.
- MNNVL (multi-node NVLink) 의 영향 — GB200 NVL72 같은 시스템에서 64+ GPU 의 single NVLink domain. 기존 노드 단위 가정이 어떻게 변하는지.
- Ali Hassani 의 NATTEN 과의 관계 — Hassani 의 다른 작업이 dilated/local attention. distributed GEMM 강의가 그 작업과 어떻게 연결되는지 — 영상 직접 확인.
검증 메모
본 노트의 모든 패턴 (Megatron-LM 의 column → row, NCCL 의 ring algorithm 등) 은 공개된 표준 자료에서 가져왔다. 강의가 정확히 어떤 시퀀스로 이 자리들을 깠는지는 영상 직접 확인 필요. 절대 throughput 수치는 본 노트에 의도적으로 적지 않았다 — 강의의 실측이 아닌 추정은 misleading 이 될 수 있어서.