daniel7481의 개발일지

20220927 2주차 화요일 회고 본문

AI Tech 4기/Level1

20220927 2주차 화요일 회고

daniel7481 2022. 9. 27. 22:21
반응형

피어세션

처음으로 챌린지 불이행자가 나왔다...! 벌칙은 노래 부르기로 정하는 계기가 됬다. 오늘 데일리 스크럼 시간에는 다들 강의 전부 수강과 기본 과제 1 끝내기라는 어마어마한 계획을 세웠다. 이번 주부터 과제가 상당히 많아졌기에 열심히 해야할 것 같다. 국립국어원 인공지능 언어 능력 평가 대회에 다들 참여하고 싶어했다. 일단 각자 맡은 캐글과 대회를 빨리 끝내고 다 같이 참가하기로 하였다. 오늘의 챌린지는 거북목 치료 영상보고 스트레칭하기이다. 자기 전에 하고 자야겠다.

공부 회고

  • torch.nn.Module로 딥러닝을 구성하는 Layer를 만들어 줄 수 있다. input, output, forward, backward를 정의해주고, parameter 또한 정의할 수 있다. 
  • nn.Parameter는 tensor 객체의 상속 개체이다. required_grad=True로 학습 대상이 될 수 있다. 대부분의 layer에는 weights 값들이 지정되어 우리가 직접 다룰 일은 많지 않다. 
  • dataloader는 모델에 데이터를 feed(먹인다)해주는 객체이다. 
  • 데이터를 모으고, 전처리하고, pre processing해준 후 데이터를 Dataset에 넣어주고, Dataset 클래스는 __len__함수와 __getitem__ 함수가 정의되어 있어야 한다. 이를 DataLoader 클래스로 호출하여 batch와 shuffle 등을 정해주고 모델에 먹여주는 과정을 거친다. 
  • Dataset 클래스 생성 시 모든 과정을 데이터 생성 시점에 처리할 필요는 없다. 최근에는 HugginFace 등 표준화된 라이브러리를 사용한다.
  • DataLoader 클래스는 데이터의 Batch를 만들어주고, 병렬적인 데이터 전처리로 GPU에게 feed해준다. 
  • 이미 훈련이 된 모델을 pre-trained model이라고 하고, 이 모델을 가져와 우리 데이터에 맞게 훈련시켜주는 것을 fine tuning이라고 한다. 또한 이렇게 이미 훈련된 모델을 가져와 훈련을 하는 것을 transfer learning이라고 한다. 
  • model.save()로 모델의 형태와 파라미터를 저장할 수 잇다. 
  • model.load_state_dict()로 파라메터만 가져오거나 torch.save(model.state_dict())로 파라메터만 저장할 수 있다.
  • earlystopping 기법 사용시 epoch, loss, metric을 저장하는 checkpoints를 만들 필요가 있다. 
  • pretrained 모델을 활용시에는 모델의 일부분을 frozen시켜서 학습이 일어나지 않게 한다.
  • frozen된 레이어들은 requires_grad=False로 frozen 해줄 수 있다.
  • wandb는 weight and bias로, 학습 중에 로깅과 메트릭을 편리하게 전시해주는 역활을 한다. MLOps의 대표적인 툴로 자리잡고 있다.
  • Pytorch에서도 tensorboard를 지원해줘서 사용할 수 있다.
  • Tensorboard
    • scalar: metric등 상수 값의 연속을 표시
    • graph: 모델의 computational graph 표시
    • histogram: weight 등 값의 분포를 표현(정규분포면 좋다)
    • image: 예측값과 실제 값을 비교 표시
    • mesh: 3d 형태의 데이터 표현하는 도구(쓸 일이 많지 않다.
  • Node는 컴퓨터를 얘기하며, single node multi GPU는 컴퓨터 한 개에 여러 개의 GPU를 사용하는 것이다. 
  • 모델을 나눠 병렬적으로 처리하는 Model Parallel과 데이터를 나누어 처리하는 Data Parallel이 있다.
  • Hyperparameter tuning은 오늘날에는 큰 차이를 가져오지는 않는다. 마지막에 쥐어짤 때 사용한다
  • 가장 기본적인 방법으로 grid과 random이 있다. grid는 n개의 파라미터에 대해 n차원 경우의 수를 만든 후 각 경우에 대해 실험하는 반면, random은 랜덤한 값을 하이퍼파라미터에 넣어서 찾는다.
  • Ray를 이용하여 하이퍼파라미터 튜닝을 병렬적으로 나눠서 할 수 있다.
  • OOM은 out of memory의 약자로, 대부분의 경우 배치 사이즈를 낮추고 GPU를 clean하고(런타임 재시작) 다시 돌리면 해결이 된다고 한다.
  • GPU 병목현상이 일어나지 않는지, 메모리가 터지지는 않는지 GPUtil 라이브러리를 import해서 사용할 수 있다.
  • torch.cuda.empty_cache()를 사용하여 사용되지 않는 GPU상 캐시를 정리한다. del을 해줘도 메모리 상에는 남아있기 때문에 캐시를 정리하려면 empty_cache함수를 사용해야 한다. 
  • loop 안에서 계속해서 쌓이는 변수가 있으면 없애줘야 한다.
  • 학습시 OOM이 발생하면 배치 사이즈를 1로 하여 실험해본다.
  • torch.no_grad()를 사용해 불필요한 미분을 피한다.
반응형

'AI Tech 4기 > Level1' 카테고리의 다른 글

20220929 2주차 목요일 회고  (1) 2022.09.29
20220928 2주차 수요일 회고  (0) 2022.09.29
20220926 2주차 월요일 회고  (0) 2022.09.27
20220923 1주차 금요일 회고  (2) 2022.09.23
20220922 1주차 목요일 회고  (2) 2022.09.22