NAVER AI Tech/Pytorch(10)
-
10. GPU OOM(Out Of Memory) 해결방법
Out Of Memory 문제? 1. batch size 줄여라 2. GPU clean 3. 다시 실행 !pip install GPUtil import GPUtil GPUtil.showUtilization() # 현재 GPU 상태를 보여줌!! iteration 마다 메모리가 늘어나는지 확인. torch.cuda.empty_cache() # 사용되지 않는 cache clean. 근데.......... 경험상 도움이 되지 않았던 경우가 많았다. ** Tip: 1. training loop 내에서 tensor로 축적되는 변수를 확인해서 없애줄 것.(=메모리 낭비) - 1-d tensor의 경우 python 기본 객체로 변환. tensor.item 을 활용해서 메모리 적재되는 것을 방지하자. 2. del명령어 ..
2023.11.17 -
9. Hyper-parameter tuning
마른 수건도 짜보자! 개념 성능에 있어서 영향을 끼치는 것 1. 모델 2. 데이터 3. 하이퍼 파라미터 이때 모델은 알려져있는바가 다 같아서 크게 중요 x 데이터가 상대적으로 중요한 추세. 하이퍼 파라미터는 마른 수건도 짜보는 마지막 쥐어짜기 단계. 기본적으로 grid-search / random search - 근데 시간 너무 많이 걸림 최근엔 베이지안 기법들이 추세.
2023.11.17 -
8. multi-GPU
모델을 나누거나 데이터를 나눠서 병렬처리. - 한번도 해본적은 없는 것 같다.. 일부 layer는 GPU:0에서, 일부 layer는 GPU:1로 보내는 방식인데........ 쉽지 않아보인다. 데이터를 나눠서 일부는 GPU:0을 사용하고, 일부는 GPU:1을 사용해서 병렬적으로 수행 - DataParallel, DistributedDataParallel 사용. - DataParallel : GPU 사용 불균형 문제 발생, Batch size 감소(병목 현상 발생) 등 문제점이 존재하긴함. - DistributedDataParallel : 각 CPU 별 process 생성. -> 개별 GPU 할당
2023.11.17 -
7. pytorch monitoring tools
1. tensorboard 2. weight & bias : 유로 버전도 있는 툴. import os logs_base_dir = 'logs' os.makedirs(logs_base_dir, exist_ok=True) from torch.utils.tensorboard import SummaryWriter import numpy as np writer = SummaryWriter(logs_base_dir) for n_iter in range(100): writer.add_scalar('Loss/train', np.random.random(), n_iter) # writer가 현재 logs_base_dir의 경로에 위치중이므로 그 이하 Loss폴더 내의 train 폴더 경로에 기입하도록 path 지정. w..
2023.11.17 -
6. 모델 저장, 불러오기
저장 : torch.save(model_name.state_dict(), path) - checkpoints : earlystopping 사용 시 중간중간 최선의 결과를 저장하는 것. - MLops 사용하는게 어떻나.. 생각해봄. 불러오기 : model = torch.load(path) - transfer learning 수행. - backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행하는 것 - 주로 대용량 데이터로 학습된 모델을 불러오기 때문에 성능이 괜찮다. 요즘은 transfer learning에서 stacking frozen 학습 방식도 사용한다. - frozen or train : layer.requires_grad = False 지정.
2023.11.17 -
5. pytorch dataset
DataLoader 클래스를 사용하여 pytorch model의 input으로 제공하게 된다. - tensor로 변환 + batch dataset 생성이 주된 업무. - generator 형식이므로 for 문을 통해서 하나씩 받아오면 된다. next(), iter() 함수와 함께 사용! - 여러가지 parameter가 있는데 document를 한번 찾아보자.
2023.11.16