TPUが無料で解禁された!知らないと損をするGoogle Colabの隠し技と基本操作
こんばんは、新米データサイエンティスト(@algon_fx)です。9月は本業がとても忙しく、全くブログの更新ができませんでした。。
本業で久しぶりにGoogle Colabを開いてみると・・・なんと!!!!!なんとですよ!!!マシーン設定の項目に「TPU」とあるではありませんか!
どうやらGoogle ColabでTPUも無料で使えるようになったらしいです!という事で、今日はGoogle Colabの初歩的な使い方から知っておくべき応用技をまとめました。
Google Colabの具体的な使い方がわからないといくつかお問い合わせもいただきましたので、まずは基本的な操作方法を解説します。加えて意外と知られていないGoogle Colabの裏技もまとめました。むしろ知っていないと損をするレベルですので、すでにGoogle Colabを使っている方は是非こちらも読んでみてください!
【基本その1】Google Colabとは
Google Colabとは「無料でブラウザからPythonを使った機械学習環境が使える神ツール」です。本当に便利なツールで、ちょっとしたデータ解析や機械学習モデリングなどに私も使っています。
Google Colabを使うメリットは下記の通りです。
- ブラウザのみでPythonの実行が可能
- 機械学習に必要なライブラリの大半が事前に構築済み
- 無料で使える
- 購入したら80万円相当するNvidiaのGPUが無料で使える
- Google Driveと連携しており使い方も超簡単
もうこのメリットを見ていただければ、Google Colabがいかに神ツールなのかわかるかと思います(笑)
またデメリット(?)とと言うと言い過ぎですが、いくつか制限もあります。
- ファイルのアップローダーが非常に軟弱です
- 1回のセッションで12時間までしか使えません
- 最大50GBのデータしか扱えません
- GPUの割り当てに制限があります
ご覧の通りですが、GoogleColabはあくまで無料のツールです。本格的なデータ解析には向いていません。大量のデータを解析したい場合や、長時間かかる処理を行う場合はGoogle Cloud Platformなど有料のサーバーで環境構築が必要です。
機械学習を始めたばかりの初心者の多くが環境構築で躓きます。機械学習では高度計算処理を行うNumpyやデータフレームを扱うPandas、データの可視化のMatplotlibなどなど・・非常に多くのライブラリ/フレームワークを追加で構築しなてくは行けません。
なんとGoogle Colabでは・・機械学習で使われるメジャーなライブラリが事前にインストールされています。つまり、煩わしい環境構築を行わずにデータ解析が行えます。
また、無料にも関わらずGPUが使えるのも非常に大きなメリットです。ただし、GPUの使用には注意点がいくつかあるので、これは後ほど記述します。
【基本その2】ノートブック立ち上げと設定
では実際に使ってみましょう。まずは下記のリンクへアクセスして下さい。
Google ColabでPython3の新規ノートブックを作成
Googleへログインしていない方はログインが必要です。ログインを行うと、下記のように新規のノートブックが作成されます。
これで立ち上げ完了です(笑)!画面左上の「Untitled1.ipynb」をクリックするとノートブックの名前の変更が可能です。
Google Colabには2種類のセルがあります。「コードセル」はPythonのコードを実行するセル、「テキストセル」はコードの説明や文章などを記載するセルです。追加や移動などもメニューから可能です。
続いてライブラリをいくつか読み込んでPythonのコードを実行してみましょう。最初のコードセルへ下記のコードを入力して下さい。
1 2 3 4 5 6 7 8 |
# ライブラリのインポート import numpy as np import pandas as pd print(np.__version__) print(pd.__version__) |
入力が完了したらSHIFT + ENTERでコードの実行を行なって下さい。下記のようにNumpyとPandasのバージョンが出力されるはずです。
本来であればNumpyもPandasもインストールをして環境構築を行う必要があります。Google Colabではすでに構築されているため、すぐに使うことが可能です。便利ですね。
続いてGoogle Colabのメニューから「ファイル」を選んで、「ドライブで探す」をクリックして見ましょう。前述しましたがGoogle Colabのノートブックファイルは全てGoogle Drive上で管理されます。
ノートブックを作ってデータ解析やモデリングを行い保存までオンラインで管理できるのも便利な要素です。当然、Google Drive内ですのでチーム内でノートブックの共有も可能です。
【基本その3】ファイルの取り扱い
Google Colabの基本操作その3としてファイルの取り扱いかたについて説明します。こちらは、実際に私のブログ宛にいただいた質問です。
機械学習ではデータセットが最も重要になりますが、当然Google Colabはクラウドですので、それらのデータセットをクラウドへアップロードする必要があります。
少し前までは独自のGoogle Colabのライブラリを使ってアップロードをする必要がありましたが、ここ最近、ブラウザから簡単にアップロードできる新機能が追加されました。やって見ましょう。
メニューの「表示」から「目次」を選んでクリックして下さい。Google Colabの画面左に目次が表示されます。目次の中から「ファイル」のタブを選びましょう。このページでファイル管理が可能です。
アップロードをクリックするとブラウザのファイルアップローダーが開きます。データセットのファイルを選んでアップロードして見て下さい。
ご覧の通り「usd_jpy_api.csv」がGoogle Colabへアップロードされました。では、このCSVファイルをPandasを使って読み込んで見ましょう。(参考:こちらのCSVファイルはusd_jpy_api.csvでダウンロード可能です)
1 2 3 4 5 |
# CSVファイルの読み込み df = pd.read_csv("./usd_jpy_api.csv") df.head() |
1 2 3 4 5 6 7 8 9 |
-- 出力 time close open high low volume 0 2016/08/19 06:00:00 100.256 99.919 100.471 99.887 30965 1 2016/08/22 06:00:00 100.335 100.832 100.944 100.221 32920 2 2016/08/23 06:00:00 100.253 100.339 100.405 99.950 26069 3 2016/08/24 06:00:00 100.460 100.270 100.619 100.104 22340 4 2016/08/25 06:00:00 100.546 100.464 100.627 100.314 17224 |
ご覧の通りファイルがGoogle Coalb上で読み込まれているのが確認できます。Google Colabのデメリット(?)と言うと少し言い過ぎですが、Google Colabは最大で50GBまでしか使えませんので注意が必要です。
【基本その4】ライブラリの管理
Google Colabでは機械学習で必要な多くのライブラリが事前に用意されていますが、個別に自分でインストールする必要があるライブラリも存在します。
例えば機械学習FXトレードをやるのであれば、テクニカル指標を簡単に算出してくれる「Ta-lib」と言うライブラリが非常に便利です。(参照:Pythonでテクニカル指標を算出できるライブラリ「Ta-Lib」。インストール方法や便利な機能のまとめ。)
こちらのライブラリは残念ながらGoogle Colabに入っていません。個別にインストールしてみましょう。
Google Colabのコードセルに下記のコードを入力して実行して下さい。少し時間はかかりますが、完了すると「Successfully installed Ta-Lib-0.4.17」と出力の最終行に表示されます。
1 2 3 4 5 6 7 8 9 10 11 |
!wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz !tar -xzvf ta-lib-0.4.0-src.tar.gz %cd ta-lib !./configure --prefix=/usr !make !make install !pip install Ta-Lib |
同様の要領でGoogle Colabに追加で必要なライブラリはインストールすることが可能です。
次にライブラリのバージョンの管理を行いましょう。ライブラリによっては、バージョンのズレで挙動がことなるのも多くあります。
例えば私のローカル環境ではTensorFlow1.7.0を使っています。しかしGoogle Colabでは最新の1.11.0がインストールされています。ですので、意図的にTensorFlowのバージョンをダウングレードしたいわけです。
まずはGoogle Colabにインストールされている現状のTensorFlowのバージョンを確認して見ましょう。
1 2 3 4 5 |
# TensorFlowのバージョン確認 import tensorflow as tf print(tf.__version__) |
1 2 3 4 |
-- 出力 1.11.0-rc2 |
では、私のローカルの環境と同様の1.7.0へグレードダウンをしましょう。下記のコードを実行して下さい。
1 2 3 4 |
# TensorFlow 1.7.0へダウングレード !pip install tensorflow==1.7.0 |
完了まで数分かかりますが、最後に「Successfully installed bleach-1.5.0 html5lib-0.9999999 tensorboard-1.7.0 tensorflow-1.7.0」と表示されれば完了です。
このように適宜、状況に応じてライブラリを上手に管理することでGoogle Colabの利便性が飛躍的に高まります。(余計なエラーなどを回避できます)
【応用その1】GPUの割り当てをチェック
さて、ここからはより応用的な技を紹介します。Google ColabではGPUが無料で使えると書きました。これは嘘も紛れもない事実です。
ただし、一つ注意しなくてはいけません。GPUを設定したとしても100%の力を引き出せるわけではありません!Google Colabで使えるGPUですが、NvidiaのTesla k80とい機種です。
普通に購入すると80万円近くします。Google Cloud Platformで同等のGPUをクラウドで使おうとすると、一時間あたりで数百円したはずです。ですが、Google Colabでは無料なんです!
無料でGPUが使えるなんて最高だ!って思いますが…GPUも当然、他のユーザーと共有して使うわけです。私が確認をしている中でGoogle Colabには2種類のGPU割り当設定があります。
一つがGPUの95%のメモリが使える上位設定。二つ目はなんとたったの5%しかメモリが割り当てられない下位設定。Google Colabではインスタンスへ接続した際に、ランダムでこの割り当てが決められています。
実際にGoogle Colabを愛用していると、GPU使っているはずなのに・・自分のCPUマシンより処理遅くない?って思ったことありませんか。なんかおかしいぞと思って調べたら、この驚愕の割り当て設定に気づきました。
ですので、私はGoogle Colabを使う時は接続したインスタンスのGPU割り当てを一番最初に確認しています。上位割り当であれば、ラッキー。その方法は非常に簡単で、下記のコードをGoogle Colabにのコードセルで実行すれば確認可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Google ColabのGPU割り当て設定を確認する !ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi !pip install gputil !pip install psutil !pip install humanize import psutil import humanize import os import GPUtil as GPU GPUs = GPU.getGPUs() # XXX: only one GPU on Colab and isn’t guaranteed gpu = GPUs[0] def printm(): process = psutil.Process(os.getpid()) print("Gen RAM Free: " + humanize.naturalsize( psutil.virtual_memory().available ), " | Proc size: " + humanize.naturalsize( process.memory_info().rss)) print("GPU RAM Free: {0:.0f}MB | Used: {1:.0f}MB | Util {2:3.0f}% | Total {3:.0f}MB".format(gpu.memoryFree, gpu.memoryUsed, gpu.memoryUtil*100, gpu.memoryTotal)) printm() |
必要なライブラリをインストールするので、実行まで時間がかかります。完了すると、最後の行に下記のような出力が確認できるかと思います。
1 2 3 4 5 6 7 |
-- 出力 Installing collected packages: humanize Successfully installed humanize-0.5.1 Gen RAM Free: 12.7 GB | Proc size: 137.8 MB GPU RAM Free: 11439MB | Used: 0MB | Util 0% | Total 11439MB |
最後の二行が重要です。GPU RMA Freeとありますが、こちらがGPUのメモリ割り当てです。11439MBとありますので、つまりTesla k80の12GBのほとんどのメモリが使えているという訳です。
では、試しに一度Google Colabの接続を閉じて、改めてメモリを確認してみます。下記が再接続した2回目の出力です。
1 2 3 4 5 |
-- 2回目の接続の出力 Gen RAM Free: 12.7 GB | Proc size: 137.9 MB GPU RAM Free: 11439MB | Used: 0MB | Util 0% | Total 11439MB |
あれ?また上位割り当て設定でした(笑)Google Colabが出た当初は、GPUの上位割り当て設定に当たる確率が非常に高かったのですが、最近は感覚として10回に1回くらいな気がします。
また、これは私の憶測ですが、GoogleColabのGPUの使用頻度も関係があるとみています。公式にはランダムで割り当てていると言われていますが、Google Colabを頻繁に使うと上位割り当てになる確率が圧倒的に下がります。
【応用その2】Google Driveをマウントしよう
続いてのGoogle Colabの応用技はGoogle DriveをGoogle Colabへマウントする方法です。これも非常に便利です。覚えておいて絶対に損はありません。
Google Colabを使っていてこんな時ありませんか?
使用制限が12時間なので、その度に大容量のデータセットをGoogle Colabへアップロードするのが煩わしい。
そもそもGoogle Colabのアップローダーが貧弱なおかげで、アップロードが完了しない。
一つ一つのデータは小さいけど、5000個のファイルがあってアップロード操作するだけで時間がかかる。
こんな問題を解決するのがGoogle Driveのマウントです。読んでその通りなんですが、Google ColabのサーバーへGoogle Driveをマウントすることにより、Google Driveで保存しているあなたの全てのデータがColab上で簡単に使えるようになります。
Google Driveはストレージサービスなので、大規模データであろうと、100万ファイルあろうと、非常に高性能は仕組みで容易に扱うことが可能です。さらに、それをマウントすることでGoogle Colabの利便性が100倍以上アップします。
では、やってみましょう。まずは必要なパッケージをGoogle Colabにインストールします。
1 2 3 4 5 6 7 |
# 必要なパッケージのインストール !apt-get install -y -qq software-properties-common python-software-properties module-init-tools !add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null !apt-get update -qq 2>&1 > /dev/null !apt-get -y install -qq google-drive-ocamlfuse fuse |
もし上記のパッケージ構築のコードで下記のエラーが出た場合は、すでにGoogle Driveへ権限を付与していることになります。無視して大丈夫です。
1 2 3 4 5 |
-- 出力 Warning: apt-key output should not be parsed (stdout is not a terminal) E: Unable to locate package google-drive-ocamlfuse |
次はGoogle ColabがGoogle Driveへアクセス可能とするように権限付与を行います。下記のコードを実行するとトークンが発行されます。
1 2 3 4 5 6 7 |
# 認証許可を実行 / トークンの発行 from google.colab import auth auth.authenticate_user() from oauth2client.client import GoogleCredentials creds = GoogleCredentials.get_application_default() |
1 2 3 4 5 6 7 8 |
-- 出力 Go to the following link in your browser: https://accounts.google.com/o/oauth2/.............. Enter verification code: |
上記の出力のようにGoogle Authのリンクコードが出力されます。クリックすると下記のようにトークンが発行されます。トークンの文字列をコピーしてGoogle Colabのページへ戻りましょう。
トークンの文字列をVerification codeへ入力して権限付与完了です!これでGoogle ColabがあなたのGoogle Driveへアクセスすることが可能になりました。最後にGoogle Driveのマウントを行いましょう。
1 2 3 4 5 6 |
# google driveをマウント !mkdir -p drive !google-drive-ocamlfuse drive !ls drive |
1 2 3 4 |
-- 出力 (あなたのGoogle Driveのコンテンツ) |
上のコードでGoogle ColabへDriveというディレクトリを作り、そこへGoogle Driveをマウントした形になります。出力としてあなたのGoogle Dirveに格納されているコンテンツが出てくれば完了です!
【応用その3】なんとTPUが無料で使えるようになった
まだ一部のユーザーのみ解放のベータ版のようですが・・・なんとGoogle ColabでTPUが無料で使えるようになりました!!
海外のコミュニティでも、非常にホットなニュースです!なんと・・私もTPUを使えるベータユーザーに選ばれていました!
今までには確かになかった「TPU」の文字がそこに・・。本当にGoogle Colabは神サービスですね!ちなみに、海外のユーザーの間ではTPUは永続的に使えるというよりも、とりあえず期間限定で試しているそうです。
なので・・いつかTPUがここから消えているかもしれませんのでご了承ください。
GPUはよくわかるけど、そもそもTPUって何よって人多いですよね。TPUとは「Tensor Processing Unit」の略で、Googleが自社開発した機械学習に特化したプロセッサです。
元々はGoogle Cloud Platformで有料でしか使えませんでした。日本の料金は分かりませんが、米国のインスタンスで確か一時間6.5ドル程度だった記憶です。つまり10時間の計算処理を行うのに、約1万円もする超高級なプロセッサなわけです。
実際に私が使うのはGoogle Colabが初めてです・・ドキドキ!
TPUを使うにはTPUのアドレスを指定する必要があります。下記のコードをまずは実行してあげましょう。
1 2 3 4 5 6 7 8 9 |
# ライブラリのインポート import tensorflow as tf import time import os # TensorFlowのTPU設定 TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR'] |
Gpuとは違い、TPUは明示的にTPUワーカーへ接続してあげる必要があります。
TPUの詳しい使い方は今度、時間があるときにまとめます!ひとまず、MNISTあたりのTPU事例を確認しながら、使ってみます!
まとめ
なんともTPUまでも無料で使えるとは、本当にGoogle Colabは神サービスですね。海外のコミュニティをみていると、まだTPUが解放されているユーザーはごく一部のようです。
日本でGoogle ColabでTPUが使えるようになった方がいれば、是非Twitterで教えてください!
他の機械学習手法でのFX予想チュートリアルもまとめています。興味がある方は、ぜひこちらのチュートリアルも挑戦してみてください!
・LSTMでFX予想する方法
・ディープラーニングでFX予想する方法
・ロジスティック回帰でFX予想する方法
ブログ読んでいただきありがとうございます!Twitterでも色々と発信しているので、是非フォローお願いします!
ディスカッション
コメント一覧
まだ、コメントがありません