Pytorch vs TensorFlow
pytorch에서는 tensor라는 자료구조를 사용하는데, 이는 Numpy와 거의 동일한 역할을 수행한다.
torch.cuda.{type}Tensor
tensor.numpy()
를 통해 tensor를 numpy로 전환해 줄 수 있음..dot
대신, .mm
을 사용.dot
을 이용함..view
vs .reshape
.view
는 연속성(contiguity)를 보장함..view
로 생성된 뷰는 기존 텐서와 데이터를 공유.reshape
는 연속성을 보장하지 않음..reshape
로 생성된 텐서는 기존 텐서와 데이터를 공유할 수도 있지만, 공유하지 않을 수도 있음
.view
를 사용하는 것이 메모리 측면에서 효율적일 수도 있음
torch.nn.Functional [공식 문서 링크]
딥러닝 모델을 만들 때 유용한 함수들을 제공
AutoGrad
requires_grad = True
로 설정하면, backward
함수를 통해 자동미분을 실행할 수 있음.
requires_grad
default 값은 False
지만, nn.Parameter
로 넘겨줄 때의 default 값은 True
임Torch.nn.Module
Layer의 Base class로, input, output, forward, backward 등을 정의
checkpoint
학습의 중간결과(epoch, loss, metric)를 저장하여 이전 학습 결과물을 불러오기 위한 장치
torch.save({
'epoch': e,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': epoch_loss,
},
f"saved/checkpoint_model_{e}_{epoch_loss/len(dataloader)}_{epoch_acc/len(dataloader)}.pt")
torch.save()
를 이용하여 key, value
의 형태로 저장.checkpoint = torch.load(PATH)
model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
epoch = checkpoint['epoch']
loss = checkpoint['loss']
{인스턴스명}[key]
의 형태로 불러옴.Tensorboard
TensorFlow 전용 시각화 툴이었지만, pytorch와 연계하여 사용 가능
import os
log_dir = "logs" # Tensorboard 기록을 위한 폴더
os.makedir(log_dir, exist_ok = True)
from torch.utils.tensorboard import SummaryWriter # 정보를 기록하기 위한 객체
writer = SummaryWriter(log_dir) # 인스턴스 생성
for epoch in n_epohcs:
writer.add_scalar('Loss/train', train_loss, n_iter) # loss 카테고리 안의 train에 train_loss 값을 저장하는데, x축은 n_iter임.
writer.flush() # 값을 data에 기록
load_ext tensorboard # Jupyter 상에서 Tensorboard 실행
%tensorboard --logdir {logs_dir}
add_scalar
: metric등 상수값의 연속을 epoch 단위(or 시간)로 표시 add_graph
: computational graph 표시add_histogram
: weight 값의 분포를 표현ad_image
: 예측값과 실제값을 비교표시add_mesh
: 3d 형태의 데이터를 표현Node
컴퓨터의 개수
ex. Single Node Single GPU – 컴퓨터 1대 GPU 1개
다중 GPU 학습 방법
데이터를 나눠 GPU에 할당하여, 결과의 평균을 취함 (Mini batch와 유사)
Dataparallel
단순 분배 및 평균 (GPU 불균형, GPU 병목현상으로 인한 Batch사이즈 감소)
DistributedDataParellel
각 CPU마다 Process를 생성하여 개별 GPU에 할당
Hyperparameter Tuning
Grid Search
hyperparameter를 일정한 간격(grid)으로 변화시켜 찾는 방법
Random search
무작위로 찾는 방법
Random search로 범위를 찾은 다음에, 축소된 범위 내에서 Grid search로 찾는 방법이 기본적이지만, 최근엔 베이지안 기반 기법들이 주도하고 있음
Ray
OOM (Out of Memory)
GPUUtill
로 GPU의 상태를 확인hook
텐서나 모듈 내의 연산 전후 작업을 제어하는 역할을 수행
apply
모듈 내의 모든 submodule에 대해 동일한 연산을 수행
dropout
epoch이 반복될 때마다, 뉴런을 선택적으로 연결하여 학습을 시키는 방법
시간이 많이 부족하다는 느낌을 받았다. 강의를 들으면서 모든 내용을 이해하려 하기 보다는, 특정 keyword를 중심으로 이해하려고 노력하며, 궁금한 부분이 생기면 수강에 지장이 가지 않도록 core time 이후에 개인적으로 알아보도록 해야겠다.