Vengineerの妄想

人生を妄想しています。

Google TPUのドキュメントが更新されていた

はじめに

いつものようにいろいろとGoogleくんに聴いていたら、Google TPUのドキュメントが更新されていたので、記録のためにブログに残します。

Google TPU

Google TPUの v4/v3/v2 について、詳しく書かれています。

cloud.google.com

構成

  • v4 : 2 x TensorCore ( 4 x MXU、1 x ベクトル ユニット、1 x スカラー ユニット)
  • v3 : 2 x TensorCore ( 2 x MXU、1 x ベクトル ユニット、1 x スカラー ユニット)
  • v3 : 1 x TensorCore ( 1 x MXU、1 x ベクトル ユニット、1 x スカラー ユニット)

チップ当たりの性能

  • v4 : 275 TFLOPS(bf16 または int8)(v3 に対して、2.2357倍、動作周波数で 1.117倍、MXUが2倍 = 1.117x2 = 2.234でだいたいあっている)
  • v3 : 123 TFLOPS(bf16)
  • v2 : 45 TFLOPS

メモリ帯域

  • v4 : 32 GiB、1200 GBps
  • v3 : 32 GiB、900 GBps
  • v2 : 16 GiB

上記のサイトにはなかった動作周波数 (Wikipedia)

  • v4 : 1050MHz (v3 に対して、1.117倍)
  • v3 : 940MHz
  • v2 : 700MHz

Pod Size

  • v4 : 4096 chips
  • v3 : 1024 chips
  • v2 : 256 chips

ここまでは今まで公開されていたのでいいんですが、これ以外に色々と載っています。

  • v4 : MXU 重み付け読み込みの高速化と 8 ビットモードのサポートにより、バッチサイズを小さくし、推論のレイテンシを改善しました
  • v4 : チップあたり 6 個の相互接続リンクにより、ネットワークダイヤグラムがより小さいネットワーク トポロジを実現
  • v3 : v2からメモリが倍 (16GiB => 32GiB)

TPU は、次の構成で使用できます。

  • シングル TPU ボード (4個のTPU chipを搭載したボード)
  • TPU Pod : TPU ボードごとに TPU ホストがある
  • TPU Pod スライス : 32、128、512、1024、2048

v2とv3では、TPUノードという構成がある

TPU ノード アーキテクチャは、gRPC を介して TPU ホストと通信するユーザー VM で構成されています。このアーキテクチャを使用する場合、TPU ホストに直接アクセスできないため、トレーニングと TPU のエラーをデバッグすることが困難になります。

下図を説明のために引用します。

これに対して、TPU VM アーキテクチャを使用すると、TPU デバイスに物理的に接続されている VMSSH 接続できます。VM への root アクセス権があるため、任意のコードを実行できます。コンパイラとランタイム デバッグログ、エラー メッセージにアクセスできます。

下図を説明のために引用します。

ここまででなんで、TPUノードとTPU VMの説明をしているのかな?と思いましたが、この後の「サポートされているフレームワーク」のための前振りだったようです。

TensorFlow と PyTorch/JAX では、TPUノードでの動作が違うようです。

TPUノードのTPUホストでは、TensorFlowのruntimeが動いていて、gRPC 経由で TensorFlow の User VM/PyTorch の User VM/JAX の User VM と通信しています。

おわりに

このブログでも Google TPU については何度か書いていますが、TPUノードやTPU VMについては、ちょっと情報が増えてよかったです。

vengineer.hatenablog.com

vengineer.hatenablog.com

vengineer.hatenablog.com