昨日、同僚の方より、colaboratoryでTPU使えるようになったらしいよ!と以下の記事をご共有いただきました。
9/26夜、Google Colaboratoryユーザーに激震が走った。
はい、とても衝撃を受けました。(聞いた時は心の中で「マジで!?」と叫びつつ)
無料で使えるとか、どんだけ太っ腹なんだ・・
ただ、同僚の方と話していて思いましたが、TPU自体がGPUやらCPUなどと比べると馴染みが薄く、「なんだか凄そうだけどよく分からない」という方も多いと思います。
そこで、先日Google Cloud Next in Tokyo '18に参加した際に、TPUのセッションも聞いていたので、情報共有目的で少し記事にしておきます。
抑えるべきポイントを3行で表すと...
- Googleが作った、ディープラーニングなどの計算に特化したプロセッサ。計算できる領域が限られている代わりに、GPU以上にとても速くて消費電力が少ない。
- TensorFlowでしか今のところは使えない。(バックエンドをTensorFlowにしたKerasなら動かせる)
- 一部、TPU用に少しコードの調整が必要になったりする。チューニングなども場合によっては必要になってくる。
とりあえず、データを使ってお仕事をする上では、この辺りが重要かなと思います。
以降は、その他のセッションで触れられていた点などに関して、補足的に書いておきます。
colaboratory以外でも、Cloud TPUとしてGCPで提供されているらしい
- colaboratoryとは異なり、有料にはなりますが、仕事などで使うためのものがクラウドで提供されています。
- 通常のものに加えて、途中で止まったりする可能性があって少し不安定だけど、安価なプランがあるそうです。(安い代わりに、TensorFlowのチェックポイントなどで途中で止まっても大丈夫なように制御しないといけない)
今回のcolaboratoryのアップデートで、事前に癖やコードの差異などをしっかり把握しておきたかったものの、検証のための予算を確保するのが手間だったのが、休日なとに研究的にcolaboratoryでTPUを試してみて、慣れてから仕事での導入を検討する、といったことができるようになりますね!
ボトルネック云々で、あまり速度が向上しないケースがあるらしい
- セッションでは、TPUの計算が速すぎて、データの読み込みがボトルネックになりがち、といったことが言われていました。(計算が終わるまでに、次のデータが間に合わない)
- そのあたりは、GCPのTPU Profilerなるもので、どこが遅いのかが調べられるようになっているそうです。(入力データ待ちが発生しているなど)
- 巷で言われている、GPUよりも数十倍速いよ!というところまで速度を出すためには、しっかりとこの辺りでチューニングしたり、使ってみて傾向を掴んだりが必要なのでしょう・・。
実際に速くなるの?
まだ、実際に使っていないので、後日機会があればcolaboratoryで使ってみないと・・な感じではありますが、セッションで挙がった実例では、ebayで100倍の速度、ドコモの実例でも20倍の速度向上といったレベルらしいです。(ドコモでは、コストも1/5になったとのことです。早く学習が終わる分、起動時間が短くて済むなどのメリットがあるのでしょう・・)
コードをどう調整すればいいのか、分からないんだけど?
基本的な有名どころのモデルは、リファレンスモデルとして公開されているそうです。
(軽く検索してみましたが、tpuのgithubリポジトリのことでしょうか・・?)
Reference models and tools for Cloud TPUs.
と記載があります。
まずはこれらで必要なものをカバーできないか、見てみてほしいとのこと。(領域分割モデルや質問回答モデルなど、少し発展的なものもあるようです)
それらの公開されているTPU用のモデルのPythonのコードを読んだり、動かしてみたり、もしくはベースにしてカスタマイズして要件を満たせそうであれば、手っ取り早くていいかもしれません。
リファレンスモデルがなければ、他を調べたり、独自実装になるので、少し大変かも・・しれません。
スパコンレベルの「TPU Pod」なるものもあるらしい
colaboratory関係ないですが、複数のTPUで、且つ並列に処理しても効率が下がらず、リニアに速度が上がっていくTPU Podなるものもあるとのことです。(コスト的に、私は触る機会はないとは思いますが・・)
セッションではいつから提供している、といったことは触れられていませんでしたが、今年中にGCPで提供開始される?のでしょうか。
さらにGoogleは、より大規模な深層学習計算のために、複数のTPUユニットを自社データセンターネットワークに接続したコンピュータ「TPU Pod」を構築している。TPU Podの性能は1ポット(16ユニット)あたりTPU v2で最大11.5ペタFlops、TPU 3.0のTPU Podでは最大100ペタFlopsを超えるという。年内には、TPU v2のTPU PodがGCPの製品として提供される予定だ。
ペタフロップ級!Googleの深層学習用カスタムチップ「TPU」が高性能な理由
おまけ
colaboratoryに追従するように、Kaggle KernelでもGPUが使えるようになりましたが、その流れでそのうちKaggle KernelでもTPUが使えるようにならないかな・・!と期待しています。
もし使えるようになったら、現状Kaggle Kernelが数時間(6時間でしたっけ・・?)の制限があるので、もっとチューニングや重い計算など色々できそうで、楽しそうです!