[PyTorch] contiguous 연산의 필요성, Grad strides do not match bucket view strides
문제 Grad strides do not match bucket view strides. This may indicate grad was not created according to the gradient layout contract, or that the param's strides changed since DDP was constructed. 위와 같이 에러가 나면서 학습이 안되는 상황이 발생. 해결방법 위와 같이 grad stride 관련 이슈가 난다면, 본인 환경이 ddp 학습인지 체크해보고, 아래와 같이 transpose() 연산이나 permute() 연산에 .contiguous() 를 꼭 붙여준다. transpose().contiguous() permute().contiguous() 이유 즉,..
2023.12.04
[PyTorch] 모델 파라미터 일부만 업데이트 하기
pre-trained model의 일부분만 바꿔서 모델을 학습시키려고 할 때 pre-trained model의 파라미터 일부를 가져와 현재 모델의 state dict을 업데이트 하여 학습해야한다. 즉, pre-trained model의 파라미터를 로드하고, 현재 모델에 덮어 씌워주는 과정이다. 먼저, 아래와 같이 pre-trained model과 현재 model을 각각 로드해준다. pretrained_dict = torch.load(PATH) # pretrained 모델 static dict 로드 model_dict = model.state_dict() # 현재 모델 state dict 로드 그 다음 아래와 같이 pre-trained model의 값들 중에서 현재 model의 state dict과 일치하..
2023.04.06
[PyTorch] PyTorch 모델을 저장하는 방법 및 고려해야할 점
PyTorch 모델을 학습 한 뒤, 모델을 저장하고 불러오는 방법은 다음과 같다. 모델 저장하고 불러오기 다음과 같이 PyTorch 모델은 학습한 매개변수를 state_dict 이라고 불리는 internal state dictionary에 저장한다. 이 state 값들은 torch.save 함수를 이용하여 저장 할 수 있다고 한다. 모델의 가중치를 불러와서 저장하려면 저장하려는 모델의 인스턴스를 생성한 다음 load_state_dict() 함수를 사용하여 매개변수를 불러온다. 참고로 state_dict은 dictionary 이며 이 형태에 맞게 데이터를 저장하거나 불러오는 것이 가능하다. 이는 각 계층을 매개변수 Tensor로 매핑하며 학습 가능한 매개변수를 갖는 계층(conv layer, linear ..
2022.03.23
no image
[PyTorch] 파이토치에서 TensorBoard 사용하기
텐서보드는 머신러닝 실험에 필요한 시각화 및 도구를 제공한다. 손실 및 정확도와 같은 측정항목 추적 및 시각화 모델 그래프(작업 및 레이어) 시각화 시간의 경과에 따라 달라지는 가중치, 편향, 기타 텐서의 히스토그램 확인 저차원 공간에 임베딩 투영 이미지, 텍스트, 오디오 데이터 표시 TensorFlow 프로그램 프로파일링 그 외 다양한 도구 텐서보드를 파이토치 에서도 사용 할 수 있다. 1. SummaryWriter 인스턴스 생성하기 import torch from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter() Writer 는 기본적으로 ./runs/ 디렉터리에 출력된다고 한다. 원하는 디렉터리에 출력하려면 아래와 같이 수정..
2022.02.04
no image
[Pytorch] 이미지 데이터세트에 대한 평균(mean)과 표준편차(std) 구하기
이미지 데이터는 촬영된 환경에 따라 명도나 채도 등이 서로 모두 다르기 때문에 영상 기반 딥러닝 모델을 학습시키기 전에 모든 이미지들을 동일한 환경으로 맞춰주는 작업이 필요하다. 즉, 전체 이미지에 대한 화소 값의 평균(mean)과, 표준편차(standard deviation)를 구하여 이 값들을 영상에 일괄적으로 적용하는 과정이 필요하다. 보통 Imagenet 데이터 세트에서 계산된 평균과 표준을 사용하게 된다. 이는 수백만 개의 이미지를 기반으로 계산된다. 자신의 데이터 세트에서 처음부터 학습하려는 경우 평균과 표준을 계산할 수 있지만, 그렇지 않은 경우(대부분) 자체 평균 및 표준이있는 Imagenet 으로 학습된 pre-trained model 을 사용하는 것이 좋다. 파이토치 데이터 세트에서 평..
2021.05.11
[Pytorch] 파이토치 시간 측정, How to measure time in PyTorch
Pytorch 에서 CUDA 호출이 비동기식이기 때문에 타이머를 시작 또는 중지 하기 전에 torch.cuda.synchronize() 를 통해 코드를 동기화 시켜주어야 한다. start = torch.cuda.Event(enable_timing=True) end = torch.cuda.Event(enable_timing=True) start.record() z = x + y end.record() # Waits for everything to finish running torch.cuda.synchronize() print(start.elapsed_time(end)) 참고자료 1 : https://discuss.pytorch.org/t/best-way-to-measure-timing/39496 Best..
2020.07.27
[Pytorch] 장치간 모델 불러오기 (GPU / CPU)
1. GPU에서 모델을 저장하고 CPU에서 불러오기 2. GPU에서 저장하고 GPU에서 불러오기 3. CPU에서 모델을 저장하고 GPU에서 불러오기 1. GPU에서 모델을 저장하고 CPU에서 불러오기 GPU 모델 저장 torch.save(model.state_dict(), PATH) 저장한 모델을 CPU에서 로드 device = torch.device('cpu') model = TheModelClass(*args, **kwargs) model.load_state_dict(torch.load(PATH, map_location=device)) 위와 같이 GPU에서 학습한 모델을 CPU에서 불러올 때는 torch.load() 함수의 map_location 인자에 'cpu' 값을 전달함 이 경우에는 Tensor..
2020.01.09