Google Colabの活用ガイド|KaggleとColabでコードを共有する方法
Kaggleに参加する際、自前のGPUマシンがない場合にGoogle Colabを活用する方が多いのではないでしょうか。Google Colabは無料でGPUを利用できるため、データ分析や機械学習に非常に便利です。この記事では、Kaggle NotebookとGoogle Colabの両方で動作するノートブックを作成し、コードを効率よく共有する方法を詳しく紹介します。
はじめに
これまでのColabの変化などを書いていますので、不必要な方ははじめには読み飛ばしてください。
2022年くらいまでのGoogle Colab
Kaggleのコンペには多数参加していますが、自前の機械学習マシンは持っていません。その代わりに、Google Colaboratoryを利用しています。
以前は、Colab Proを月額1,000円で利用することで、制限なく使用することができました。これは学習用のPCを持っていない私にとって、Kaggleで競う上で大きな利点でした。
しかし、2022年9月ごろから(正確な時期は記憶が曖昧ですが)、システムが変更され、Colab Proは使い放題ではなくなりました。これにより、学習用PCを持っていない場合、Kaggleでの戦いがかなり厳しくなりました。
2022年末からGoogle Colabは利用コストが増加
変更により、Colab Proは100コンピューティングユニットまでに制限されるようになりました。コンピューティングユニットは、通常の言葉ではポイントで、標準GPU構成で1時間に1.96ポイント消費するというようなものです。つまり、合計で100ポイント分まで利用できることになります。
100ポイントを時間に換算すると、標準のGPU構成では約50時間です(ただし、A100を使用する場合、1時間あたりのポイント消費量が非常に高いためさらに短くなります)。
Kaggleのコンペでは、最終月などは1ヶ月ほぼフルにGPUを稼働させることがあり、50時間では不十分です。
この制限が設けられた理由については推測ですが、2022年の夏ごろからStable Diffusionが流行しました。これをColab上で動かすユーザーが急増し、リソースが圧迫されたため、制限が厳しくなった可能性があります。
利用者が増えれば、いつかは制限がかかるだろうと予想していましたが、このような極端な制限が設けられるとは予想していませんでした。
最近、LLMが流行っていますが、これでまた制限かかるかというと、LLMは自分で動かそうという人が少ないのでLLMの流行による影響は少なさそうと思っています。
1000円で1ヶ月使い放題が1000円で約2日になったのはかなりきつかったです。
それでも低価格であることには変わりありませんので、これからもColabを使いづつけると思います。とりあえず、これまで活用していなかったkaggleのGPU枠(週30時間)もうまく活用しながら、様子を見ていきたいと思っています。
Colabの課金体制が変更になった後も、いくつかのkaggleコンペでColab Pro, Pro+を実際に利用しました。感想としては、ディープラーニング系で学習が必要なコンペの場合は、最初からPro+に契約した方が良いということです。また、テーブル系のコンペの場合、メモリ容量(ハイメモリ)を使うためにColab Proを使ったりしますが、こちらはColab Proの1000円の枠で十分でした(1時間あたりのコンピューティングユニットの消費が少ないため)。
実際に使った感じとしては、Colab Pro, Colab Pro+をうまく活用すればkaggleに活用できるということです。
以下、Google Colabの紹介と、kaggleとGoogle Colabでノートブックを共用するためのコードの書き方について解説したいと思います。
Google Colaboratoryとは
Google Colaboratoryとは
Google Colaboratoryは、Googleが機械学習の教育及び研究用に提供しているインストール不要でPythonや機械学習・深層学習の環境を整えることが出来る無料のサービスです。Jupyter notebookのような環境と言えばわかりやすいかもしれません。
あらかじめtensorflowやpytorchなどのライブラリもインストールされており、立ち上げて即コード作成・実行ができるという優れものです。
また、Googleドライブもマウントできます。
Google Colab環境では一定の時間が経過すると環境と一緒にファイルも消えてしまいますが、学習結果などをGoogleドライブに保存するようにしておけば、処理結果を残すことができます(マウントしたGoogleドライブは、遅いとか色々問題はありますが)。
Kaggle目的で利用する場合、KaggleからColab環境へデータセットをダウンロードする速度が非常に速いので、ダウンロードもストレスがありません(毎回ダウンロードすることになるので、制限時間がついて気になりだすかもしれませんが)。
とりあえず、環境設定済みの環境がすぐに使えること、何か問題が発生したら初期状態に簡単に戻せることが大きなメリットです。
ローカルPCのpython環境を壊してしまって、直すの時間がかかったとかいう経験があると、初期状態に簡単に戻せるありがたさがよくわかります。
無料版Colab
無料版 Google Colaboratory
とりあえず試しに使ってみるのであれば、無料版のColabから始めれば良いと思います。
リンクはこちらです
無料枠でも、メニュの「ランタイム」→「ランタイムのタイプを変更」でハードウェアアクセラレータをGPUにすれば、GPU環境が利用可能です。
無料版のGPU
nvidia-smi
で確認したところ、Tesla T4 (16GB)のGPUが割り当てられるようです。少し古いGPUですが、メモリ16GBあるので、ある程度の学習まで動かすことができます。
無料枠で使う場合も問題点は、わりとすぐにGPUの割り当て制限になることです。
ちょっと遊んでいるとすぐ制限されます
今回、この記事のために、いろいろ試していたのですが、制限でGPUの割り当てが一時的にストップしてしまいました。
時間が経過すればまた割り当てられるようになるのですが、「使える時間が短い」「いつ切断されるかわからない」ということが無料版のデメリットです。
本格的に利用するなら「有料版」をお勧めします。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.105.17 Driver Version: 525.105.17 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |
| N/A 43C P8 9W / 70W | 0MiB / 15360MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
メリット
- 環境設定なしでpython+機械学習の環境が利用できる
- GPU付きの環境が無料で使える
デメリット
- 切れやすい。
- 制限が厳しい(すぐに切断される)
有料版Colab
有料版の利点(メリット)
無料版は、制限が厳しいので、本格的に使おうとすると有料版になります。
有料版はColab Pro, Colab Pro+の2つが用意されています。
まずは、Colab Proでお試ししてみて、がっつり使いたくなったらColab Pro+に移行すればよいと思います。
有料のメニューにはPay As You Goというものもありますが、PayAsYouGoでは、ハイメモリとターミナルが利用できません。
Pro+は、バックグランド実行ができることが魅力です。
また、Pro+はバックグラウンド実行が魅力です。ProではWebページを閉じると実行が中断されてしまいますが(実は、すぐには切断されず、再接続すれば実行が継続されていることがあります)、Pro+は、バックグラウンドで実行させることができるので、ブラウザを閉じてもノートブックの実行を最大24時間継続することができます。
新たにColab Enterpriseが追加されていますが、これは企業向けでGoogle Cloud Platformと連携させた利用が想定されているようです。このプランでは自由は環境構成が可能のようですが、従量課金制であり、企業向けを想定しているので、ここでは説明を割愛します。
参考までに、stable diffusionで少し遊ぶ程度なら、Colab Proでも十分でした。
あと、Colab Pro, Pro+では、「より速いGPU」が使えるとありますが、コンピューティングユニットの消費を考えると活用は厳しいです。
というのも、最も性能の良いA100だと、100コンピューティングユニットで7時間ちょっとしか使えません。
GPUは速くなっても、データセットのダウンロードとかCPUでの前処理などはそこまで速くならないので、消費するユニットに対して処理速度は向上しない印象があります。個人的には、メインは標準GPUで、スポットでV100あたりかなーと思っています。
参考までに、各GPUの1時間あたりの消費コンピューティングユニットを書いておきます。V100あたりがもう少し使いやすい値段になると嬉しいんですけどね。
ハードウェアアクセラレータ | コンピューティングユニット/時間 |
T4 GPU | 1.76 |
V100 GPU | 4.82 |
L4 GPU | 4.82 |
A100 GPU | 11.77 |
※価格は改定されますので、現在の消費ユニット数は利用時に確認してください
また、課金開始と、停止が結構簡単にできるので、コンペに参加して使い出したら課金開始、コンペが終了したら課金停止という使い方ができます。ProからPro+への変更も途中からできますので、使い方の柔軟性は高いです。
Colab Pro+にするとバックグランド実行ができるので、ブラウザを閉じても実行され続けるところが魅力です。長時間ほったらかしで動かしてエラーで終わっている時は結構ショックですが😅
ところで、従量課金になったので、処理終了したら即課金されない状態にしたくなります。ランタイムを終了させる方法は以下にまとめましたので参考にしてください。
なお、Colab Pro/Pro+を使う場合はハイメモリでの利用をお勧めします。理由は以下の記事を参考にしてください。
メリット
- 環境設定なしでpython+機械学習の環境が利用できる
- 最大24時間連続のノートブックの実行が可能
- ハイメモリを利用可能
- バックグランドで動作可能(Pro+のみ)
デメリット
- 費用がかかる
- コンピューティングユニットがなくなると無料版と同等になる
Colab Proを解約した場合、余ったコンピューティングユニットはどうなる?
Google Colab Pro/Pro+を解約した場合、余ったコンピューティングユニットは解約後も使えます。
解約した場合は、次回支払日(契約期間中)まではColab Pro/Pro+とで利用可能です。
下画像は、Colab Pro+を解約した後、更新日を過ぎた後のキャプチャ画像です。「定期購入していません」ということで、Colab Proには契約していない状態になっていますが、131.43のコンピューティングユニットが利用可能となっています。
このように、契約解除後もコンピューティングユニットは残るようです。
ただ、ランタイムのタイプを変更を見ると、ハイメモリがなくなっています。
おそらくですが、Colab Pro/Pro+に契約していない場合は、PayAsYouGo相当の契約となり、選択できるランタイムからハイメモリは削除されるようです。
ただ、A100などの高性能GPUは引き続き利用できます。T4は、無料Colabでも使えますが、コンピューティングユニットがある間はGPUの使用制限での割り当てストップは発生しないはずです。また、高性能GPUを使えるので、V100, A100を利用するのに使うのも良いと思います。
また、Pro+を契約していても、解約するとバックグラウンド実行もできなくなっています。
- PayAsYouGo相当になる(?)
- ハイメモリが使えない
- バックグラウンド動作もできない
KaggleとColabの両方で動くコードを作る(コード共有)
kaggleとColabの両方で動くコードを作っておくと、便利です。以下は私がよくやっている書き方です。基本、Colabの場合にis_colabフラグをTrueにしておいて、それをみながら必要な部分を切り替える感じになります。
あと、kaggleのフォルダ構成と、Colabのフォルダ構成を相対パスで合わせておけば、最初にデータセットをinputフォルダに配置しておけば、あとは同じコードで実行できるようになります。
あとは、Colabの場合、途中結果などをgoogleドライブに退避させるコード、ランタイムを終了させるコードを入れるくらいかと思います。
Colabかどうか判定する方法
まず、Colabかどうか判定して、フラグを作っておきます。
import sys
is_colab = False
if "google.colab" in sys.modules:
is_colab = True
Googleドライブをマウントする(Colabの場合)
if is_colab:
from google.colab import drive
drive.mount('/content/drive')
Kaggle APIを使えるようにする
if is_colab:
!mkdir -p /root/.kaggle
!cp /content/drive/MyDrive/Kaggle/kaggle.json /root/.kaggle/
!chmod 600 /root/.kaggle/kaggle.json
kaggle.json
が、googleドライブのKaggle/kaggle.json
として置いてある前提のコードになります。ここは適宜書き換えてください。
kaggle.jsonはkaggleにアクセスして、自分のアイコンをクリックして表示されるメニューのSettingsをクリックすると表示される「Create New Token」をクリックして作成します。
Kaggle、unzupをインストールと、input, outputフォルダを作成
if is_colab:
!pip install kaggle
!apt install unzip
!mkdir input output
Colabはunzipが入っていないので、データセットを解凍するためにunzipが必要になります。
コンペとフォルダ環境を合わせて配置する
この部分は、それぞれのコンペに合わせて異なります。やることは、必要なデータセットをダウンロードして、kaggleの環境と同じ位置に配置することです。
絶対パスが異なるので、両方で動くノートを作る場合は、相対パスで指定するようにしてください。
if is_colab:
!kaggle competitions download -c xxxx
!unzip -o xxxx.zip -d input/xxxx
まとめ
昨年度制度が変更されてGoogle Colabについて書きました。Kaggleでお世話になっていただけに、改変は結構ショックでした。とはいえ、計算リソースを買うか、うまく付き合っていくしか無いかなと感じています。GCPも選択肢ですが、Colab以外を含めて検討していこうと思います。
また、Kaggle/Colabでコード共有する場合のコードの書き方を紹介しました。これをやっておくと、ColabとKaggleでコードの行き来が簡単になリます。