このように各ユニットはValidなデータが到着して、処理する仕事がある時だけ目覚めて、電力を消費する。なお、sleep状態でもファブリックは動かしておく必要はあり、電力はゼロにはならないが、消費電力を抑えることができる。なお、sleepには、比較的消費電力は大きいが短時間で処理を再開できるfast wakeupのスリープと、より低電力のdeep sleepの2つのスリープがある。
DPUとCPUのインタフェースはAXI(Advanced eXtensible Interface)を使う。8-64クラスタをまとめたものをCompute Machineと呼び、これをAXIで接続する。AXIとDPUのインタフェースは、下の左の図のようにFIFOを経由してiRAMにアクセスしている。
DPUはPEが最小単位で、それが16個集まってクラスタになっている。そのクラスタが8-64個集まったものがCompute Machineである。そして、チップには32個のAXIのポジションがあるが、角の8個のところにはCompute Machineが置けないので、1チップのCompute Machineの数は24個となっている。
DPUのメモリ階層は、次の図のようになっている。AXIの1つのチャネルに最大64個のクラスタが接続できる。各クラスタとAXIとの接続は20GB/sのバンド幅を持つ。そして、AXIは最大32チャネルを持つことができる仕様になっている。
AXIチャネルとCPU、4個のHMC、2チャネルのDDR4はAXI4 NOCで接続される。HMCメモリのバンド幅は60GB/s、DDR4のバンド幅は15GB/s、PCI Expressのバンド幅は30GB/sである。
DPUは、クラスタの内部は同期回路であるが、クラスタ間では非同期のGALSとなっている。通常のすべて同期型のクロックの場合は、クロックスキューでサイクルタイムが抑えられてしまうが、DPUのクロックはグローバルには非同期であるので、クラスタは6-10GHzという非常に高いクロックで動かして性能を上げることができる。
WaveFlowのソフトウェアスタックは、次の図のようになっている。まず、汎用サーバで走るWaveFlow Session ManagerでデータフローグラフをDPUに収容できる規模に分割する。また、DFグラフのスループットの最適化を行う。
実行にはBLAS1、2、3やCONV2D、Softmaxなどのライブラリが使われるので、それらをリンクする。そして、Wave ComputingのWave Deep Learning Computerで実行させる。
さらにオフラインでコンパイラやリンカを使って、自前のライブラリを開発したり、シミュレータなどのツールを使ってデバグや性能改善のためのチューニングを行う。
DPUのソフトウェアスタックは、ホストで動作するWaveFlowセッションマネージャとWave Computingのハードで動作するExecution Engine、別途用意するAgent Libraryからなる。また、オフラインで使用するWave Flow Graphコンパイラ、リンカ、シミュレータがある |
WaveFlow Agent Libraryは、TensorFlow用のものはWave Computingから提供されるが、顧客は必要に応じて、WaveSDKを使って追加を行うこともできる。
WaveFlow SDKは次の図に示すようなコンポーネントから構成されている。LLVMのフロントエンドとWFG(Wave Flow Graph)コンパイラでDPUの実行ライブラリを作り、WFGリンカで実行プログラムをリンクする。そして、WFGシミュレータやアーキテクチャシミュレータを使って、デバグやチューニングを行う。SDKの核をなすのはWFGコンパイラとWFGリンカであるが、これらの詳細は、2017年11月の「ICCAD 2017」で発表される予定である。
次の図は16PEの1つのクラスタで積和を計算する例である。左の表は横方向のマスがPE0からPE15で、縦方向が時間で、それぞれのタイミングでどのような命令を実行するかがか書かれている。右側の図は、その計算を行うネットワーク接続が描かれている。
次の図の上側の図はInception V4ニューラルネットのグラフを描いたものである。左下の図にその一部をデータフローグラフで描いている。そして、セッションマネージャがこのグラフを各DPUチップに納まるように分割して割付を行う。
64個のDPUを使う1ノードのデータフローコンピュータで、224×224×3色の1.28M枚のイメージの学習を、AlexNet、GooglLeNet、Squeezenetで行った結果を次の表に示す。AlexNetでは、学習のための推論の速度は962,000イメージ/秒で、90エポックの学習時間は40分であった。2012年のAlexNetの発表論文では、NVIDIAのGTX 580 GPUを2台使って5~6日掛かったのことであるので、それに比べると200倍くらい速いということになる。
GoogLeNetでは、学習のための推論速度は420,000イメージ/秒で学習時間は1時間45分、SqueezeNetでは、学習のための推論速度は75,000イメージ/秒で、学習時間は3時間であった。Seq2Seqの学習は論文に書かれたパラメタを使って7時間15分かかっている。