본문 바로가기

반응형

분류 전체보기

(66)
[Pytorch] RuntimeError: Attempting to deserialize object on CUDA device 2 but torch.cuda.device_count() is 1. Please use torch.load with map_location to map your storages to an existing device. 파이토치를 통해 코드를 짜다보면 모델을 불러오기 위해 load하는 경우가 상당히 많습니다. 그런데 종종 아래와 같은 에러가 발생합니다. # 에러 메세지 RuntimeError: Attempting to deserialize object on CUDA device 2 but torch.cuda.device_count() is 1. Please use torch.load with map_location to map your storages to an existing device. # 에러가 발생한 코드 checkpoint = torch.load(args.pretrained) 이러한 에러가 발생하는 이유는 load를 할때, 불러오는 모델을 학습한 환경에서 2개 이상의 gpu가 사용됐기 때문에, 한 개의 gpu..
[Pytorch] 재생산성을 위한 랜덤설정 reproductibility, randomness control, seed Pytorch에서는 초기화와 속도향상을 위해서 다양한 random함수들이 사용됩니다. 하지만 딥러닝 모델 학습을 재생산하거나 동일한 조건내에서 실험을 해야 할 경우, 이런 randomness를 컨트롤해줘야 할 필요가 있습니다. # torch random 값 생성 torch.manual_seed(random_seed) # 현 gpu에서의 random 값 생성 \ torch.cuda.manual_seed(random_seed) # 2개 이상의 gpu를 사용할 때 torch.cuda.manual_seed_all(random_seed) # randomness가 들어간 함수 미사용 torch.backends.cudnn.deterministic = True # True일 시, 동일한 사이즈에 텐서들이 들어올때의 속..
[Pytorch] apex / amp 모델 학습 빠르게 시키는 법. github에서 pytorch 코드를 살펴보다 보면, apex, amp가 사용되는 모습을 자주 볼 수 있다. amp는 Automatic Mixed Precision의 약자로, 몇 operations들에서 float16 데이터타입을 사용해 학 속도를 향상시켜주는 방법을 제공해준다. 기존 pytorch는 데이터타입이 float32로 기본 설정이라는 것도 참고하면 좋을 것 같다. 또한 구글링을 하다보면 amp를 사용하는 방법이 apex.amp 와 torch.cuda.amp 두 방법이 나오는데, 아래 포스트를 보면 apex의 implementation들이 Pytorch에서 지원을 시작해서, apex는 이제 앞으로는 사용되지 않을 것이라고 한다. https://discuss.pytorch.org/t/torch-c..
[Pytorch] DDP-Distributed Data Parallel 구현 도입 ImageNet과 같이 큰 모델을 학습할 때엔 multi-gpu를 활용하여 학습속도를 향상시킬 수 있습니다. DataParallel과 DistributedDataParallel이 대표적인 방법입니다. DataParallel방법은 딱 한 줄만 수정해줘도 동작하기 때문에, 코딩하는데에는 오랜시간이 걸리진 않지만, DDP에 비해 gpu의 memory를 많이 잡아먹게되고, 학습속도도 비교적 느리기 때문에 전체 학습시간은 더 오래걸리게 된다는 큰 단점이 있습니다. 이번 포스트에서는 학습 속도 향상을 위한 DistributedDataParallel(DDP)을 사용하는 방법에 대해 포스트해보도록 하겠습니다. 이번 포스트의 구성은 # 도입 # 간단한 설명 # 상세한 설명 순으로 진행하였습니다. 데이터 셋은 CIF..
Anaconda와 git bash 연동하는 방법 visual studio에서 anaconda 연동이 command prompt와 밖에 안되서, 시각적, 기능적으로 편리한 git bash와 연동하는 방법을 찾았다. https://fmorenovr.medium.com/how-to-add-conda-to-git-bash-windows-21f5e5987f3d How to add Conda to Git Bash (Windows) For windows users, is not common to use the bash command in the command prompt. Also, in Git bash (the git console with some Linux… fmorenovr.medium.com 해당 글에 친절히 설명되어 있다.
[Pytorch 오류] Pytorch Dataparallel시 CUDA_LAUNCH_BLOCKING=1 현상. 다양한 이유가 있을 수 있겠지만, 나같은 경우 imagenet의 validation dataset이 올바르게 설정되어 있지 않아서였다. validation dataset을 다시 다운받은 후, 디렉토리를 설정해주니 정상 작동했다. ImageNet dataset 설치 방법에 대한 글을 작성한 후, 글을 첨부하도록 하겠다.
[논문 리뷰] Rethinking The Value of Network Pruning 리뷰 이 논문은 ICLR 2019에 accept된 논문으로, 그동안 논문들에서 당연하게 믿어져왔던 신념 두가지을 여러 모델과 실험을 통해 반박하고, 그 이유를 추측하는 논문이다. 여기서 두가지 신념이란 1. 매우 크고, over-parameterized된 모델을 사용하여 학습을 먼저 진행하는 것이 중요하다. 2. pruned된 구조와 그 weights이 최종 효율적인 모델을 생산해내는데 필수적이다. 이 논문에서는 이 두 신념을 반박하기 위해 "처음부터 작은 모델로, weight를 새롭에 initialize해서 학습"해서 더 좋은 성능이 나온 결과들을 제시했다. Pruning은 가지치기할 대상에 따라 Structure, Unstructure Pruning으로 분류가 되는데, 이번 논문에서는 Structure P..
[Pytorch] model layer, Sequential 변경하는 법 소개 딥러닝 모델 학습할 때에 여러가지 이유로 선언된 모델의 layer을 수정해야할 때가 있다. 만약 layer가 적다면 직접 변경해줄 수 있다. 그러나 모델의 layer가 많아 자동적으로 변경하고 싶거나, nn.Sequential이 사용되면 변경에 어려움을 느끼게 된다. 이번 포스트에서는 nn.Sequential이 존재하는 model의 layer 수정법을 작성하였다. 정리 모델의 멤버변수를 return 해주는 named_children()과 클래스의 모듈들을 return 해주는 _modules를 활용한다. 코드 class ToyNet(nn.Module): def __init__(self): super(ToyNet, self).__init__() self.layer1 = nn.Sequential( nn...

반응형