9/26 월
학습한 것들:
예전엔 딥러닝을 하려면 scratch부터 시작해야 했으나 현재는 PyTorch와 TensorFlow라는 main framework 두개만 남았음
PyTorch는 Computational Graph를 사용한다 (실행을 하면서 그래프를 생성한다)
- 자동미분, 다양한 함수, multi-GPU 지원
Tensor: 텐서를 표현하는 PyTorch 클래스
- numpy.ndarray와 같음
.ndim = 차원 수
.shape= 텐서의 크기
.from_numpy= ndarray를 Tensor로 변환
.tensor= list에서 Tensor로 변환
.ones_like = 1로 차있는 같은 크기의 Tensor 반환
.numpy = array 반환
.dtype = 타입 반환
.view = shape 변환 (형태만 바꿔주기 때문에 복사가 아님)
.reshape= shape 변환 (복사해서 변환)
.squeeze = 차원 개수 1인 차원 삭제
.unsqueezed = 차원 개수 1인 차원 추가
.mm = 행렬곱셈
.matmul = 행렬곱셈이지만 broadcasting 지원(자동으로 차원 늘려주기)
.nn.functional as F = 사용하면 다양한 수식 변환 가능 (softmax, one_hot, cartesian product etc
requires_grad=True로 해주고 backward 해주면 자동으로 AutoGrad
회고:
대회에 대한 의미있는 대화를 한거 같다. 이번주는 강의가 많이 없고 과제가 많지만 그래도 강의 많이 듣는것보단 훨씬 낫다고 생각한다
9/27 화
학습한 것들:
PyTorch에서 hook은 원하는 함수를 이미 있는 모델에 원하는 때에 실행 시킬 수 있게 한다.
Apply를 사용하면 제일 위에 있는 model에 적용한 함수를 밑에 있는 sub-model에 다 적용 가능하다.
Buffer을 사용하면 gradient 계산을 하지는 않지만 텐서를 save_state_dict 할때 저장이 가능하다
Module_list, module_dict같은 함수를 사용하면 다양한 모델들을 저장할 수 있다.
setattr 함수로 새로운 attribute를 설정해 줄 수
optimizer.zero_grad()를 해줘야 그 전의 gradient 값이 영향을 주지 않는다
loss.backward를 해줘서 gradient를 구하고 optimizer.step()을 해줘야 그 값이 update가 된다
일일이 해줘야하는걸 PyTorch에서 자동으로 해준다
Dataset class에서 전처리와 tensor바꾸어주는것 그리고 transform해준다.
- 즉 데이터의 형태를 같게 만들어 준다
- 이것은 데이터가 필요할때만 실행이 되고 모든 데이터를 이렇게 만들어 주는 것은 아니
Dataloader로 small_batch를 나눠서 gpu에 넣어준다
-sampler로 어떤 방식으로 batch를 뽑아올건지 정할수 있다
회고:
대회에 나갈 모델을 학습 시켜봐야겠다. 과제가 한번 날라가버려서 맨탈이 터졌지만 그래도 많은걸 배웠다
9/28 수
학습한 것들:
학습된 모델을 불러오는게 요즘 트렌드
- 불러와서 fine-tuning
model.save 로 학습 결과를 저장할 수 있음
state_dict와 load_state_dict로 parameter을 저장하고 불러올 수 있다
checkpoint 지속적으로 저장해줘서 원하는 시점으로 돌아간다
transfer learning 으로 일부분만 변경해서 학습을 수행한다
pretrained 모델 사용시 일부분을 frozen 시켜서 활용
모델을 평가할때는 tensorboard와 weight and biases를 사용하면 좋다
회고:
대회 모델을 학습 시키고 있다. 이번 과제들에서 학습을 할때 필요한 것들에 대해서 배웠다. 많이 유용할 거라 생각된다
9/29 목
학습한 것들:
Node= 한대의 컴퓨터
궁극의 서버는 Multi Node Multi GPU
Model parallel: 모델을 다중 GPU에 나눈다
- AlexNet
조심해서 처리를 하지 않게 되면 병목 현상이 생긴다
Data parallel: 데이터를 나눠 GPU에 할당후 결과의 평균을 취한다
- Minibatch의 동작 방식과 유사하지만 한번에 여러 GPU에서 수행을 한다
파이토치에서는 DataParallel과 DistributedDataParallel을 제공한다.
- DataParallel로 사용하면 불균형 문제가 발생할 수 있다, GIL문제
- DistributedDataParallel을 사용하여 각 CPU마다 process 생성하여 각각 gpu에 할당한다
요즘에는 hyperparameter tuning보다 데이터의 질이 중요하다
Ray: multi-node multi-processing 지원 모듈
- ML/DL 병렬 처리를 위해 개발된 모듈
- Hyperparameter search를 위한 다양한 모듈을 제공한다
- ASAHAScheduler을 잘 사용하면 성능을 높일 수 있다
OOM(Out of memory)의 가장 보편적인 해결 방법: kernel 다시 시작
nvidia-smi로 gpu상태를 확인하자
torch.cuda.empty_cache()을 사용해서 가용 메모리를 확보해보자 garbage collector와 같은 느낌
loop안에서 축적되는 tensor을 피하자
- 1d tensor는 list로 변환하여 사용하자
필요가 없어지면 del을 사용하자
batch size를 1으로 줄여서 실험해보자
inference에서는 torch.no_grad()사용
colab에서는 큰 사이즈는 실행하지 않는다.
float precision을 줄일 수도 있다
회고:
이쪽 분야의 세계는 참 신기하다고 생각한다. 배울건 많고 새로운 것들이 매일 쏟아져 나온다. 다양한 유용한 팁을 배워서 써먹을 수 있을것 같다
9/30 금
학습한 것들:
심화 과제 수행
회고:
오피스 아워에서 이 분야의 미래와 전망을 배울수 있는 좋은 시간이였다 생각한다.
'잡다한 것들 > 부스트캠프 AI Tech 4기' 카테고리의 다른 글
6주차 학습 일지 - CV 기초대회 (0) | 2022.10.24 |
---|---|
부스트캠프 5주차 학습 일지 - Computer Vision Basics (0) | 2022.10.18 |
부스트캠프 4주차 학습 일지 - Computer Vision Basics (0) | 2022.10.11 |
부스트캠프 3주차 학습 일지 - Deep Learning Basics (0) | 2022.10.03 |
부스트캠프 1주차 학습 일지 - Python & AI Math (0) | 2022.09.19 |