[Pytorch] 멀티 노드 분산 학습 환경 구축하기 (Deepspeed)
·
Pytorch
소개이번 프로젝트에서 멀티 노드 환경에서 분산 학습을 하게 되었습니다. 일반적으로 Kubernetes(K8s), Slurm과 같은 워크로드 매니저나 오케스트레이션 도구를 사용하여 복잡한 분산 환경을 관리합니다. 하지만 이러한 도구에 익숙하지 않거나 빠르게 분산 학습 환경을 구성하고 싶을 때가 있습니다.이럴 때 각 노드에 Docker 컨테이너를 띄우고 SSH 연결을 통해 통신하는 방식으로 비교적 간단하게 멀티 노드 분산 학습 환경을 구축할 수 있습니다. 이 방법은 K8s나 Slurm만큼 견고하거나 확장성이 뛰어나지는 않지만, 소규모 클러스터나 빠른 실험 환경 구축에는 유용할 수 있습니다.이번 글에서는 Docker, SSH, 그리고 accelerate와 deepspeed 라이브러리를 활용하여 멀티 노드 분산..
[Pytorch] DataParallel vs DIstributedDataParallel
·
Pytorch
DataParallel multi-thread 방식 코드 한줄로 구현 가능 model = nn.DataParallel(model) 방식 1. 배치 데이터를 4개의 GPU에 나눔 2. 모델을 4개의 GPU에 복사 3. 4개의 GPU에서 forward 수행 4. 결과값을 GPU-1에 다시 모아 gradient 계산 5. 계산된 gradient를 4개의 GPU에 다시 나눔 6 .4개의 GPU에서 backward 수행 단점 output을 GPU-1에 모아 계산하기 때문에 GPU-1의 사용량이 많아집니다. Python은 GLI(Global Interpreter Lock)때문에 multi-thread로는 성능 향상이 어렵습니다. GLI : 하나의 thread에만 자원을 허락하고 Lock을 걸어 다른 thread의 ..
[Pytorch] 다양한 Learning Rate Scheduler
·
Pytorch
Deep learning은 gradient descent를 통해 loss를 줄이는 방식으로 학습하고 이 과정에서 learning rate를 설정하게 됩니다. learing rate를 너무 크게 하면 global minima에 수렴하지 못하고 너무 작게 하면 수렴 속도가 늦고 local minima에 빠질 수 있습니다. 따라서 학습을 진행하면서 고정된 learning rate가 아닌 learning rate에 변화를 주면서 학습화는 방법이 연구되고 있습니다. 0. Library import torch import torch.nn as nn from transformers import get_cosine_with_hard_restarts_schedule_with_warmup import matplotlib...
[Pytorch] Onnx로 모델 export하기
·
Pytorch
Onnx는 pytorch, tensorflow 등의 머신러닝 프레임워크에서 만들어진 모델들이 서로 호환될 수 있도록 만들어줍니다. 이를 사용하여 pytorch에서 만든 모델을 onnx로 export 한 후 tensorflow에서 사용할 수 있습니다. 1. Export import torch import torchvision.models as models # 모델 생성 model = models.vgg11(pretrained=True) # 평가 모드로 설정 model.eval() pytorch모델을 준비하고 모델을 model.eval() 또는 model.train(False)로 eval모드로 바꿔줘야 합니다. (dropout, batchnorm의 비활성화를 위해서 필요) dummy = torch.randn..
[Pytorch] 유용한 method (view,reshape,squeeze,permute,stack,repeat,gather...)
·
Pytorch
shape 변경(view,reshape,transpose,permute) 차원 추가,삭제(squeeze,unsqueeze) Tensor 병합(stack,cat(concat) repeat,expand scatter,gather view() vs reshape() ※ 우선 contiguous에 대해 알아야 하는데, data의 메모리상 물리적 위치 주소와 tensor내 data의 index 순서가 일치하면 contiguous 하다고 한다. view : contiguous tensor에만 실행 가능하며 contiguous tensor 반환, 원본의 data가 바뀌면 view로 반환된 tensor도 바뀐다. -> contiguous 보장 reshape : contiguous tensor에서는 view와 동일하며 ..