※2019年8月時点の情報です。今後の機材アップデートやColabの方針次第では、この情報は変わる可能性があります。
きっかけ
条件を変えて別々のランタイムで訓練させると、1個は150エポックぐらい進んでいるのに、もう1個は50エポックぐらいしか進んでいないという現象がありました。
ほぼ同じ計算量なのに、条件によって2~3倍ぐらい計算時間が違う、これはおかしい――ということで調査してみました。
nvidia-smiしてみる
どのGPUが割り当てられているかは「nvidia-smi」で確認できます。
1回目、Tesla K80が割り当てられています。これまで通りですね。ここでランタイムをリセットしてみます。
2回目、Tesla T4が割り当てられました。こちらは最新のGPUです。訓練が速かったケースは、このGPUを引けたときだったようです。
このように、2019年8月現在のColabにはランタイムを割り当てるタイミングによってGPUが変わる、GPUガチャがあります。
元はK80だけの運用だったところに、最新のT4が追加され、現在は両方混ぜて割り当ててるのかもしれませんね。
注意点
特にベンチマークする際はお気をつけください。T4だと思ってたのがK80だったり、あるいはその逆だったりすると大きく結論が変わります。「!nvidia-smi」でどのGPUがきてるか確認してから、ベンチマークするのをおすすめします。
あとはこちらのほうが有り得そうですが、計算時間の目安が全然変わります。「あんまり時間かからないな」思ってそれを基準にエポック数設定していると、実はそこで割り当てられていたのはT4で、K80がきたときにはえらい時間がかかり、放置していたらタイムアウトしていたとかよくあります。最悪半日分の訓練が飛ぶので、悲しみを背負わないようにしましょう。
ただし、速いからといってT4狙いでリセマラをするのは自己責任で!(公式FAQに以下のような記述があります)
T4 GPU などのハードウェア リソースを利用できないのはなぜですか?
最も利用しやすいハードウェアは、Colaboratory を長期間のコンピュータ処理ではなくインタラクティブに使用しているユーザーに優先的に割り当てられます。Colaboratory を長期間のコンピュータ処理に使用しているユーザーは、利用可能なハードウェアの種類やハードウェアの利用時間に関して、一時的に制限される場合があります。コンピュータ処理に特別なニーズがあるユーザーは、Colaboratory の UI をローカル ランタイムで使用することをおすすめします。
なお、Colaboratory を暗号通貨採掘に使用することは認められていません。Colab のご利用を全面的に禁止される可能性がありますので、ご注意ください。
なお、TPUランタイムの場合は、このようなデバイスガチャの要素があるという話は聞いたことはありません(あったら教えて下さい)。