Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

High-performance TensorFlow on Intel Xeon Using nGraph



がアップされました。

Bridge TensorFlow*/XLA to run on Intel?? nGraph?? backendsを使って、
Intel nGraph と TensorFlow と繋ぐということ。

Intel(R) Xeon(R) Platinum 8180 CPUでは、ResNet50-I1k では、6.5 イメージ/秒だったが、
Intel nGraph + TensorFlow XLAでは、68.9 イメージ/秒 になり、約10倍になったと。。。

ちなみに、MKL-DNNにて最適化したTensorFlowでは、65 イメージ/秒。。。

Intel nGraphでは、次の2つのステップで最適化していますよ。
Google翻訳にそのまんまお願いしました。
 私たちはそれをやった 
  nGraph CPUバックエンドでのパフォーマンスの最適化
  「IAトランス」とも呼ばれるnGraph CPUバックエンドは、多くの最適化を実装し、
  インテルCPUプラットフォーム上で特定のモデルに最適なパフォーマンスを提供します。

 ・フレームワークに依存しない最適化

  迅速なDNNカーネルのために、MKL-DNNやEigenなどの最適化されたカーネルライブラリを活用します。
  さらに、これらのカーネル実装に最適なデータレイアウトを選択し、
  グラフレベルで全体のデータレイアウト変換を減らすグラフ最適化パスを組み込みます。
  また、BatchNormやReLuのようなオペレーションを融合させることで、
  メモリ要件の低い融合カーネルの実装をより有効に活用しています。

 ・TF / XLA固有の最適化:TensorFlowには、モデルに特別なパッド操作を追加するAPIレベルの特質があります。
  これらのオペレーションは不必要なデータレイアウト変換につながり、
  MKL-DNNで利用可能なパディングされたコンボリューションカーネルでは回避できます。
  これらのパッド操作を既存の畳み込み演算子に融合するために、これを利用しました。
  これは、ベースのTensorFlowモデルに比べてパフォーマンスが向上しています。
  さらに、XLAは、Float32からFloat32への型変換など、いくつかのID演算子を追加します。
  これは、正確性に影響を与えずにグラフから削除することができます。

ここにあるように、オペレーションの融合、だけでなく、
全体のデータレイアウト変換を減らしたり、パッド操作の融合のように、メモリの移動にも注目しているんですよね。


その他、いろいろと書いてありますので読んでね。

それから、ここに書いてある内容が実際のソースコードでどのように実装しているかを
TensorFlow dynamically loadable XLA Plugin独演会にて、お話したいと思っています。

よろしくね。。。。