Pythonの開発環境はGoogle Colabで決まり

よこのじ(@yokonoji_work)です。

「Pythonの開発環境をどうやって構築するか?」この答えが出ましたので、内容をまとめておきたいと思います。環境構築で迷っている方は参考にしてください。

PyCharm?Jupyter Notebook?

Pythonの開発環境としてまず候補にあがるのは、PyCharmとJupyterかと思います。実際、私は最初のPython開発環境の構築はPyCharmで行いました。

PyCharmは素晴らしい統合開発環境(IDE)だと思います。

  • 自動コードリファクタリング
  • コード補完・検査(PEP8準拠など)
  • 仮想環境での動作
  • 豊富なデバッグ機能
  • バージョン管理システムをサポート

しかし、このような多彩な機能を利用できる分、初心者にとっては複雑な設定を行う必要もあり、設定エラーなどに悩まされることもありました。

そこで、対話式の記述で手軽に利用できるJupyter Notebookに移行しました。

JupyterはAnacondaをインストールするとその中に含まれてるため、様々なライブラリがインストールされた状態ですぐに使うことができます。ライブラリの有無で苦労させられることはほとんどありません(PyCharmも同様ですが)。さらに、ブラウザで動作するので、情報収集しながらコードを書くのも楽々です。

思い付いたアイデアを手軽に実行できるJupyterですが、機械学習やWebスクレイピングなどをやることもできますので、私の利用状況には適したものでした。

Google Colab

Google Colabは、Jupyterの上位互換といっても良いものかと思います。Jupyterでも開発環境としては十分ですが、私はGoogle Colabの利用をおすすめしたいです。

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

Google Colabとは?

Google Colabは、機械学習の教育・研究のために利用できる無料のサービスです。

オープンソースであるJupyterベースで作られていますので、Jupyter同様にブラウザで使えます。もちろんJupyterとファイルの互換性もあります。

対話式で記述できるところまでJupyterと同じで、Jupyterから移行もすぐに慣れるはずです。

google-colab-813-colab1

それでは、Google ColabとJupyterの違いを中心に、Google Colabの特徴を見てみます。

  • インストール不要でURLにアクセスするだけで利用可能
  • インターフェースが日本語
  • 作成ファイルはGoogleドライブに保存される
    (.ipynb、.pyでのダウンロードも可能)
  • 機械学習向けのため、インストトール済みライブラリが少ない
    (あとから追加でインストールできます)
  • GitHUB/Gistとの簡単な連携
  • クラウド上の高性能なCPU,GPU,TPUでプログラムを実行できる

Googleらしくクラウドで利用できるサービスになっています。ネットにつながったパソコンがあれば、どこにいても開発できます。いつでもどこでも機械学習。すごいサービスです。

高性能なCPU,GPU,TPU

Google Colabの最大の特徴は「クラウド上の高性能なCPU,GPU,TPUでプログラムを実行できる」点だと思います。

メニューのランタイム > ランタイムのタイプを変更 より、次のような設定画面を開くことができます。

google-colab-813-runtime

Noneの場合はクラウド上のCPU、その他に高速処理が可能なGPU、TPUを選択することもできます。これらのハードウェアでプログラムを実行できます。

CPU:Intel(R) Xeon(R) CPU @ 2.30GHz

確認コマンド
!cat /proc/cpuinfo

 

GPU:NVIDIA Tesla K80
これは80万円ほどのハードウェアみたいですね。

確認コマンド
from tensorflow.python.client import device_lib
device_lib.list_local_devices()

 

TPU:Tensor Processing Unitのことで、Googleが開発した機械学習に特化したプロセッサです。

これら3つのハードウェアの性能を比較すると、CPUのパフォーマンスを1として、GPUは2.9、TPUは83で圧倒的なパフォーマンスです。

google-colab-813-tpuv1

しかし、バッチサイズ(学習データの数)が小さいと、TPUはGPUより遅いようです。機能特化したプロセッサですから、状況に合わせて使い分ける必要がありそうです。

google-colab-813-batch

Google ColaboratoryのTPUを試してみる

 

なお、GPUを利用する際にクラウド上でリソースの割り当てが行われますが、必ずしもGPUのすべてを利用できるわけではないようです。どのくらいのリソースが割り当てられているか、次のコマンドで確認できます。

# 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()

Gen RAM Free: 13.0 GB | Proc size: 139.5 MB
GPU RAM Free: 11441MB | Used: 0MB | Util 0% | Total 11441MB

このような結果が返ってきます。GPU「NVIDIA Tesla K80」は12GBのメモリを持っていますので、この場合はほとんどの性能を引き出せることになります。

TPUが無料で解禁された!知らないと損をするGoogle Colabの隠し技と基本操作

Google Colabの制限

Google Colabは無料サービスということもあり、利用には制限があります。

  • ノートブックのセッション切れが90分続くとインスタンスがシャットダウン
  • 新しいインスタンスを起動してから12時間経過するとインスタンスがシャットダウン

インスタンスがシャットダウンされる=クラウド上のコンピュータとの接続が切れる

 

何も実行されていない、または実行中でもブラウザでタブが開かれていない状態で90分経過すると、インスタンスがシャットダウンされるので、注意が必要です。

パソコンをスリープさせずにノートブックを表示させておいたり、スクリプト処理やブラウザのアドオンを使って、自動で定期的にブラウザ操作を入れて回避する方法があります。

Google Colaboratoryの90分セッション切れ対策【自動接続】

google-colab-813-90

12時間ルールについては、回避できません。しかしながら、学習の経過をGoogleドライブに保存しておき、次の12時間でその続きから処理を行うことは可能なようです。私の利用状況では12時間ルールは気にする必要がないですが、その時が来たら対応してみたいと思います。

経過時間は、次のコマンドで確認できます。

!cat /proc/uptime | awk '{print $1 /60 /60 /24 "days (" $1 "sec)"}'

google-colab-813-12

【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory

インストール済みのライブラリ

初期状態でインストールされているライブラリを確認します。

!pip list

機械学習のためのメジャーなライブラリは揃っているようです。

これは、Google ColabとGistを連携させて表示させています。Google Colabで扱っているソースコードのコピーをGistとして保存するものですが、メニューのファイルから保存するだけの手軽さが良いですね。

ライブラリの追加インストール

インストール済みのライブラリ以外のライブラリを使いたいこともあるはずです。

例えば、「素人がPythonでWebスクレイピングを実装する」シリーズでは、RequestsとBeautiful Soup、パーサーとしてlxmlを使用しました。このうちlxmlは初期状態ではインストールされていませんので、Google Colabで動かすときはライブラリをインストールする必要があります。

追加したいライブラリがあるときは、Google Colabのセルでインストールコマンドを実行します。

!pip install lxml

インストールしたあとは、メニューのランタイムよりランタイムの再起動を実施してください。再起動しないと、インストールしたライブラリが反映されません。

必要なライブラリをインストールすれば、機械学習に限らず様々な用途でGoogle Colabを利用できますね。ただし、Google Colabは機械学習のためのサービスであるということはお忘れなく。

 

Pythonは仕事だけでなく、日常の自動化などにも使えます