NVIDIA 가 제공하는 profiling 도구 군 전체 — Nsight Systems · Nsight Compute · NVTX · Compute Sanitizer · Insight Graphics — 의 역할 분담과 진입 순서. transcript 가 빠졌으므로 본 노트는 도메인 지식 + L001 / L016 의 도구 어휘 위에서 정리한 보충 자료. 본문 주장은 영상 직접 확인 필요.
L001 이 “기본 프로파일러 4개” 의 진입 순서를 깔았다면, 이 강의는 NVIDIA 가 직접 제공하는 도구 군 전체의 지도를 본다. 같은 워크로드를 다른 도구로 보면 다른 정보가 잡힌다. 도구 선택이 곧 질문 선택이다.
강의 transcript 가 누락되어 정확한 발화 시퀀스는 영상 직접 확인이 필요하지만, 토픽이 가리키는 자리는 분명하다 — NVIDIA profiling 도구 전체의 역할 분담과 진입 순서를 한 시간 안에 깐다. PyTorch 사용자가 자기 워크로드의 어떤 질문에 어떤 도구를 들이대야 하는지의 의사결정 프레임.
도구는 관찰 스케일 로 정렬된다. system 단위 (Nsys: CPU + GPU + 네트워크 동시) → kernel 단위 (NCU: 한 launch 안 stall) → line 단위 (NCU source view, PTX) → memory 단위 (Compute Sanitizer: race, OOB). 어느 스케일의 질문인지에 따라 도구가 결정된다.
본 노트의 작성 원칙 — transcript 가 없으므로 강의의 정확한 강조점은 보존하지 못한다. 대신 NVIDIA 공식 문서 + L001/L008/L016 의 강의 어휘 로 “이 강의가 거의 확실히 다뤘을 자리들” 을 정리한다. 모든 항목에 “영상 직접 확인 필요” 가 묵시적으로 붙어 있다.
현재 NVIDIA 가 제공하는 profiling 도구는 6개로 묶을 수 있다. 각 도구가 답하는 질문이 다르다는 사실 — 도구를 한 곳에 늘어놓고 보면 자명하다.
nvtx.range_push("attn_qk") 같이. Nsys / NCU 모두 인식.이 6개의 관계 — CUPTI 가 가장 아래의 SDK고, 그 위에 Nsys, NCU 가 두 큰 도구로 자리 잡는다. NVTX 는 두 도구 모두에 메타데이터를 주는 marker. Compute Sanitizer 는 별도 라인 (정확성). Nsight Graphics 는 ML 외 영역.
새 워크로드 → 먼저 Nsys 로 system trace. CPU-GPU 사이 idle gap, memcpy 패턴, NCCL 호출 모양 본다. 여기서 한 커널이 dominant 라는 게 보이면 → NCU 로 그 커널을 zoom. metric 이 hint 를 주면 → fix → 다시 NCU 로 확인. 일주일 뒤 → 새 코드 → 다시 Nsys. 무한 루프가 아니라 spiral 이다.
NCU 가 한 커널에 대해 보여주는 metric 수는 800 개를 넘는다. 모두 다 볼 수는 없다. NVIDIA 가 제공하는 section file 이 카테고리별로 묶어준다.
이 8개 section 의 진입 순서가 곧 NCU 사용 워크플로 — SpeedOfLight 로 큰 그림 → Memory or Pipeline 둘 중 어느 쪽이 bottleneck → WarpStateStatistics 로 stall 카테고리 확인 → Source view 로 책임 라인 식별.
CLI 로 빠르게 metric 확인 (ncu --section SpeedOfLight ./app) → 흥미로운 자리가 있으면 trace export (--set full -o trace.ncu-rep) → GUI 에서 같은 trace 를 열어 source view 까지. CI 에서는 CLI 만 사용 가능 — JSON export 로 metric regression 검사 가능.
Nsys 의 강점은 scope. NCU 가 한 커널 launch 안을 깊이 보는 도구라면, Nsys 는 여러 process / GPU / CPU thread 를 한 timeline 에 같이 그린다. distributed training 의 진단 도구.
Nsys 가 잘 잡는 자리들.
# 가장 작은 Nsys 사용 — CLI
nsys profile -t cuda,nvtx,cudnn,cublas \
-o profile.qdrep \
python train.py --steps=10
# 결과 .qdrep 또는 .nsys-rep 를 GUI 로 열기
# 또는 CLI 로 stats 추출:
nsys stats profile.nsys-rep \
--report cuda_kernel_sum
# Distributed: 각 rank 별 trace 를 GUI 에서 같이 열기
# nsys 가 다중 process 를 자동으로 한 화면에 정렬한다
Nsys → 어디가 dominant 한 커널인지 식별 → 그 커널만 NCU 로 다시 본다 (ncu --kernel-id ::regex:gemm:). 두 도구가 같은 NVTX marker 를 인식하므로 — with nvtx.range("attn"): 안만 측정하는 식의 zoom 이 가능.
기본 프로파일링은 커널 이름 단위로 trace 를 잘라준다. 하지만 사람이 보고 싶은 단위는 보통 의미 단위 — “attention forward”, “MLP block”, “optimizer step”. NVTX 가 이 매핑.
# PyTorch + NVTX
import torch.cuda.nvtx as nvtx
def forward(x):
nvtx.range_push("attention")
nvtx.range_push("qk_matmul")
qk = q @ k.transpose(-1, -2)
nvtx.range_pop()
nvtx.range_push("softmax")
p = qk.softmax(-1)
nvtx.range_pop()
nvtx.range_push("pv_matmul")
out = p @ v
nvtx.range_pop()
nvtx.range_pop() # attention
# 이제 Nsys / NCU 의 timeline 에 "attention" 박스가 직접 보인다
# Nsys CLI 로 NVTX 별 stats 도 추출 가능:
# nsys stats --report nvtx_sum profile.nsys-rep
학습 코드에 한 번 NVTX layer (attention / mlp / norm / optimizer) 를 깔면 — 모든 후속 profiling 이 그 의미 단위로 정렬된다. PyTorch 의 torch.profiler 도 자동으로 NVTX 를 emit (with_stack=True 와 함께). Triton 의 autotuner 도 NVTX 를 emit 해서 어떤 config 가 어디서 도는지 추적 가능.
NCU 가 좋은 점은 — metric 만 dump 하는 게 아니라 “이걸 고치면 X% 빨라진다” 의 hint 까지 박아준다는 것. ML 사용자가 자주 만나는 hint 5개를 정리.
__launch_bounds__.+1 stride).L043 의 5단계 사다리가 이 hint 들의 직접적 응답이었다는 것을 다시 떠올리면 — uncoalesced → column-major fix, long scoreboard → SMEM tile, tail effect → register tile. 각 hint 가 곧 fix 의 trigger.
실용적인 함정. NCU 는 hardware performance counter 에 직접 접근한다. 보안 및 multi-tenant 제약 때문에 cloud 환경에서는 종종 막혀 있다.
nvidia-smi -q -d PERFORMANCE_COUNTERS). 환경 별 정책 다름.대형 모델 실험 자체는 cloud H100 에서 돌리되, kernel-level 최적화는 자기 데스크탑(예: RTX 4090) 에서 한다 — 같은 architecture (Ada Lovelace 는 Hopper 와 호환 가능한 SASS) 에서 NCU full access 로 hint 받고, fix 한 코드를 cloud 에 올린다. 이 두 환경의 분리가 일반적인 워크플로.
실전 팀의 패턴 — profiling 결과를 사람이 매번 읽지 않는다. 핵심 metric 만 추출해서 CI 의 regression test 로.
# NCU 결과를 JSON 으로 export
ncu --set full --target-processes all \
--export profile.ncu-rep \
--csv \
-k regex:my_kernel_name \
python bench.py
ncu --import profile.ncu-rep --csv \
--metrics gpu__time_duration.sum,sm__throughput.avg.pct_of_peak_sustained_elapsed \
--csv > metrics.csv
# Python 후처리 — 임계치 검사
import pandas as pd
df = pd.read_csv("metrics.csv")
peak_pct = df["sm__throughput.avg.pct_of_peak_sustained_elapsed"].mean()
assert peak_pct > 60, f"regression: {peak_pct}%"
NCU 의 기본 section 외에, 자기 워크로드에 특화된 section 을 작성 가능. ~/Documents/NVIDIA Nsight Compute/Sections/ 의 .section 파일. ML 팀에서 “attention 전용 section” 또는 “GEMM 전용 section” 을 깔아두는 패턴이 흔하다.
이 자동화의 가치 — 사람이 매번 NCU GUI 열고 화면 비교하는 대신, commit 별 metric 변화를 dashboard 에 자동 plot. regression 이 PR 단계에서 잡힌다.
실전에서 “이 hint 의 정확한 의미가 뭐지?” 또는 “이 metric 어떻게 측정되지?” 를 찾을 때 가는 자리들.
ncu --csv 로 metric export → regression test. PR 단계에서 throughput 회귀 잡기.강의 transcript 가 누락된 강의 — 본 노트의 모든 자리는 도메인 지식 + L001/L008/L016 의 어휘 기반의 추정. 영상 직접 확인 필요한 사항들.
본 노트 전체에 “영상 직접 확인 필요” 가 묵시적으로 붙어 있다. 모든 numerical 주장 (예: "metric 800개+", "SM 별 64KB") 은 NVIDIA 공식 문서 기준이며 강의에서 직접 발화된 수치는 아니다. 본 노트는 강의 노트라기보다 L044 의 토픽이 가리키는 자리에 대한 도메인 지식 보충으로 읽는 게 정확하다.