Search

[NVIDIA Cluster] 5. 프로그램 병목개선을 위한 GPU 프로파일링 활용

AICA X NVIDIA Cluster GPU 교육 시리즈

5. 프로그램 병목개선을 위한 GPU 프로파일링 활용

홍광수 박사 (솔루션 아키텍트, NVIDIA)) NVIDIA x AICA Cluster GPU 활용 캠프 (2024/08/26 - 09/05)

GPU Monitoring tools

GPU Utilization: 하나의 커널이 샘플링 시간동안 얼마나 차지했는지에 대한 비율.
Memory Utilization: 메모리를 읽거나 쓴 비율.
따라서 실제 사용률과 괴리가 있다.
Utilization 뿐 만 아니라 다른 metric을 함께 봐야 정확히 알 수 있다.
그래픽을 디버깅하고 프로파일링하는 툴들
Nsight Systems : Bottleneck point를 찾는다.
Nisight Compute: 더 딥다이브한 바틀넥을 찾는다.
Nsight Graphics: 그래픽스 프레임워크에 사용할 때
Nsight에 표시되는 metric들.
Nsight 화면 구성.
GPU Utilization 뿐 아니라 SM, TensorCores Activity를 표시해준다.
Zoom Out, Zoom in에 따른 레이아웃.
Utilization Metric은 평균값들을 막대지표로 보여준다.
가장 중요한 것은 TensorCore Activity가 중요하다.

Profiling with Nsight

CPU Utilization 확인
System Memory (H) 와 GPU Memory (D) 간의 메모리 전송과정 확인.
과도한 메모리의 전송은 Dependency가 발생함.
예를 들어, freeze한 network의 weight는 저장할 필요가 없음.
실제 DL Training 프로파일링 과정
연산과정의 Activity를 확인할 수 있다.

Multi-node Profiling

GPU간 Communication, SharedMemory 등을 프로파일링.
NCCL 라이브러리 연산
IO Bottleneck 확인 (NIC)
Infinite Band의 스위치 Level에서의 전송/수신 관련 Metric.
CLI 호출.
pytorch 컨테이너를 사용하는게 Bottleneck point를 최소화시키는 방향성이 된다.
가장 많은 바틀넥을 차지하는 부분부터 줄여나가세요.
텐서코어를 활용하는 것부터 시작한다.
전처리 과정 역시 GPU Based 라이브러리를 활용한다.
분산학습시 가장 성능이 낮게나오는 퍼포먼스에 맞춰지므로, 균등하게 처리가 되게끔 분배를 하는 작업이 필요하다.
DP보다 DDP를 사용하자.
오른쪽이 낫다.
no_grad를 잘 활요하자.
TorchJIT 스크립트를 해놓자.
Hotspot을 의심할 수 있는 랭크들.
어떤 랭크에서 대기가 걸리고, 전처리 후처리 시간이 소모되는지, 동기화가 잘 되는지 등
멀티노드 네트워킹과정에서 트래픽이 발생하는지, 메모리 접근은 원활한지.
NVIDIA Nsight Systems
NVIDIA Nsight Compute
NVIDIA DCGM