Boostcamp AI tech Week 3

Week 3

Day 01

강의 복습 내용

[PyTorch]

PyTorch의 장점

  • Define by Run의 장점, 즉시 확인 가능 -> pythonic code
  • GPU support
  • 사용하기 편함
  • Numpy + AutoGrad + Function
    - Numpy 구조를 가지는 Tensor 객체로 array 표현
    • 자동미분을 지원하여 DL 연산을 지원
    • 다양한 형태의 DL을 지원하는 함수와 모델 지원

Pytorch Operation
Tensor

  • 다차원 Arrays를 표현하는 PyTorch 클래스
  • 사실상 numpy의 ndarray와 동일
  • Tensor를 생성하는 함수도 거의 동일

View : reshape과 동일하게 tensor의 shape을 변환
Squeeze : 차원의 개수가 1인 차원을 삭제
Unsqueeze : 차원의 개수가 1인 차원을 추가
행렬의 곱셈은 mm 사용
🔥Pytorch의 핵심은 자동 미분의 지원 -> backward 함수 사용🔥

과제 정리

1번 과제

torch.Tensor
- 클래스
- int 입력시 float로 변환
- torch 데이터 입력시 입력 받은 데이터의 메모리 공간 사용
- list, numpy 데이터 입력시 입력 받은 데이터를 복사하여 새롭게 torch.Tensor를 만든후 사용

torch.tensor
- 함수
- int 입력시 그대로 int 입력
- 입력 받은 데이터를 새로운 메모리 공간으로 복사 후 사용

nn.Module

  • 여러 기능들을 한 곳에 모아 놓는 상자 역할
  • Base class for all neural network modules

Python List

  • list에 담아 놓은 모듈들 전체가 nn.Module의 submodule로 등록이 안된다

PyTorch ModuleList

  • nn.Module의 submodule로 등록이 된다

Parameter

  • nn.Module 안에 미리 만들어진 tensor(Parameter)

tensor v.s Parameter

  • 기능적으로는 동일하다
  • Paramter로 지정된 tensor의 경우에 back propagation에서 gradient 값을 계산하여 값을 업데이트 해주고 모델을 저장할때 값을 저장해준다
  • tensor는 업데이트, 모델을 저장하지도 못한다

buffer

  • buffer에 등록된 tensor들을 저장해준다

named_children, named_modules

  • module의 이름을 돌려줌
  • children은 한 단계 아래의 submodule만 표시해줌
  • modules는 자신에게 속하는 모든 submodule을 표시해줌

hook

  • 패키지화된 코드에서 다른 프로그래머가 custom 코드를 중간에 실행시킬 수 있도록 만들어 놓은 인터페이스
  • foward 시에는 pre_hook, hook이 존재
  • backward 시에는 hook만 존재
  • Tensor에 적용하는 hook
    -backward hook만 있음
  • Module에 적용하는 hook

apply

  • 적용하는 함수는 module을 입력으로 받는다
  • 가중치 초기화에 많이 사용

과제의 퀄러티에 놀랐다! 과제만 해도 파이토치에 대해 공부량이 엄청나다!!
index_select, gather, squeeze, unsqueeze 정확하게 알고 넘어가기!

피어세션 정리 및 학습 회고

조원 중 석암님이 깃허브의 PR관련해서 설명해주셨다. 설명을 정말 잘해주셔서 쉽게 이해되고 바로 실행할 수 있었다. 그리고 예빈님이 오늘 강의에 대해 요약을 해주셨는데 파이토치를 해본적이 있으셔서 본인 경험 팁을 알려줬는데 엄청 도움이 됬다!
피어세션


Day 02

강의 복습 내용

[PyTorch 4. AutoGrad & Optimizer]

torch.nn.Module

  • 딥러닝을 구성하는 layer의 base class
  • input, ouput, foward, backward 정의
  • 학습의 대상이 되는 parameter 정의

nn.Parameter

  • Tensor 객체의 상속 객체
  • nn.Module 내에 attribute일 대 required_grad=True로 지정되어 학습 대상이 된다
  • layer에서 weight 값들이 지정한다

backward

  • layer에 있는 Parameter들의 미분 수행
  • foward의 결과값과 실제 값간의 차이에 대해 미분 수행
  • 해당 값으로 parameter 업데이트

[PyTorch 5. Dataset & Dataloader]


Dataset 클래스

  • 데이터 입력 형태를 정의하는 클래스
  • 데이터를 입력하는 방식의 표준화

DataLoader 클래스

  • 데이터의 batch를 생성해주는 클래스
  • Tensor로 변환 + Batch 처리가 메인 업무

과제 정리

2번 과제 정리

피어세션 정리 및 학습 회고

부스트캠프의 난이도가 점점 올라가는 거 같은데 내 실력은 그대로이다... 남들보다 더 열심히해야되는데 ㅠㅠㅠ 꾸준히 알고리즘도 공부하자!!


Day 03

강의 복습 내용

[Pytorch 6. 모델 불러오기]

model.save()

  • 학습 결과를 저장하기 위한 함수
  • 모델 형태와 파라미터를 저장
torch.save(model.state_dict(), 'file_path') # 모델의 파라미터 저장

new_model = theModelClass()
new_model.load_state_dict('file_path') # 같은 모델의 형태에서 파리미터만 load

torch.save(model, 'file_path') # 모델의 architecture와 파라미터 저장
model = torch.load('file_path') # 모델의 architecture와 함께 load

checkpoints

  • 학습의 중간 결과를 저장
  • earlystopping 기법 사용시 이전 학습의 결과물을 저장

Transfer learning

  • 다른 데이터셋으로 만든 모델을 현재 데이터에 적용
  • 일반적으로 대용량 데이터셋으로 만들어진 모델의 성능은 매우 좋다
  • backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행

[Pytorch 7. Monitoring tools for Pytorch]

Tensorboard

  • 학습 그래프, metric 학습 결과의 시각화

weight & biases
-협업, code, versioning, 실험 결과 기록 등 제공

피어세션 정리 및 학습 회고

오늘 배운 모니터링 툴들을 다음 주 p stage 때 사용하기 위해 공부해봐야겠다!
피어세션때 다른 캠퍼님들이 강의를 요약해주고, 멘토님께서 좋은 유투버들을 많이 소개시켜준 날이다.


Day 04

강의 복습 내용

[Pytorch 8. Multi-GPU 학습]

Model parallel

  • 다중 GPU에 학습을 분산하기 위해 모델을 나눈다
  • 예시로 AlexNet
  • 모델의 병목, 파이프라인의 어려움 등으로 인해 모델 병렬화는 고난이도 과제이다

Data parallel

  • 다중 GPU 학습을 분산하기 위해 데이터를 나눈다

  • 데이터를 나눠 GPU에 할당 후 결과를 평균을 취하는 방법

  • DataParallel - 단순히 데이터를 분배 후 평균을 취함 / GPU 사용 불균형 문제 발생

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

[Pytorch 9. Hyperparameter Tuning]

모델의 성능을 끌어 올리는 방법
1. 모델을 바꾼다
2. 🔥새로운 데이터를 추가하거나 수정한다🔥
3. Hyperparameter Tuning

Hyperparameter Tuning

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

Ray

  • multi-node multi processing 지원 모듈
  • ML/DL의 병렬 처리를 위해 개발된 모듈
  • Hyperparameter Search를 위한 다양한 모듈 제공

[Pytorch 10. Troubleshooting]

OOM (Out Of Memory)

  • 대량의 메모리를 이용해서 시스템 메모리가 부족해지면 종료되는 현상
  • 어디서 발생했는지 알기 어렵고 메모리의 이전 상황 파악이 어렵다
  1. GPUUtill 사용하기

    • GPU의 상태를 보여주는 모듈
  2. torch.cuda.empty_cache()

    • 사용되지 않은 GPU의 cache 정리
    • 가용 메모리 확보
  3. del 명령어 적절히 사용하기

  4. 가능 batch 사이즈 실험하기

  5. torch.no_grad() 사용하기

    • inference 시점에서 torch.no_grad() 사용 (test data 사용시)

피어세션 정리 및 학습 회고

이번 주는 뭔가 후딱 지나간 느낌이다. 과제에서 정신을 못 차리는 바람에 강의에도 집중하지 못한 느낌이다. 그리고 뭔가 할게 많아서 정리가 안되는 기분이다. 주말을 이용해서 컨디션도 충전하고 계획을 세워서 정리해야 될거 같다. 그래도 같이 공부하는 조원들이 있어서인지 포기하지 않고 한다는 생각이 든다. 다들 열정이 있으셔서 그런지 나도 그 열정을 따라가고 싶은 마음이 크다. 팀원들에게는 항상 고마운 마음이 든다. 다음주에도 더 열심히 집중해보자!

좋은 웹페이지 즐겨찾기