7-2. Colab 이용하여 tensorflow, pytorch 이용하기 (실전편)
안녕하세요 이번글에서는 구글 Colab에 대해서 말씀드리려고해요~
앞서 도커를 살펴보셨을때 어떠셨나요? 혹시 이런 생각을 해보시진 않았나요?
"뭐... 다 좋은데.. 편하게 하려고 도커쓰는건데 배우는데 시간 투자하느라 더 힘들겠어...
내가 하루종일 할 것도 아니고 튜토리얼로 좀 해보려고하는데 엄청 힘드네...
추가적으로 윈도우에서는 컨테이너에 GPU도 못올리게 되어있으니... 리눅스를 쓰라는건지... 등등 여러므로 불편하셨을거에요!
그래서 이번글에서는 딥러닝을 접하시는 입문자분들이 사용할 딥러닝 개발환경 서비스에 대해서 알아보도록 할거에요.
<1. Colab이 뭔가요?>
Colab이란 Google에서 만든 클라우드 서비스에요.
Colab에서는 GPU, TPU 등을 VM (Virtual Machine; 가상머신)으로 제공하고 있어요.
Colab은 여러용도로 사용하고 있지만 일반적으로는 Data Science, Machine Learning, Deep Learning을 사용하기 위한 서버(GPU, CPU, RAM 등)와 패키지(Python, Pytorch, Tensorflow 등등)들이 가상환경에 설치되어 있어요.
<사진1>
<사진2. Colab에서 제공하는 컴퓨터 사양>
그래서 우리가 Colab을 이용하게 되면 딥러닝을 하기위해 구글에서 설치해놓은 여러 장비들과 패키지들을 이용하기 때문에 코딩하는것만 신경쓰면 됩니다 ㅎㅎ
그럼 예제를 통해 코드를 한 번 작성해볼까요?
Step1. Colab 사이트 접속후 노트만들기
https://colab.research.google.com/notebooks/intro.ipynb
Step2. Code 입력
Step3. 실행하기
'런타임'메뉴에서 모두 실행하기를 선택해주셔도 되고
아래와 같이 현재 작성한 코드 부분만 실행하고 싶다면 해당 부분에 버튼 부분을 클릭하시거나, ctrl+enter를 클릭하시면 됩니다.
<2. Colab으로 Tensorflow, Pytorch 실행하기>
1) Tensorflow with GPU
이번에는 Colab에서 Tensorflow 패키지가 설치되어 있는지, GPU 버전으로 tensorflow가 실행되고 있는지 확인해볼게요.
Step1. '런타임 메뉴' -> '런타임 유형 변경'
Step2. '하드웨어 가속기' -> GPU 클릭
Step3. 아래 코드 입력후 실행 ("ctrl+enter" or "버튼 아이콘 클릭")
현재 Colab은 tensorflow 1.5를 지원하고 있는데 1.5버전은 조금 오래됐기도 하고, 최근에는 2.0 버전들을 사용하는 경우가 많기 때문에 위와 같이 2.x 버전을 사용해주는것이 좋아요. 그리고 곧 tensorflow 2.x로 기본설정을 변경한다고 하네요.
Tensorflow 2.x 버전을 사용하기 위해서는 2.x 버전의 패키지를 설치해야하지만 아래 코드를 사용하면 굳이 2.x 버전을 설치하지 않고 바로 사용할 수 있다고 하네요.
%tensorflow_version 2.x
제공되는 tensorflow version은 2.x 버전이고, 0번 GPU를 사용하고 있음 (보통 하나의 컴퓨터에 GPU 번호는 0번부터 시작합니다.)
2) Pytorch with GPU
기본적인 설정은 위와 같고 코드로 확인만 해주시면 되요.
to 함수를 통해 tensor가 GPU로 계산되는 것을 확인할 수 있을거에요.
<3. 패키지 설치하기>
Colab에 기본적인 패키지가 설치되어 있다고 하더라도, 우리가 직접 설치를 해주어야 하는 경우도 발생할 거에요.
먼저 mpl_finance라는 패키지를 사용하려고 해볼게요. 하지만 아래와 같이 코드 입력시 mpl_finance라는 패키지는 설치가 되어있지 않다고 나와있어요.
그래서 아래와 같은 명령어를 입력해주고 실행시키면 mpl_finance가 설치되고, import mpl_finance 코드를 다시 실행시키면 에러코드없이 mpl_finance 패키지를 읽어드리는걸 확인하실 수 있어요.
<4. 내 로컬 데이터 Colab 서버에 업로드하여 사용하기>
내 로컬 데이터를 사용하기 위해서는 우선 Colab 서버에 내 데이터를 올려서 사용해야해요. (
(코드는 아래 사이트를 참고해주세요)
그런데 이런 방식으로 사용할 경우 문제가 있어요. 뒷 부분에서 설명하겠지만 Colab은 12시간만 session유지가 가능해요. 쉽게 말해서 12시간이 지나면 서버에 올려놓았던 내 데이터들이 전부사라지게되요. 사실 우리가 작업을 하면 같은 데이터를 계속 사용하는 경우가 많죠? 그런데 매일 이렇게 업로드 해주면서까지 사용할 필요가 있을까요??
<5. Google Drive와 연동해서 Colab 사용하기>
Colab이 Google에서 만들었기 때문에 내가 사용하려고 하는 데이터를 Google Drive에 올려놓고 사용할 수 있도록 해놓았어요. 이렇게 하면 Colab에 굳이 내 데이터를 업로드해서 사용하지 않으셔도되요!
Step1. Google 인증코드 생성
Step2. URL 클릭
Step3. 계정 클릭
Step4. 생성된 코드 복사
Step5. 코드 붙여넣기한 후 Enter -> 인증확인
Step6. Google Drive에 Colab Notebooks 폴더 생성됨 -> 클릭
Step7. 해당 폴더에 내 로컬 이미지 파일 업로드
Step8. 이미지 출력하기
아래코드를 입력하면 image 출력가능
A. IPython 패키지를 이용해 출력
B. matplotlib 패키지로 이미지 출력하기
이렇게 Google Drive와 연동해서 사용하는 방식에도 문제는 있어요. 일반적으로 Vision 분야에서는 보통 이미지 데이터나 동영상 데이터를 사용하기 때문에 용량이 엄청나요. 그런데 Google Drive는 무료로 사용할 수 있는 용량이 제한적이기 때문에 돈을 지불하고 Google Drive 용량을 늘려가면서 작업을 해야할거에요.
<6. CNN를 이용한 Fashion MNIST 데이터 학습시키기>
CNN은 주로 이미지 영역에서 사용되는 딥러닝 모델인데요. Colab에서 의류(fashion)와 관련된 데이터들을 load하여 CNN을 학습시키고, 최종 의류데이터들을 분류(classification)하는 작업을 간단히 해볼거에요.
(코드는 아래 사이트를 참고해주세요)
https://colab.research.google.com/github/tensorflow/tpu/blob/master/tools/colab/fashion_mnist.ipynb
Step1. Fashion MNIST data load하기
tensorflow.keras 패키지에 Fashion MNIST data가 들어 있습니다. 아래코드를 입력해주시면 데이터가 load되요.
Step2. 간단한 CNN 모델 만들기
이곳에서 기본적인 Convolution Neural Network 모델을 구현해줍니다. (Dense=FC layer)
Step3. CNN 모델 학습시키기
epoch=17로 설정했기 때문에, 17번의 epoch동안 학습을 진행하게 되요.
Step4. Test 하기
아래와 같은 코드를 구현해주고 실행시켜주면
각 이미지를 classification해주는것을 볼 수 있어요.
<7. 다시 접속>
Colab을 종료시키고 다시 접속할때 본인이 작성한코드가 google drive에 있으니 google drive로 가서 실행시켜주면됩니다!
<8. 단점>
이렇게 간단하고 좋은 서비스를 이용하지 않는 이유는 무엇일까요?
첫 번째로는 session 문제에요. 이전에 잠깐 12시간의 session만 유지된다고 말씀드린바있죠?
Colab은 Docker로 동작하기 때문에 session이 종료된다는건 컨테이너가 종료된다는거에요. 그렇다면 그동안에 했던 작업에서 생성된 데이터들이 다 날라가죠 (아! 물론 코드같은 경우는 Google drive에 저장됩니다~).
또한 내가 학습시킬 용량이 크다고하면 종종 컴퓨터를 12시간 이상 학습시키는 경우도 있을텐데, Colab을 쓴다면 학습이 중간에 중단될거에요. 물론 10시간씩 학습시키고 학습시킨 모델을 따로 보관하고 다시 해당 모델을 불러와 10시간씩 학습하는 방법이 있지만 글쎄요... 자기도 모르게 12시간 넘겨버리면 위험해지지 않을까요? (아, 그리고 12시간이라고는 하는데 중간에 session이 끊길수도 있고 아무것도 안하고 있으면 session이 일정시간후에 자동 종료된다고 하네요 ㄷㄷㄷ;; 그래서 가끔씩 background로 딥러닝 모델을 학습시키고 어디갔다오면 갑자기 학습이 종료되있는 현상도....)
<사진3>
두 번째 단점은 속도에요.
자신이 로컬에서 설치하고 실행했던 작업을 Colab을 실행시킨분들이 있으시다면 굉장히 느려졌다고 느끼셨을거에요. Colab은 다수의 사용자들이 물리적 서버에 접속하여 한정된 자원을 나눠쓰는 구조인데요. 만약 갑자기 사용자들이 많아진다거나 다수의 사용자들을 엄청난 물리적자원(GPU, CPU 등)을 요구하는 작업을 한다고 했을때 Colab은 더욱느려질거에요 (우리나라 사람들만 사용하는건 아니니까요;;;). 즉, 사람들이 많이 몰렸을때 GPU가 포화상태면 내가 조금 기다려야 할수있는 극단적인 상황이 만들어질 가능성도 있어요 (뭐 그런 경우는 극히 드물긴하겠지만 조금 느려진거 같다는 느낌은 가끔 경험할 수 있을거에요).
현재 Google은 위와 같은 단점을 극복하고자 Colab Pro라는 서비스를 유료로 제공하고 있어요.
https://colab.research.google.com/signup#
아직 Colab Pro를 써보진 않았지만 아직까지는 미국에서만 사용가능 하다고하네요. (Colab Pro가 아직까지는 많은 사람들이 쓰는것 같진 않아서 좀 지켜봐야할 것 같아요)
어쨌든 튜토리얼로 부담없이 사용해보고 싶다고 하시는 분들에게는 좋은 선택이겠지만 자신이 안전하게 작업을 하고 싶다면 Google Cloud Platform (GCP)을 사용하시는걸 추천드려요.
Jupyter notebook을 설명하면서 Github에 대해 설명드린다고 했었죠? 그렇기 때문에 GCP에 대한 글을 쓰기 이전에 다음글에서는 Github에 대해서 다루어보려고해요! 그럼 다음글에서 뵐께요~
[사진 래퍼런스]
사진1
https://colab.research.google.com/notebooks/intro.ipynb#scrollTo=2fhs6GZ4qFMx
사진2
https://colab.research.google.com/drive/151805XTDg--dgHb3-AXJCpnWaqRhop_2#scrollTo=vEWe-FHNDY3E
사진3
https://jybaek.tistory.com/686