[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와 동일하며 ..