Google Colaboratoryの無料GPUで機械学習をする

プログラミング
スポンサーリンク

Google Colaboratory ってなに?

Aidemyなどで機械学習を学んでいると下記のように感じることがよくある。

『訓練やデータ処理をするのにローカルPCだといつまでたっても終わらない』

『機械学習のライブラリが多くて開発環境がたいへん』

機械学習は高負荷がかかる計算をすることが多々あるので自分のPCで処理を行う場合、コード書いているより待ってる時間の方が長いよねっという問題がある。

その待ってる時間の方が長いよね問題を解決してくれるのがGPU。

ただ無知な状態からGPUをググって使おうとしてもグラフィックボードは高いし、ついでにクラウドも高いし設定の仕方もよくわからない。

そこで使えるのがGoogle Colaboratory。GPUが無料で使えるのでお金も環境構築のたいへんさも全てショートカットしてくれるのでとっても便利。

利用制限はある?

当然無料なので利用制限はいくつかあるけれど、Aidemyやチュートリアルなどで学習する程度だと十分かなと思う。

利用制限

  • 連続使用は最大12時間
  • ノートブックがアクティブでない状態が90分経過するとインスタンス停止

インスタンスが停止すると初期状態に戻されるので注意が必要。

Google Coraboratoryを使ってみる

こんにちはcolaboratory-Google Colab

おなじみのJupyter Notebookと同じようなノートブック形式でPythonを実行できる。

Markdownテキストも書くことができるのでとっても便利。

使い方

Google Colabを開く
https://colab.research.google.com/

新規ノートブックを作成

ノートブックを新規作成 → Python3の新しいノーツブック を選ぶ

GPUを走らせる

  • 画面の上のメニューにある ランタイム → ランタイムのタイプを変更 → ノートブックの設定
  • ハードウェアアクセラレータでGPUを選択して保存する

たったこれだけでGPUが設定できる!すごい!

GPUが走っているか確認

[+]コードからコード入力用のセルを追加 → 下記を入力

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

 

ちゃんとGPUが走っているのが確認できる。

走っているのが確認できたので実際にどれくらい早いのか計測してみよう!!

先ほど設定したGoogle Colabに下記コードを入れて実行するとCPUとGPUの比較ができる。

import tensorflow as tf
import timeit

# See https://www.tensorflow.org/tutorials/using_gpu#allowing_gpu_memory_growth
config = tf.ConfigProto()
config.gpu_options.allow_growth = True

with tf.device('/cpu:0'):
random_image_cpu = tf.random_normal((100, 100, 100, 3))
net_cpu = tf.layers.conv2d(random_image_cpu, 32, 7)
net_cpu = tf.reduce_sum(net_cpu)

with tf.device('/gpu:0'):
random_image_gpu = tf.random_normal((100, 100, 100, 3))
net_gpu = tf.layers.conv2d(random_image_gpu, 32, 7)
net_gpu = tf.reduce_sum(net_gpu)

sess = tf.Session(config=config)

# Test execution once to detect errors early.
try:
sess.run(tf.global_variables_initializer())
except tf.errors.InvalidArgumentError:
print(
'\n\nThis error most likely means that this notebook is not '
'configured to use a GPU. Change this in Notebook Settings via the '
'command palette (cmd/ctrl-shift-P) or the Edit menu.\n\n')
raise

def cpu():
sess.run(net_cpu)

def gpu():
sess.run(net_gpu)

# Runs the op several times.
print('Time (s) to convolve 32x7x7x3 filter over random 100x100x100x3 images '
'(batch x height x width x channel). Sum of ten runs.')
print('CPU (s):')
cpu_time = timeit.timeit('cpu()', number=10, setup="from __main__ import cpu")
print(cpu_time)
print('GPU (s):')
gpu_time = timeit.timeit('gpu()', number=10, setup="from __main__ import gpu")
print(gpu_time)
print('GPU speedup over CPU: {}x'.format(int(cpu_time/gpu_time)))

sess.close()

実行結果

Time (s) to convolve 32x7x7x3 filter over random 100x100x100x3 images (batch x height x width x channel). Sum of ten runs. CPU (s): 9.439509459999996 GPU (s): 0.1996047469999951 GPU speedup over CPU: 47x

GPUはCPUの約47倍のスピード!!こんなの無料で使えるなんてGoogle神過ぎ!

まとめ

Google ColabはGoogleのアカウントがあれば誰でも利用することができる。

利用制限があるけれど学習の用途で使うには十分すぎるほど。

GPUの利用で処理を待つ時間が省けるし、環境構築もほとんど必要ないので機械学習の勉強が捗るりますね💪

むしろiPadでも簡単に実行できそうなので、次回はiPadでGoogle Colabを楽しんでみよう。

コメント