機械学習
記事内に商品プロモーションを含む場合があります

Google Colab活用ガイド|kaggleとColabでコードを共有

Google ColabをKaggleで活用する
tadanori
この記事の内容

kaggle参戦時にGoogle Colabを使っている方も多いのではないでしょうか。自前のGPUマシンを用意していない場合、Google Colabは重宝します。

ここでは、kaggke notebookとColabのどちらでも動かせるノートブックの作り方を紹介したいと思います。参考になれば幸いです。

はじめに

以前のGoogle Colabについて

Kaggleのコンペには多数参加していますが、自前の機械学習マシンは持っていません。その代わりに、Google Colaboratoryを利用しています。

以前は、Colab Proを月額1,000円で利用することで、制限なく使用することができました。これは学習用のPCを持っていない私にとって、Kaggleで競う上で大きな利点でした。

しかし、2022年9月ごろから(正確な時期は記憶が曖昧ですが)、システムが変更され、Colab Proは使い放題ではなくなりました。個人的にはかなりの悪化だと感じています。これにより、学習用PCを持っていない場合、Kaggleでの戦うのがかなりキツくなりました。

使い放題では無くなったの、かなりショックでした。

現在の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円使い放題だったものが、1000円で約2日。流石に厳しいです。

Colabだけで戦うのが難しそうなら、GCPを使うという選択肢も考えていますが、料金的にはあまり変わらない印象です。ですので、とりあえず現状でディープラーニングのKaggleコンペに参加し、その後どうするかを検討しようと思っています。

とりあえず、ProやPro+の利用でどこまでできるかを見極めます。Colabが使い放題だったので、これまであまり活用していなかったKaggleのGPU枠(週30時間)も活用すればなんとか回せるかなと考えています。ProではなくPro+の利用を前提としていますが。

愚痴っぽくなってますが、とりあえずColabの紹介をして、kaggle/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と連携させた利用が想定されているようです。このプランでは自由は環境構成が可能のようですが、従量課金制であり、企業向けを想定しているので、ここでは説明を割愛します。

Colabのプラン一覧
引用元:「最適な Colab のプランを選択する

参考までに、stable diffusionで少し遊ぶ程度なら、Colab Proでも十分でした。

あと、Colab Pro, Pro+では、「より速いGPU」が使えるとありますが、コンピューティングユニットの消費を考えると活用は厳しいです。

というのも、最も性能の良いA100だと、100コンピューティングユニットで7時間ちょっとしか使えません。

GPUは速くなっても、データセットのダウンロードとかCPUでの前処理などはそこまで速くならないので、消費するユニットに対して処理速度は向上しない印象があります。個人的には、メインは標準GPUで、スポットでV100あたりかなーと思っています。

Google Colab Proのコンピューティングユニット消費

参考までに、各GPUの1時間あたりの消費コンピューティングユニットを書いておきます。V100あたりがもう少し使いやすい値段になると嬉しいんですけどね。

ハードウェアアクセラレータコンピューティングユニット/時間
T4 GPU1.76
V100 GPU4.82
L4 GPU4.82
A100 GPU11.77

※価格は変化します。現在の単価は確認してください。

また、課金開始と、停止が結構簡単にできるので、コンペに参加して使い出したら課金開始、コンペが終了したら課金停止という使い方ができます。ProからPro+への変更も途中からできますので、使い方の柔軟性は高いです。

Colab Pro+にするとバックグランド実行ができるので、ブラウザを閉じても実行され続けるところが魅力です。長時間ほったらかしで動かしてエラーで終わっている時は結構ショックですが😅

ところで、従量課金になったので、処理終了したら即課金されない状態にしたくなりますランタイムを終了させる方法は以下にまとめましたので参考にしてください。

あわせて読みたい
Google Colabのランタイムをコードで終了させる方法
Google Colabのランタイムをコードで終了させる方法

なお、Colab Pro/Pro+を使う場合はハイメモリでの利用をお勧めします。理由は以下の記事を参考にしてください。

あわせて読みたい
ディープラーニング Colab Pro活用術|学習はハイメモリが良い理由
ディープラーニング Colab Pro活用術|学習はハイメモリが良い理由
有料版(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->Settings

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でコードの行き来が簡単になリます。

おすすめ書籍

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

記事URLをコピーしました