(매우 중요)대용량 데이터로 colab 딥러닝 학습할 때 첫번째 epoch이 매우 느리다면(colab 대용량 데이터, dataloader 병목현상)
colab에서 7만개 정도의 이미지 데이터를 학습하고 6만개 정도 이미지 데이터를 test할려고 하는데
평소에 한 것처럼 구글 드라이브에 데이터를 넣어두고 학습 시도
하지만 예전에 경험한 것처럼 한 폴더에 너무 많은 데이터를 넣어두면 파이썬이 구글 드라이브 폴더에 아예 접근을 못함
https://deepdata.tistory.com/1084
그래서 한 폴더에 500개 정도로 해서 140개 폴더로 나눠서 학습을 시켰는데..
접근 자체는 잘 되지만 한 epoch 학습시킬려는데 gpu써도 4시간정도 걸림
모델이 너무 느린건가, batch size를 줄여볼까, image size를 줄여볼까... 등등 해봐도 가장 빠른게 이정도
그래서 포기하고 1000개 정도 샘플링해서 학습만 시켜봐야지 했는데
첫번째 epoch이 20~30분 정도 걸리다가 나머지 epoch이 10초도 안걸리는 현상을 관찰
그래서 모델 hyperparameter 이런 문제가 아니라는 것을 깨닫고
dataloader만 한번 순회해봤더니.. 그냥 여기서 매우 느린거임
그래서 이 first epoch이 매우 느린 현상에 대해 여러가지 찾아보니..
first epoch후에 파이썬이 메모리에 cache해놔서 그 뒤로는 엄청 빠른것 같고
그래서 dataloader cache하는 법이 있는가... 등등을 찾아봄
첫번째로 해결할 수 있는 방법은 먼저 colab에서 구글 드라이브에 접근할 때 이게 매우 느린 것
그냥 colab runtime pc에 데이터를 넣어두고.. 여기서 바로 접근하면 속도가 매우 빨라진다
그러면 문제는.. 여기 runtime pc에 6기가정도 되는 데이터 zip파일을 넣는데 어떻게 할 수 있는가
그냥 넣으면 시간이 매우 오래걸림(애초에 안들어감)
방법은 gdown을 이용해서 구글 드라이브에 있는 대용량 데이터 파일을 직접적으로 다운 받는 것이다
먼저 구글 드라이브로 공유된 파일을 보면...
url이 ~/file/d/(file_id)/view~ 형태로 되어있다.
https://drive.google.com/file/d/(file_id)/view
여기서 file_id 부분만 가지고 와서 다음과 같이 실행
!gdown https://drive.google.com/uc?id=(file_id)
근데 access denied 되는 경우가 있음
gdown을 업그레이드하면 되긴된다
!pip install gdown==4.6.0
이러면 6기가여도 1분정도면 가능
다음, !unzip을 이용하여 다운받은 zip파일 압축을 풀어준다
이렇게 하면 1분정도 걸림
!unzip /content/open.zip
컴퓨터로 다운받아서 압축풀고(30분) 구글드라이브에 나눠서 넣고(몇시간) 구글 드라이브 갱신(하루)
1epoch 학습(6시간)... 이것보다
이렇게만 하면 데이터 준비하는데 2분이면 충분
이러면 first epoch이 6시간이던거 10분안에 가능
심지어 한 폴더에 7만개 넣어도 상관없이 잘 접근함
그냥 colab에서 구글 드라이브에 접근하는게 제한량이 있어서 문제가 있던거임
이걸 이제 알았다니 난 아직 멀었네
'프로그래밍 > Python' 카테고리의 다른 글
머신러닝에서 hyperparameter search를 도와주는 optuna 라이브러리 소개 (0) | 2024.04.02 |
---|---|
-1 의 50만 거듭제곱을 -1**(500000)으로 하면 안되는 이유 (0) | 2024.02.17 |
구글드라이브로 대용량 데이터를 다룰 때 필요한 테크닉(압축해제, 자동압축, 파일 크기 확인방법) (0) | 2024.01.14 |
Python 개발의 문서화 도구 Sphinx 사용해보기 (0) | 2023.12.14 |
Python으로 유튜브 영상 다운로드하는 방법 (0) | 2023.12.12 |