Colab 장기간 학습 문제

김태훈·2024년 5월 24일
0

소개

Google에서 서비스 중인 Colab이라는 서비스는 사용자에게 무료 혹은 구독제 기반으로 고성능의 컴퓨팅 환경을 제공해줍니다.

특히 고성능의 GPU와 적지 않은 용량의 RAM을 무료로 제공해주기도 하고 유료가 되면 그만큼 더 나은 환경을 제공해줍니다.

이러한 특징 때문에 저는 개인 프로젝트, 실험, 대회 등 여러 딥러닝을 하게 될 때마다 구글 코랩을 이용하여 모델을 학습시키곤 하였습니다.

정말 좋은 환경을 제공해주기는 하지만 그만큼 여러 부분에서 문제상황이 생기기도 하였고 이를 해결하기 위해 많은 노력을 하기도 했습니다.

그래서 이번 글에서는 제가 겪었던 문제들을 해결했던 문제들 중 하나인 Colab 장기간 학습 문제에 대해서 다뤄보고자 합니다.

제한적인 컴퓨팅 환경 제공

구글 Colab이 컴퓨팅 환경을 무료로 제공해주고는 하지만 결국 양은 제한되어 있기 때문에 컴퓨팅 환경을 최대한 많은 사람이 문제 없이 이용하게 하는 것이 구글의 입장에서 가장 중요합니다.

일반 유저들이 Colab에서 컴퓨팅 환경을 할당받고 사용하지 않는다면 그만큼 낭비라고 인식될 것입니다.

특히, CPU 대비 가격이 비싼 GPU의 경우에는 더더욱 중요하게 됩니다.

CPU의 경우 Colab에서는 사용량에 대한 제한이 없는 것으로 알고 있지만 GPU는 하루에 약 4시간 정도의 제한이 있는 것으로 알고 있습니다.

세션 종료

세션은 Colab으로부터 할당 받은 컴퓨팅 환경을 말합니다.

이전 절에서 말했 듯 Colab은 여러 사람에게 컴퓨팅 환경을 무리 없이 할당할 수 있도록 사용자의 활동을 감지합니다.

그렇기 때문에 세션 내에서 어떤 활동도 없을 경우 코랩은 자동으로 세션을 종료시키는 방식을 사용합니다.

그래서 이를 해결하기 위해 코랩에게 사용자가 활동하고 있다는 것처럼 느끼게 하기 위해서 자바스크립트를 이용해 특정 활동을 하도록 매크로를 실행시킵니다.

해결 방법

1.브라우저에서 F12를 눌러 개발자 모드로 들어갑니다.

  1. 우측 Console에 들어가 아래의 자바스크립트 코드를 입력합니다.

    ※ 아래의 코드에서 1000은 1000ms로 1초를 의미합니다.

function ClickConnect(){
    console.log("Working"); 
    document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click() 
}setInterval(ClickConnect,1000)

구글 드라이브 오류

이번에 설명할 오류는 Colab PRO+ 요금제를 사용하면서 제일 이해가 안되던 오류였던 거 같습니다.

Colab PRO+ 요금제의 경우 24시간 끊김 없이 GPU를 사용할 수 있다는 말에 결제를 하고 하루정도 학습을 시키려곤 하였었는데 항상 4시간 정도 학습을 하다가 데이터 로더 부분에서 파일이 존재하지 않는다는 오류가 나곤 했었습니다.

img = cv2.imread("./drive/test.jpg")
print(img)
> None

처음에는 4시간마다 끊긴다는 것도 인지하지 못하고 아래처럼 생각했던 거 같네요...

데이터 로더가 문제인가? 구글 드라이브에 파일을 업로드할 때 오류가 난 건가? 근데 왜 학습이 잘 되다가 끊기는 거지?

처음에는 대용량 데이터라서 업로드가 중간에 잘못되었나 싶었던 지라 며칠동안 구글드라이브로 재업로드 하고 압축 풀고 하는데 시간을 엄청 날렸었습니다.

4시간마다 학습이 끊기는 것을 보면 환경에서 문제가 되겠구나 싶었고 Colab 환경은 문제가 없을테니 구글 드라이브가 문제라고 생각했습니다.

그래서 Colab내의 Local 드라이브에서 파일을 불러오는데 문제가 없을까 하고 24시간 돌려봤는데 문제는 없었고 결국 구글 드라이브가 문제였던 걸 알았습니다.

해결방법

Google Drive를 마운트 하고 드라이브 내에 있는 데이터 셋을 Local에 옮기시면 됩니다.

import shutil

from google.colab import drive
drive.mount('/content/drive')

from_dir = "/content/drive/test"
to_dir = "./test"

shutil.copytree(from_dir, to_dir)

만일 대용량의 파일을 옮기시는데 어느 순간 파일이 안옮겨지고 멈춰져있는 현상이 발생하신다면 다음처럼 하시면 됩니다.

  1. 마운트 된 폴더 내에 옮기고자 하는 폴더(test)가 보이게 디렉토리를 연다

  2. 아래의 자바스크립트 코드 내에 폴더 이름에 옮기고자 하는 폴더(test)를 입력한다.

function ClickConnect(){
    console.log("Working"); 
    document.querySelector('span.file-tree-name[title="폴더이름"]').click();
}setInterval(ClickConnect,1000)
function ClickConnect(){
    console.log("Working"); 
    document.querySelector('span.file-tree-name[title="test"]').click();
}setInterval(ClickConnect,1000)
  1. 해당 자바스크립트 코드가 실행되고 test 폴더가 열렸다 닫혔다 하는 것을 확인하게 된다면 성공

※ 폴더를 열었다 닫았다 하는 과정에서 디렉토리가 갱신되면서 끊김 없이 옮겨지게 됩니다.

마무리

Colab을 사용하면서 많은 문제점들이 있었지만 과거의 저처럼 문제를 만난 분들을 계실까 하고 이렇게 글 올려봅니다.

앞으로 더 생각나게 된다면 추가적으로 올리겠습니다.

profile
👋 인공지능을 통해 다음 세대가 더 나은 삶을 살도록

0개의 댓글