티스토리 뷰

Google 에서 또다시 엄청난 것을 일반에 공개했다. 바로 Colaboratory 라는 것인데, Jupyter Notebook 의 협업판 이라고 생각하면 되시겠다. 원래 구글 내부에서 직원들이 사용하던 것인데 이번에 신청만 하면 바로 사용이 가능하게 되었다. (기본 제공은 아직 아닌듯.) 신청하면 1시간 내에 accept 되니 일단 선신청하고 용도는 천천히 생각해보시라. 신청은 아래 URL 에서 진행하면 된다.

신청: https://colab.research.google.com/


자, 그럼 도대체 Colaboratory 가 무엇인지 조금 더 살펴보도록 하자. Google 에서 기본적으로 제공되는 많은 문서가 있는데 이것들의 장점이라고 하면 로컬 PC 가 아닌 클라우드 환경에서 작업이 되기 때문에 공유가 수월하고 협업을 할 수 있다는 점이겠다. 다른 아이콘은 이미 친숙 할 텐데 가장 오른쪽 아이콘을 보자. Colaboratory 의 약자로 추정되는 아이콘이다.


다른 문서도 마찬가지지만 우리는 특히 Colab 이 클라우드 어딘가에서 docker 로 동작한다는 사실을 알아야 한다. 중요한 사실이다.


아래 그림처럼 colab 을 만들어서 편집을 하면 실제 코드의 interactive 한 동작은 docker 에서 이뤄지게 되는데, 스프레드시트나 프레젠테이션에서는 중요하지 않았던 내용이 왜 여기서는 중요할까?


정답은 매우 쉬운 곳에 있다. 우리는 notebook 을 사용하면서 예를 들어 mnist (손글씨 인식) 코드를 작성할 수도 있고, 기타 필요한 파일을 install 하거나 GitHub 에서 받아오기도 한다. 이렇게 notebook 에서 magic command 로 생성된 파일은 우리의 구글 드라이브가 아닌 docker 에 저장되기 때문에 브라우저에서는 눈으로 확인할 수가 없다. 또한 docker 머신은 내게 평생 종속되어 있지 않다. 언젠가는 삭제되 거나 재배치 되기도 한다는 의미다. 생성 해놓은 파일이 없어질 수도 있다는 이야기로 받아들이면 된다. 가령 예를 들어 foo 라는 python 모듈을 pipinstall 했다고 하면 몇 일 후에 접속 했을 때는 다시 install 해야 할 수도 있다. (어찌보면 끔찍한 이야기고, 어떻게 보면 당연한 거고)


여튼 이제 colab 을 본격적으로 살펴보자. 우클릭하고 Colaboratory 파일을 생성하면 되겠다.


Colab 을 열어보면 Google 문서의 특징처럼 우측에 현재 셀을 수정하고 있는 사용자 아이콘이 표시된다. 함께 협업할 수 있다는 뜻이다. 당연한 이야기지만 모든 기능/동작이 Jupyter Notebook 과 동일하다. 더욱 놀라운 사실은 TensorFlow 의 버전이 최신으로 반영되어 있다. 아직 Google Cloud Platform 에서 제공하는 datalabTensorflow 버전이 1.2.1 인데 말이다.


사양은 뜻밖으로 좋다. 메모리가 무려 13 기가 !!


CPU는 나름 듀얼코어 2.30GHz


용량은 꽤 넉넉한 편이다. 엄청난 데이터를 테스트 하는게 아니라면 웬만한건 모두 테스트나 학습할 수 있을만큼 충분하다. 아래에서 사용자가 사용할 수 있는 영역은 /content 가 마운트되어 있는 46G 영역이다.



마무리


예전에 TensorFlow 를 처음 공부하기 시작할 때 언제 어디서든 브라우저를 통해 공부할 수 있도록 Google Cloud Platform datalab 을 공인 IP 로 열어뒀던 적이 있다. 뭐 보안에 허술 하겠지만 당시에는 그게 최선이었다. 일단 원하는 결과(어디서든 공인 IP 입력하고 노트북 개발환경 접근)를 얻었으니까. 근데 구글에서 Colaboratory 라는 엄청난 물건을 던져줬다. 언제 어디서든 개발환경(대규모 프로젝트에는 어울리지 않지만)에 접속할 수 있고 링크 공유를 통해 여러 사용자들과 함께 협업할 수도 있다. 이제 이것을 어떻게 활용할지는 우리 사용자들의 몫이다. 굿!!



Update. 2018.01.31


현재 별도의 신청 없이 사용할 수 있으며 무려 GPU 까지 사용할 수 있다. 간혹 실행시에 GPU 를 이용할 수 없다는 메시지가 나올 때도 있는데 세계적으로 많은 사람들이 동시에 사용하려는 경우이므로 잠시후에 다시 시도해보면 사용할 수 있을 것이다. 아래 링크에 colaboratory 관련해서 자세한 내용이 있으니 살펴보면 좋을 듯.

https://medium.com/deep-learning-turkey/google-colab-free-gpu-tutorial-e113627b9f5d




댓글
  • 프로필사진 질문자 안녕하세요 Colaboratory 에 있는 gpu를 이용하고 싶어서 사용하려는데 , 만약에 이미지를 저장시킨다고 하면, 그것이 드라이브에 저장이 될줄 알았는데,
    안되더라구요. 이미지를 저장하고 싶으거나 weight를 저장하고 싶을 때 이런 것들은 어떤걸 이용해야 저의 드라이브에 저장할 수 있을까요?
    2018.02.28 22:38 신고
  • 프로필사진 BlogIcon Jaeyeon Baek 음, 아래 방법 사용해보시겠어요?

    from google.colab import files

    files.download(‘filename’)
    2018.02.28 23:21 신고
  • 프로필사진 질문자 for it in range(10000):
    if it % 1000 == 0:
    n_sample = 16

    Z_sample = sample_Z(n_sample, Z_dim)
    y_sample = np.zeros(shape=[n_sample, y_dim])
    y_sample[:, 7] = 1

    samples = sess.run(G_sample, feed_dict={Z: Z_sample, y:y_sample})

    fig = plot(samples)

    fig, ax = plt.subplots(1, n_sample, figsize=(n_sample, 1))

    for a in range(n_sample):
    ax[a].set_axis_off()
    ax[a].imshow(np.reshape(samples[a], (28, 28)))

    plt.savefig('out/{}.png'.format(str(i).zfill(3)), bbox_inches='tight')

    i += 1
    이런식으로 저장을 해서 나중에 보고 싶은데 plt.savefig 대신 저걸 쓰면 되는 걸까요?
    근데 현재 디렉토리가 "/content" 로 나오는데 제 ssd에나 드라이브로 path를 옮길 수가 있을까요?
    2018.02.28 23:53 신고
  • 프로필사진 BlogIcon Jaeyeon Baek local로 받는건 안될 것 같고 위에 적어드린 내용대로 하시면 구글 드라이브에 다운로드 될거예요. 말씀하신 위치에 넣고 돌려보세요. 2018.03.01 09:07 신고
  • 프로필사진 BlogIcon 분석뉴비 오 네 저렇게 하니까 하나하나 다운로드해야 하지만 작동합니다. 정말 감사합니다
    또 하나 다른 질문이 있는데요 제가 .py 를 import를 시키고 싶은데 이게 local이 안되니까 어떻게 해야 할지 모르겠더라구요 ㅠㅠ
    인터넷에 찾아보니
    %%writefile example.py
    def f():
    print ('abc')
    # Bring the file into the local Python environment.
    execfile('example.py')
    exec(open('example.py').read())
    # Call the function defined in the file.
    f() # --> abc
    이런식으로 하면 example.f() 로 안하고 그냥 단순히 def() 부르는 거라 굳이 .py를 써야하나 싶구
    또 코드수를 줄이려고 저렇게 따로 만드는 건데 local로 안되니 이런식으로 매번 불러야 하나요? 혹시 다른 방법도 있을까요?
    2018.03.01 19:52 신고
  • 프로필사진 BlogIcon Jaeyeon Baek 무슨 말씀이신지 잘 모르겠습니다. colab 안에서 .py를 만들고 import 해서 사용하고 싶다는 말씀이신지요. 어느 부분을 해결하고 싶으신건지 조금 더 명확하게 설명 부탁드립니다. :-) 2018.03.01 23:00 신고
  • 프로필사진 질문자 네 그부분을 말하는 거 맞습니다!!. 근데 .py colab이 container 개념이니까 매번 colab 안에서 만들어야할 것 같은데.
    이렇게 안하고 colab에서 만들어진게 아닌 다른곳에서 만들어진 .py를 colab안에서 불러들여서 사용할 수 있을까요?
    2018.03.02 11:13 신고
  • 프로필사진 BlogIcon Jaeyeon Baek 음. 제가 제대로 이해하지 못했는데 여러가지 답변드려봅니다.

    - 위에 예제처럼 "example.py" 를 생성하셨으면 단순하게 아래처럼 사용하면 되지 않나요?
    import example
    example.f()

    - 혹은 내 Local PC나 구글 드라이브에 있는 .py 파일을 colab 안에서 바로 import 해서 사용하는 것을 원하시면 딱히 방법이 없는 것 같습니다. 대신 Google Cloud Platform 안에 파일을 올려놓고 import 해서 사용하는 것은 가능할것 같네요.

    - 다른 곳에서 만들어진 파일은 아래처럼 colab 에 upload 해서 사용하시면 됩니다.
    from google.colab import files
    files.upload()

    도움이 되실지 모르겠지만 혹시 착오가 있다면 말씀해주세요. :-)
    2018.03.02 15:50 신고
  • 프로필사진 질문자 빠른 답변 감사드립니다. ㅠㅠ
    1번 해답은 되긴 하는데, 제가 원하는 것은 생성된 것을 바로 import 시키고 싶었던 거여서 아니었구요 ㅠ
    2번은 혹시 그럼 예제가 있을까요?
    3번은 만약 "example.py" 업로드를 한다면 그걸 import 하는 방법은 없겠죠?...
    잠깐 생각해봤는데, 3번에서 만약 uploaded = files.upload()
    !mkdir -p local_modules/utils
    %%writefile local_modules/utils/utils.py
    uploaded
    import sys
    sys.path.append('local_modules')
    import utils 이런식으로 해봤는데 아쉽게도 안되더라구요 ㅠㅠ 이렇게는 안된느 걸까요?
    https://www.kdnuggets.com/2018/02/google-colab-free-gpu-tutorial-tensorflow-keras-pytorch.html
    제가 이런 글을 찾았는데 이러면 구글드라이브랑 연결이 되더라구요 여기서 어떻게 잘하면 될 것 같은데 어떻게 해야 할까요.
    # 확인결과
    확인해보니 저기 위에서 시키는 대로 하니까 잘 되더라구요! 대신에 mnist를 다운로드 하면 제 드라이브에 다운로드가 된다는 단점이 있네요 ㅠㅠ
    2018.03.02 21:05 신고
  • 프로필사진 BlogIcon Jaeyeon Baek 음.. 단순히 코드양이 많아져서 python 파일을 분리하는게 목적이라면 그냥 노트북을 분리해서 사용하시는건 어떨까 생각해봅니다.

    http://nbviewer.jupyter.org/github/jupyter/notebook/blob/master/docs/source/examples/Notebook/Importing%20Notebooks.ipynb

    그리고 3번 방법으로 그냥 업로드해서 import example 하면 안되는건가요? :-)
    2018.03.02 22:49 신고
  • 프로필사진 질문자 왜그런지 모르겠는데, 답변을 확인 할 수가 없어서 다시 보냅닌다! ㅠ
    네 그냥 단순히 저렇게 하니까 읽지를 못하더라구요 ㅠㅠ 일단은 제가 원하는게 되긴 한 것 같습니다! ㅠㅠㅠ
    보내주신 자료로도 해보겠습니다!
    귀찮으셧을텐데, 정말 감사드립니다 ㅠㅠㅠㅠㅠㅠ
    근데 google_Drive랑 연결하니 gpu를 쓰는 것 같은데 먼가 연결하기 전보다 느려진 기분인데 제 기분탓인가요?


    2018.03.03 20:45 신고
  • 프로필사진 BlogIcon Jaeyeon Baek 조금이나마 도움으되셨기를 바라요 :-)

    구글 드라이브 연결하고 GPU는 관계가 없을텐데요? 음.. 코드가 실제로 GPU를 사용하는지 확인해보셔야할 것 같아요.
    2018.03.03 20:52 신고
  • 프로필사진 질문자 with tf.device('/gpu:0'):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
    c = tf.matmul(a, b)
    # log_device_placement을 True로 설정하여 세션을 만듭니다.
    sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
    만약 이런식으로 with tf.device('/gpu:0'): //
    sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
    만 설정해 놓으면 다 되는건가요?
    제가 gpu를 처음 써보는데 저렇게 parameter 부분에만 쓰면 되나요?
    2018.03.03 21:08 신고
  • 프로필사진 BlogIcon Jaeyeon Baek 이건 제가 답변드릴 수 있는 영역이 아닌것 같아요. 저도 잘 몰라서요 :-)

    이미 아시겠지만 모든 경우에서 GPU를 사용하는게 CPU 보다 빠를거라는 생각은 안하시는게 좋을 수도 있습니다. 참고해보세요.
    2018.03.03 21:14 신고
  • 프로필사진 비밀댓글입니다 2018.05.18 07:08
댓글쓰기 폼