PyTorch FSDP (Fully Sharded Data Parallel) 완벽 이해하기!
·
🛠️ Engineering/Distributed Training
1. FSDP(Fully Sharded Data Parallel)이란?1.1 FSDP 개념FSDP는 PyTorch에서 제공하는 고급 분산 학습 기법으로, 모델의 모든 파라미터를 GPU마다 복제하는 기존 DDP 방식과 달리, 모델의 파라미터를 GPU끼리 shard(조각) 단위로 나누어 저장하는 방식이다. 이를 통해 GPU 메모리 사용량을 대폭 절약할 수 있다. FSDP는 GPU마다 모델 전체가 아닌 일부 shard만 저장하고, forward 및 backward 연산 시 필요한 파라미터를 GPU 간에 서로 교환(all-gather)하여 연산을 수행한 후 다시 shard로 분산 저장(reduce-scatter)하는 방식으로 동작한다. 1.2 DDP vs FSDP 차이구분DDPFSDP모델 파라미터각 GPU가 전..
PyTorch 분산 학습 기초: 데이터 병렬화, 모델 병렬화, 파이프라인 병렬화
·
🛠️ Engineering/Distributed Training
딥러닝 모델이 점점 커지고 데이터도 방대해지면서, 단일 GPU나 서버만으로는 학습 속도가 너무 느리거나 GPU 메모리가 부족해 학습이 불가능해진다. 이를 해결하기 위해 여러 GPU를 동시에 활용해 모델을 학습시키는 것이 바로 분산 학습이다.1. 분산 학습 종류1.1 데이터 병렬화(Data Parallelism)[전체 데이터] → [분할된 미니배치1] → GPU0 (모델 복제) → [분할된 미니배치2] → GPU1 (모델 복제) → [분할된 미니배치3] → GPU2 (모델 복제)[각 GPU] → forward & backward → all-reduce → 동기화 → 파라미터 업데이트 가장 보편적으로 사용되는 방식이다. 동일한 모델을 여러 GPU에 복제하고, 미니배치 ..
[ONNX] 딥러닝 모델 ONNX Runtime으로 CPU 환경에서 가속화하기
·
💻 Programming/AI & ML
요즘은 어지간한 딥러닝 모델을 GPU 없이 돌리기 어렵지만, 또 의외로 가벼운 모델들은 CPU 만으로 돌릴 수 있다. 가능하다면 클라우드 비용도 줄일 수 있으니 온라인 예측이 필요한 경우가 아니라면 CPU 환경에서 인퍼런스하는 것도 고려해 볼 만하다. 물론 CPU로 딥러닝 모델 인퍼런스를 하게 되면 상당히 느리다. 때문에 ONNX 모델 변환을 하고, ONNX runtime으로 인퍼런스를 수행하면 조금이라도 모델 인퍼런스 속도를 향상시킬 수 있다. 또한 TensorRT와 달리 ONNX 모델 변환의 경우 입력 텐서 크기 또한 동적으로 가져갈 수 있다는 장점이 있다. 물론 하드웨어 환경에 따라, 모델에 따라, 입력 텐서의 크기에 따라 속도 향상의 정도가 다르거나, 오히려 속도가 느려질 수도 있으니 테스트를 해..
[Model Inference] Pytorch 2.0 Compile 사용 후기 및 장단점 | pytorch compile 모델 추론 속도 개선 테스트
·
💻 Programming/AI & ML
Pytorch Compile 튜토리얼 Pytorch 2.0 Overview Pytorch 2.0 compiled_model = torch.compile(model) 긴 설명할 것 없이 Pytorch 2.0 이후 compile 이라는 것이 추가되었는데, 위 예시처럼 torch.comile(model)이라는 짧은 코드 한 줄만 추가하면 모델 인퍼런스 속도를 향상시킬 수 있다고 한다. 공식 문서에 따르면 A100 GPU에서 모델 학습 속도는 43% 향상되고, 모델 인퍼런스 속도는 Float32 precision에서 21%, AMP precision에서 51% 정도 향상된다고 한다. Pytorch 2.0 Compile 모델 인퍼런스 테스트 torchvision에서 제공하는 기본적인 모델인 resnet50으로 p..
[pytorch]Box operator로 Bounding Box 쉽게 다루기
·
💻 Programming/AI & ML
torchvision.ops torchvision.ops 에서는 computer vision 관련 각종 operator 들을 제공하는데, 그중에서 Bounding Box를 다루는 Box Operators를 소개한다. Detection 관련 코드를 만지다보면 bounding box를 다룰 일이 많은데, torchvision.ops 에서는 bactch 단위로 연산이 가능한 각종 기능들을 제공한다. * box 면적, box간의 iou, box format 변경, clip 등 수행 가능 테스트 box 3개를 정의하고 앞서 살펴본 box operator 기능들을 테스트 import numpy as np import cv2 import torch from torchvision.ops import * # boxes ..
[pytorch] Dataloader의 'collate_fn'을 사용한 이미지 패딩. 가변 사이즈의 이미지를 batch로 묶어 Dataloader에 주입하는 방법.
·
💻 Programming/AI & ML
Pytorch의 Dataloader는 인덱스에 따른 데이터를 반환해주는 dataset, 가져올 데이터의 인덱스를 컨트롤하는 sampler와 batch로 묶인 데이터를 batch로 묶을 때 필요한 함수를 정의하는 collate_fn 등의 파라미터를 가진다. 딥러닝 모델을 학습 또는 인퍼런스 하다보면 가변 사이즈의 데이터를 모델에 주입해야 할 경우가 생기는데, 이미지 데이터의 경우 일반적으로 특정 사이즈(e.g. 224x224)로 이미지를 리사이즈해서 사용하는 경우가 많다. 그래서 일반적으로 퍼블릭 데이터를 사용하는 경우 별 생각없이 transforms.Resize() 함수를 사용해서 모든 데이터를 일괄된 사이즈로 변경해서 사용하는 경우가 대부분이다. 하지만, 실제 환경에서 일괄된 이미지 리사이징을 사용하는..