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
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 |