Google Colaboratoryを使ってみた
今年はじめに以下のようなニュースがでていました。気にはなっていたのですが試す時間がなかったので試してみました。
Google Colaboratory
が正しいのかGoogle Colab
が正しいのか…
Ummmm, Colab now lets you use GPUs to accelerate your notebooks? In the cloud? For free? 😍🤓😍🤓😍🤓 Step-by-step how to: https://t.co/CENGVweaTy
— Rachael Tatman (@rctatman) 2018年1月19日
控えめに言ってもすごすぎ。その他のプラットフォームを殺すつもりできてるのかと思いました。
以下に説明というか、FAQページのリンクを貼っておきます。
簡単に説明すると、ChromeなどのブラウザからJupyter Notebook環境を使えて、更にGPUリソースが使えるという優れものでした。 もう、初学者はanacondaもインストールせずこれ一択でいいと思います。
このエントリーは
を参考に作成しています。
とりあえず使ってみる
とりあえず、使用してみましょう。インストールも何もいりません。Googleアカウントだけは必要でなので事前にログオンはしておきましょう。 以下のURLにアクセスすれば準備OKです。
アクセスすると以下のような画面になると思います。
おめでとうございます!これでJupyter Notebook環境が使えることになりました!インストールばっかりしている自分にとってはこれはあまりにも衝撃的ですが、目的はインストールすることではないはずのでこれが理想的な姿だと思います。
ダイアログの下のほうにある【ノートブックの新規作成】をクリックします。
すると、プルダウンで【PYTHON2の新しいノートブック】と【PYTHON3の新しいノートブック】が表示されます。もうPythonはVersion3でやっていきましょう!(今年の目標)
【PYTHON3の新しいノートブック】を選びます。これだけでほぼ準備完了です。あとはpythonのコードを打ち込っていけばいいのです。 コードは画面内の入力ボックスに記入します。環境としてはJupyter NotebookなのでREPLの様に改行をしても実行はされません。
打ち込んだコードを実行するには【Shift + Enter】または左側の再生ボタン(実行ボタン?)になります。まずは、Hello Worldを画面内に表示してみます。コードを行のところに
print('Hello World')
と入力し、実行(【Shift + Enter】)してみます。以下の様に出力されます。 初回の実行にはインスタンスへの接続が行われるため時間はかかりますが、それ以降ではサクサクと実行されるのでご安心を。
実行中は下記のように表示が読み込み中のような表示になります。
【実行結果】
Hello World
実行は成功です。
続いてもう少しコードを書いてみます。今日の日付を出力するのですが、datetimeモジュールをimport
をしている点が先程と違います。
import datetime today = datetime.date.today() print(today)
これを実行すると以下の様になります。
通常のpythonの開発も問題なさそうですね。OSモジュールなども正常にインストールできていました。
あとはノートブックを保存してみましょう。作成時には【Untitled**.ipynb】というような名前でノートブックが作成されますのでブラウザの左上の名前の部分を編集します。
今回は【sample.ipynb】という名前に変更してみました。入力ボックスに名前を入れれば作業は完了するのですが、保存されているのはgoogle colab
の環境化になります。実際にはGoogleDriveに保存しておくのが普通だと思いますので、そちらに保存します。
メニューバーから【ファイル】→【保存】を選択します。
すると自分のGoogleDriveのマイドライブに【Colab Notebooks】というフォルダが作成(すでにあれば再作成はされません)され先程つけた名前のipynbファイルが保存されます。これを読み込めば同じ状態から作業を始めることができるようになります。
接続するインスタンスを調べてみる
先程、pythonの初回実行時にはインスタンスに接続することでpythonのプログラムが実行されるという話をしました。ではこのインスタンスに直接アクセスすることはできるのでしょうか。コマンド行にの先頭に!
をいれてshコマンドを入れると実行することができるようです。
いろいろネットを調べてみるとこのインスタンス強力すぎます。
*1 90分間なにもしないとインスタンスはシャットダウンします。また、最大でも12時間しか使用できません。
上記のK80を無料で使えるのはすごい!(間違ってる?)ただ、通常に起動した場合にはGPUはOFFになっています。既に作成したnodebookでGPUをONにするには以下の作業が必要になります。
メニューバーから【ランタイム】→【ランタイムのタイプを変更】を選択します。
すると以下のようなダイアログが表示されますので、【ハードウエアアクセラレータ】のプルダウン【None】から【GPU】に変更します。念のため【このノートブックを保持する際にコードセルの出力を除外する】にチェックをを付けておきます。設定が終わったら【保存】ボタンをクリックします。
ページ再読み込みのダイアログが出ますので、ここも【再読み込み】ボタンをクリックします。
これでGPUが有効になります。
見た目にはほとんど変化はありませんが、先ほど実行したコードの実行結果が消えています。
ではGPUがONになっているかを確認してみます。
確認方法はtensorflow
経由となりますが、以下のようなコードで確認できます。
import tensorflow as tf tf.test.gpu_device_name()
【実行結果:GPU設定あり】
'/device:GPU:0'
問題なさそうです。
ちなみにGPUがNoneの場合には以下のような結果になります。
【実行結果:GPU設定なし】
''
あとはpythonのバージョンなどを調べてみましょう。最初に言っていたインスタンスのshコマンドを実行する場合には冒頭に!
をつけて実行を行います。
pythonのバージョンを調べるときにはpython --version
と打込むので、今回は以下のように入力します。
!python --version
【実行結果】
Python 3.6.3
ということで、更にインスタンスのハードウエアスペックを見てみます。
!cat /proc/cpuinfo
【実行結果】
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU @ 2.30GHz stepping : 0 microcode : 0x1 cpu MHz : 2300.000 cache size : 46080 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms xsaveopt bugs : bogomips : 4600.00 clflush size : 64 cache_alignment : 64 address sizes : 46 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU @ 2.30GHz stepping : 0 microcode : 0x1 cpu MHz : 2300.000 cache size : 46080 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 1 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms xsaveopt bugs : bogomips : 4600.00 clflush size : 64 cache_alignment : 64 address sizes : 46 bits physical, 48 bits virtual power management:
CPUがXeonなのか…
それではGPUの情報は…
!cat /proc/driver/nvidia/gpus/0000:00:04.0/information
【実行結果】
Model: Tesla K80 IRQ: 33 GPU UUID: GPU-9743217b-7464-7627-8efc-0f60f5217deb Video BIOS: 80.21.25.00.01 Bus Type: PCI DMA Size: 40 bits DMA Mask: 0xffffffffff Bus Location: 0000:00:04.0 Device Minor: 0
情報通りのTesla K80
すげー!
では、pythonのパッケージpip
経由で見てみます。
!pip freeze
【実行結果】
absl-py==0.1.11 astor==0.6.2 beautifulsoup4==4.6.0 bleach==1.5.0 cachetools==2.0.1 certifi==2018.1.18 chardet==3.0.4 crcmod==1.7 cycler==0.10.0 decorator==4.2.1 dill==0.2.7.1 entrypoints==0.2.3 future==0.15.2 futures==3.0.5 gapic-google-cloud-datastore-v1==0.15.3 gapic-google-cloud-error-reporting-v1beta1==0.15.3 gapic-google-cloud-logging-v2==0.91.3 gast==0.2.0 google-api-core==0.1.4 google-api-python-client==1.6.5 google-auth==1.3.0 google-auth-httplib2==0.0.3 google-auth-oauthlib==0.2.0 google-cloud==0.32.0 google-cloud-bigquery==0.30.0 google-cloud-bigquery-datatransfer==0.1.1 google-cloud-bigtable==0.28.1 google-cloud-container==0.1.1 google-cloud-core==0.28.1 google-cloud-datastore==1.4.0 google-cloud-dns==0.28.0 google-cloud-error-reporting==0.28.0 google-cloud-firestore==0.28.0 google-cloud-language==1.0.1 google-cloud-logging==1.4.0 google-cloud-monitoring==0.28.1 google-cloud-pubsub==0.30.1 google-cloud-resource-manager==0.28.1 google-cloud-runtimeconfig==0.28.1 google-cloud-spanner==0.29.0 google-cloud-speech==0.30.0 google-cloud-storage==1.6.0 google-cloud-trace==0.17.0 google-cloud-translate==1.3.1 google-cloud-videointelligence==1.0.1 google-cloud-vision==0.29.0 google-colab==0.0.1a1 google-gax==0.15.16 google-resumable-media==0.3.1 googleapis-common-protos==1.5.3 grpc-google-iam-v1==0.11.4 grpcio==1.10.0 h5py==2.7.1 html5lib==0.9999999 httplib2==0.10.3 idna==2.6 ipykernel==4.6.1 ipython==5.5.0 ipython-genutils==0.2.0 Jinja2==2.8 jsonschema==2.5.1 jupyter-client==5.2.3 jupyter-core==4.4.0 Keras==2.1.5 Markdown==2.6.11 MarkupSafe==1.0 matplotlib==2.1.2 mistune==0.8.3 mpmath==1.0.0 nbconvert==5.3.1 nbformat==4.4.0 networkx==2.1 nltk==3.2.1 notebook==5.2.2 numpy==1.14.2 oauth2client==4.1.2 oauthlib==2.0.6 olefile==0.45.1 opencv-python==3.4.0.12 pandas==0.22.0 pandas-gbq==0.3.1 pandocfilters==1.3.0 patsy==0.5.0 pexpect==4.4.0 pickleshare==0.7.4 Pillow==4.0.0 plotly==1.12.12 ply==3.8 portpicker==1.2.0 prompt-toolkit==1.0.15 proto-google-cloud-datastore-v1==0.90.4 proto-google-cloud-error-reporting-v1beta1==0.15.3 proto-google-cloud-logging-v2==0.91.3 protobuf==3.5.2 psutil==4.3.1 ptyprocess==0.5.2 pyasn1==0.4.2 pyasn1-modules==0.2.1 Pygments==2.1.3 pyparsing==2.2.0 python-dateutil==2.5.3 pytz==2016.7 PyWavelets==0.5.2 PyYAML==3.11 pyzmq==16.0.4 requests==2.18.4 requests-oauthlib==0.8.0 rsa==3.4.2 scikit-image==0.13.1 scikit-learn==0.19.1 scipy==0.19.1 seaborn==0.7.1 simplegeneric==0.8.1 six==1.11.0 statsmodels==0.8.0 sympy==1.1.1 tensorboard==1.6.0 tensorflow==1.6.0 termcolor==1.1.0 terminado==0.8.1 testpath==0.3.1 tornado==4.5.3 traitlets==4.3.2 uritemplate==3.0.0 urllib3==1.22 wcwidth==0.1.7 webencodings==0.5.1 Werkzeug==0.14.1 xgboost==0.7.post3
おお!
ネットの情報ではkeras
はpip
で別途インストールという情報でしたが、既にデフォルト状態でインストールされている用です。最高!
使いそうなモジュールのバージョンを実行してみました。(2018/03/19現在)
OpenCVは3系、tensorflowも1.6と新しく、kerasも2系と素晴らしい!
念のため、TensorflowでHello Worldもしてみました!
問題ないようです。
おわりに
今後のAI関連の環境としてはこちらが定番になりそうです。環境などの構築にかける時間も不要なので、本来の目的へストレートに進めればいいのだと思います。
後は画像処理などを考えるとGoogleDriveとの連携などがわかるといいのかもしれません。
とはいえ、これまで機種依存などがあり勉強会などでもかなり苦労していた部分のほとんどが解消されるかなと思います。
【関連エントリー】