본문 바로가기

부스트캠프 AI Tech

[WEEK 2] PyTorch

Define and Run

- 그래프를 먼저 정의

- 실행시점에 데이터를 feed

Define by Run (Dynamic Computational Graph, DCG)

- 실행을 하면서 그래프를 생성하는 방식

- PyTorch의 방식

- 즉시 확인 가능한 pythonic한 code

 

Tensor

- Array는 Numpy 구조를 가지는 Tensor 객체로 표현

- view : reshape과 동일

- squeeze : 개수가 1인 차원 삭제 (압축)

- unsqueeze : 개수가 1인 차원 추가

- mm : 행렬곱셈 연산 dot (matmul은 broadcasting 지원이 방해됨)

- nn.functional : 다양한 수식 변환 지원

AutoGrad

- backward 함수 사용하여 자동 미분 지원

 

PyTorch Template 추천 repository

- https://github.com/victoresque/pytorch-template 

 

GitHub - victoresque/pytorch-template: PyTorch deep learning projects made easy.

PyTorch deep learning projects made easy. Contribute to victoresque/pytorch-template development by creating an account on GitHub.

github.com

 

torch.nn.Module

- Layer의 base class

- Input, Output, Forward, Backward, 학습의 대상이 되는 parameter(tensor) 정의

nn.Parameter

- nn.Module 내에 attribute 될 때 required_grad=True로 지정되어 학습 대상이 되는 Tensor

Backward

- Parameter들의 미분을 수행

- loss에 대해 미분을 수행

- 해당 값으로 Parameter 업데이트

- Module 단계에서 직접 지정가능하긴 함 (오버라이딩)

 

Dataset 클래스

- 데이터 입력 형태를 정의하는 클래스

DataLoader 클래스

- Data의 Batch를 생성해주는 클래스

- 학습직전(GPU feed전) Tensor로 변환, Batc 처리 하는 것이 메인 업무

 

model.save()

- 모델 형태(architecture)와 파라메터를 저장

checkpoints

- 학습의 중간 결과를 저장

- epoch, loss, metric 값을 지속적으로 확인 저장

Transfer learning

- 다른 데이터셋으로 만든 모델을 현재 데이터에 적용

- backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행

Freezing

- pretrained model을 활용 시 모델의 일부분을 frozen 시킴

 

Tensorboard

- 학습 그래프, metric, 학습 결과의 시각화 지원

- scalar : metric 등 상수 값의 연속을 표시

- graph : 모델의 computational graph 표시

- histogram : weigh 등 값의 분포를 표현

- image, text : 예측 값과 실제 값을 비교 표시

weight & biases

 

Model parallel

- 다중 GPU에 학습을 분산하는 두 가지 방법, 모델 나누기 / 데이터 나누기

- 모델 병렬화는 고난도 과제 (병목, 파이프라인의 어려움)

Data parallel

- 데이터를 나눠 GPU에 할당 후 결과의 평균을 취함

- minibatch 수식과 유사

- DataParallel : 단순히 데이터를 분배한 후 평균을 취함

- DistributedDataParallel : 각 CPU마다 process를 생성하여 개별 GPU에 할당

 

Hyperparameter Tuning

- 모델 스스로 학습하지 않는 사람이 지정하는 값 (learning rate, 모델의 크기, optimizer 등)

- 기본적으로 grid, random 방식을 따르지만 최근 베이지안 기반 기법들이 주도

Ray

- multi-node multi processing 지원 모듈

- ML/DL의 분산병렬 처리를 위한 모듈의 표준

- Hyperparameter Search를 위한 모듈 제공

 

OOM

- 왜 발생했는가...

- Batch Size 줄이고 GPU clean 후 Run!

GPUUtil

- nvida-smi 처럼 GPU의 상태를 보여주는 모듈

torch.cuda.empty_cache(()

- 사용되지 않는 GPU상 cache를 정리

trainning loop에 tensor 축적

- tensor 처리된 변수는 GPU상에 메모리를 사용하므로 loop안에 있으면 computatinal graph를 생성하여 메모리 잠식

- 1-d tensor의 경우 python 기본 객체로 변환하여 처리

del

- 필요가 없어진 변수는 적절한 삭제 필요

- python 메모리 배치 특성상 loop가 끝나도 메모리를 차지

batch 사이즈 실험

- OOM 발생시 batch 사이즈를 1로 실험

torch.no_grad()

- Inference 시점에는 torch.no_grad() 구문을 사용

- backward pass로 인해 쌓이는 메모리에서 자유로움

기타

- colab에서 너무 큰 사이즈 실행 자제 필요

- CNN에서 크기가 맞지 않아 생기는 에러들은 torchsummary 등으로 사이즈를 맞출 것

- tensor읠 float precision을 16bit로 줄이는 것도 가능

 

Code Base Learning 필요

'부스트캠프 AI Tech' 카테고리의 다른 글

[WEEK 4-5] CV 이론  (1) 2023.11.30
데이터 직군에 대한 지식 쌓기  (0) 2023.11.30
[WEEK 3-4] Data Visualization  (1) 2023.11.23
[WEEK 3] DL Basic  (0) 2023.11.20
[WEEK 1] AI Math  (0) 2023.11.09