(매우 중요)대용량 데이터로 colab 딥러닝 학습할 때 첫번째 epoch이 매우 느리다면(colab 대용량 데이터, dataloader 병목현상)

colab에서 7만개 정도의 이미지 데이터를 학습하고 6만개 정도 이미지 데이터를 test할려고 하는데

 

평소에 한 것처럼 구글 드라이브에 데이터를 넣어두고 학습 시도

 

하지만 예전에 경험한 것처럼 한 폴더에 너무 많은 데이터를 넣어두면 파이썬이 구글 드라이브 폴더에 아예 접근을 못함

 

https://deepdata.tistory.com/1084

 

구글드라이브로 대용량 데이터를 다룰 때 필요한 테크닉(압축해제, 자동압축, 파일 크기 확인방

구글 드라이브의 한 폴더 내에 너무 많은 데이터가 있을 경우, colab에서 구글 드라이브로 연동할때, 파이썬이 구글 드라이브의 폴더 내의 데이터에 제대로 접근하지 못한다 그래서 한 폴더당 1000

deepdata.tistory.com

 

 

그래서 한 폴더에 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에서 구글 드라이브에 접근하는게 제한량이 있어서 문제가 있던거임

 

이걸 이제 알았다니 난 아직 멀었네

TAGS.

Comments