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

ディープラーニング Colab Pro活用術|学習はハイメモリが良い理由

tadanori

この記事の結論は「ディープラーニングではハイメモリを使おう」です。なぜ、ハイメモリが良いのかに興味がある方は記事を読んでみてください。Colab Proのコンピューティングユニットを節約できる情報です。

はじめに

Google Colab Pro, Colab Pro+を契約すると、ランタイムを選択することができるようになります。この記事では、実際にディープラーニングに活用する場合のランタイムの選択について説明します

有料契約すると、24時間までノートブックを実行できるようになりますし、切断されにくくなります。また、Colab Pro+ではバックグランド処理をサポートしているので、ノートブックを閉じても実行を続けてくれます。

私の場合、kaggleのコンペで活用していますが、ハイメモリのランタイムがかなり有効なことに気づきました。この記事では、ハイメモリがなぜ有効なのかについて、実験結果を交えて解説します。

処理の完了と同時に切断したい場合は、こちらの記事を参考にしてください

Google Colabのランタイムをコードで終了させる方法
Google Colabのランタイムをコードで終了させる方法

解約時に余った期間やコンピューティングユニットがどうなるかはこちら

Google Colab Proを解約した場合はどうなるのか? 加入と解約の手順も解説
Google Colab Proを解約した場合はどうなるのか? 加入と解約の手順も解説

ランタイムのタイプの違い

ランタイムとは

Colab Pro、またはColab Pro+を契約すると、ランタイム環境を選択することができるようになります。

ランタイム環境とは、クラウド上でアプリケーションやサービスが実行されるための環境のことです。Colabでは、CPUランタイム、GPUランタイム、TPUランタイムといった構成の異なるランタイムが提供されています。

ランタイムのタイプの違い

具体的には、Colab Pro(Colab Pro+)では、以下のようなランタイムを選択することができます。

以下の表は、ランタイムのメモリ・ディスク・CPU数です。

実際に実行して割り当てを確認した結果ですが、公式にスペックを言っているわけではないので、変更される可能性はあります。

標準(GPUなし)ハイメモリ(GPUなし)標準(T4)ハイメモリ(T4)
1時間あたりのコンピューティングユニット数0.080.121.962.05
メモリ12.7GB51.0GB12.7GB51.0GB
ディスク225.8GB225.8GB166.8GB116.8GB
CPU数2828
GPUTeslaT4(15GB)TeslaT4(15GB)

標準(TPU)ハイメモリ(TPU)標準(V100)ハイメモリ4(V100)A100
1時間あたりのコンピューティングユニット数1.962.055.365.4513.08
メモリ12.7GB32.5GB12.7GB51.0GB83.5GB
ディスク225.8GB225.8GB166.8GB116.8GB166.8GB
CPU数2402812
GPUTPUTPUV100(16GB)V100(16GB)A100(40GB)
コンピューティングユニット数とは

Pro, Pro+を契約すると、それぞれ100, 500コンピューティングユニットが割り当てられます。おおよそ、1コンピューティングユニット=10円だと考えれば良いです。

ランタイム環境は、ハイスペックなものを選べば選ぶほど1時間あたりのコンピューティングユニットの消費が大きくなります。現状最もGPUの性能が高いA100の場合、1時間で130円くらいのコストがかかります。

ディープラーニングで学習を行う場合、数時間かかることは普通なのでA100を使うとあっという間に割り当てがなくなってしまいます。

とはいっても、生成AIのようにGPUメモリが必要なモデルの学習はA100を使わざるおえないこともありますが(A100はVRAMが40GB)。

とはいえ、普段使う場合は、GPUはT4になるのではないかと思います。

ハイメモリはメモリの割り当てが多いランタイムですが、調べてみるとCPU数も増えていることがわかりました。また、GPUではなくTPUのランタイムでは、CPU数が40と突出して多いこともわかりました。

ちなみに、ランタイムの変更は、Colabの「ランタイム」メニューから「ランタイムのタイプを変更」を選択して表示される下記のメニューから行います。

ランタイムの変更のダイアログ

ランタイムはハイメモリがおすすめ

ここから本題です。

結論から言えば、「メモリが必要なくてもランタイムはハイメモリがおすすめ」と言うことです。

ハイメモリはCPUが多い

理由は、CPU数の増加です。

たとえば、T4のランタイムではCPU数が2から8にアップします。

ディープラーニングはGPUを使うのでCPUはそれほど関係ないだろうと思われる方もいるかもしれませんが、それは間違いです。

たとえば、Pytorchのデータローダー(DataLoader)では、CPU処理の並列化に対応しています(num_workersで設定)。データローダーを並列化すると、データを読み込んで加工する処理が並列化され高速化します。

この差がどれくらいあるかをYOLOv8の学習で比較してみました。

YOLOv8の学習での比較

実際に、標準(T4)と、ハイメモリ(T4)を比較して学習を行わせてみました。学習は以前紹介した記事のもので、これをColab上で実行した形になります。

あわせて読みたい
YOLO v8で物体検出|独自(カスタム)データの学習と推論を実践
YOLO v8で物体検出|独自(カスタム)データの学習と推論を実践

以下が実行時間です。

標準(T4)14min 41s
ハイメモリ(T4)6min 42s

ハイメモリの方は半分の時間で終わっていることがわかると思います(ハイメモリが約2倍高速)。

1時間あたりのコンピューティングユニットが、それぞれ1.96と2.05とハイメモリの方が高いですが実行時間が2倍以上短くなっているので、結果としてハイメモリの方が費用がかかっていません。

標準(T4)ハイメモリ(T4)差分
1時間あたりのコンピューティングユニット1.962.05+0.09(約4.5%高い)
実行時間14min 41s6min 42s-7min59s(約2.19倍)
実行にかかった費用(コンピューティングユニット)0.480.23-0.25(約50%ダウン)

実際の計測結果はこちら

標準 CPU times: user 7min 14s, sys: 31.2 s, total: 7min 45s Wall time: 14min 41s
ハイメモリ CPU times: user 6min 10s, sys: 31.4 s, total: 6min 42s

YOLO以外も効果がある

YOLOv8だけにハイメモリの効果があるわけではありません。

実は、ハイメモリの方がコスパが良いことに気づいたのは、BERTの学習を行なっていた時です。

CPU数が多いから、もしかしてハイメモリの方が速い?」と思って試しにランタイムを変更して実行してみると、12時間以上かかっていた学習が8時間ほどに短縮されました。YOLOv8ほどではないですが、時間は短くなっているし、必要とするコンピューティングユニットも減りました。

BERTのコードもデータロード中の前処理が少しあったのですが、データの前処理などがある場合は、CPU数の増加による恩恵を得られやすいのかもしれません。

TPUのCPU数40も活用できそう

表形式のデータを機械学習する場合などは、CPU数が多いと高速に処理できることがあるのでTPUのランタイムのCPU数が40と言うのは意外と活用できるかもしれません。ただ、価格差を考えると普通のハイメモリ(0.12)の方が良いかもしれません。

まとめ

ディープラーニングを行う場合は、CPUの数も速度に影響があったりします。ハイメモリと標準の価格差がわずかなので、ハイメモリを選択すると「時間も短くなって、コストも抑えられる」といいことづくめです。

Colab Proでディープラーニングを行なっている人は、ハイメモリを活用してはいかがでしょうか。

おすすめ書籍

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

記事URLをコピーしました