TPU (Tensor Processing Unit) の論文を読んでみた ~何故 TPU は 8 ビットなのか~
先々週になりますが、Googleが独自開発したAI処理用のチップについての記事がありました。
TPU というのは Google が独自に開発した機械学習用のチップで、昨年の Google I/O で発表されました。
この記事で私が注目したのは、タイトルにもある「8ビット」というところでした。ディープラーニングには GPU、という頭があったので、「なんで 8 ビット?」と思った記憶があります。(GPU は普通 64 ビットですよね) ただ、当時はこれ以上の情報は出てこなかったので、わからずじまいでした。
しかし、先々週の ITmedia の記事中に、GoogleがISCAで発表する予定の論文へのリンクが張ってあったので、Google 翻訳の助けを借りて読んでみました。(Google 翻訳は TPU 使ってるはずなので、TPU についての論文ならうまく訳してくれるのでは? と。。そんなことないかw)
しかしまあ難しいですね。8 割くらいはちんぷんかんぷんなんですが、何故 8 ビットなのかについては理由がわかったので、書いてみます。(翻訳はGoogle+私です)
まず、Abstractに
"This paper evaluates a custom ASIC - called a Tensor Processing Unit (TPU) - deployed in datacenters since 2015 that accelerates the inference phase of neural networks (NN)."
「本稿では、2015 年よりデータセンターに配備されている、ニューラルネットワーク (NN) の推論フェーズを高速化する Tensor Processing Unit (TPU) と呼ばれるカスタム ASIC についての評価を行います。」
とあって、TPU は推論を担当していること、ASIC ベースで開発されていることがわかります。ASIC というのは特定用途向けの半導体を設計・製造するもので、お金も時間もかかりますが、高速かつ効率的な IC を作れるというものですね。
ASIC というのは違う記事でも読んで知っていたのですが、推論用とは知りませんでした。学習にも使うのかと思っていたのです。今、TechCrunch の記事を読み返してみましたが、
機械学習アルゴリズムの実行におけるTPUの高速性
とありますね。「学習」って書いてあるよなあ。もしかして、「実行」というのが推論、ということなのですかね。これ読んだだけではわかりません。
さて、Introduction。
"The two phases of NN are called training (or learning) and inference (or prediction), and they refer to development versus production."
「NN の 2 つのフェーズはトレーニング (学習) と推論 (予測) で、これはちょうど開発と生産の間の関係と同じです。」
よくいう「ディープラーニング」とか「機械学習」というのは、このトレーニングフェーズのことですね。大量のデータによってディープ (多層) ニューラルネットワークをトレーニングするのがトレーニングフェーズ、トレーニングが済んだ NN にデータを入力してそのデータが何かを推論させるのが推論フェーズということです。(この辺、別記事でもう少しわかりやすく整理したいと思っています)
そして、トレーニングフェーズと推論フェーズでは必要とされる計算の内容 (精度) が違うようです。
'Virtually all training today is in floating point, which is one reason GPUs have been so popular."
「今日ほとんどのトレーニングは浮動小数点演算で行われており、GPU が一般的に使われるのはそのためです。」
"A step called quantization transforms floating-point numbers into narrow integers - often just 8 bits - which are usually good enough for inference."
「(トレーニング後に) 量子化によって浮動小数点数値を整数値 (多くの場合 8 ビット) に変換します。推論にはこれで十分です。」
おお。ここで 8 ビットが出てくるのか。それで TPU が 8 ビット機というところに繋がるのですね。
つまり、トレーニングには 浮動小数点演算が必要で、GPU はそれに最適だけど、推論では 8 ビット整数演算で十分、それを 64 ビット前提の GPU で計算させるのは勿体ない (64 ビットの演算器のうち 8 ビット分しか使わないから)、それなら推論専用の 8 ビット機を作れば、チップ面積も小さくでき、並列度も上げられ、高速化も可能で消費電力も減る、ということなのでしょうね。
いやあ、難しい。でも面白い。この論文、まだまだ楽しめそうです。また何かわかったら書きます。
これ以上は別記事にしますが、トレーニングフェーズで必要なのは 16 ビット精度の浮動小数点演算なのだそうで、今の GPU は 64 ビットだけではなくて 32 ビットや 16 ビットの演算もできるようになっているようです。
ITソリューション塾・第25期の受付を開始しました
次回のITソリューション塾は、5月16日(火)からです。詳細日程やお申し込みにつきましては、こちらをご覧下さい。