GoogleはTensorFlowランタイム(TFRT)をオープンソース化した。TFRTは、TensorFlowディープラーニングフレームワークの新しい抽象化レイヤーであり、モデルがさまざまなハードウェアプラットフォーム間でより良い推論がきるようにする。以前のランタイムと比較して、TFRTは推論遅延を平均で28%改善する。
TFRTプロダクトマネージャのEric Johnson氏とTFRTテクニカルリードのMingsheng Hong氏がブログ投稿でTFRTの概要を説明した。TFRTの役割は、特定のハードウェア用に作成されたデバイス固有のプリミティブ操作であるカーネルを実行することである。Eager実行ではTFRTカーネルを直接呼び出すが、グラフ実行では、カーネルを呼び出す前にグラフを中間表現に「落とし込む」必要がある。その他の改善として、同時実行のより強力なサポートとコードの拡張性の改善がある。Johnson氏とHong氏が次のように述べている。
高性能で低レベルのランタイムは、今日のトレンドに沿っており、明日のイノベーションを強化するための鍵となります。
TensorFlowはもともと、大規模なデータ配列に対する一連の変換を表す計算グラフを構築するための言語として考えられていた。グラフはPythonを使用して作成されるが、セッション中に遅延実行される。この分離により、ベースの並列ハードウェアへの計算のマッピングが容易になるが、いくつかの欠点がある。たとえば、グラフのエラーがすぐに明らかにならない場合がある。2017年後半、ライバルのフレームワークPyTorchに触発されて、GoogleはTensorFlowにEager実行を追加し、より高速なデバッグを実現した。そして、制御フローを組み込み、動的なモデルを実現した。ただし、既存のランタイムは引き続きグラフの実行用に最適化されており、単一のEagerな操作を実行するオーバーヘッドは「ささいなものではない」。Johnson氏とHong氏が次のように述べている。
既存のTensorFlowランタイムは、最初はグラフ実行とトレーニング用に構築されましたが、新しいランタイムはEager実行と推論を第一と考えたものになっています。
グラフ実行は引き続きサポートされる。TFRTは、カスタムコンパイラフレームワークであるマルチレベル中間表現(MLIR)を使うことでグラフ実行パフォーマンスを向上させる。MLIRは、グラフをプラットフォーム固有のプログラムに変換し、ランタイムによって実行されるようにするためのものである。Googleは2019年にTensorFlowにMLIRのサポートを追加した。新しいランタイムはMLIRと「緊密に統合」される。グラフのコンパイルに加えて、MLIRはランタイムの拡張性を向上させる任意のC++型もサポートする。
TFRTアーキテクチャ - ソース: https://github.com/tensorflow/runtime
TFRTは、TensorFlow LiteやModel Optimization Toolkitなど、推論パフォーマンスを向上させるためにTensorFlowフレームワークに最近加えられたの多くの改善の1つである。TensorFlow Liteは、モデルを特定のハードウェアを対象としたモデルに変換するとともに、モバイルやエッジデバイスなどのリソースに制約のあるプロセッサに焦点を当てている。対照的に、TFRTは、クラウドやデータセンタを含むすべてのプラットフォームにわたってモデル推論を改善することを目的としており、GPUやハイエンドCPUなどのターゲットである。推論遅延に対する改善を測定するために、GoogleはTFRTをTensorFlow Servingと統合した。TensorFlow Servingは、モデル推論のための本番グレードのサービスを提供する環境である。彼らの実験では、ResNet-50モデルを選択し、TFRTと以前のランタイムで実行した。TFRTは推論時間を平均で28%改善した。
プロダクトマネージャのJohnson氏は、Twitterでの議論で、NVIDIA TensorCoresのサポートはロードマップ上にあると述べた。別のユーザは次のように言っている。
JVMがJavaに対するものであるのと同じように、TFRTに対してはTensorFlowです。TFRTで実行できる他のフレームワークを楽しみにしています。
TFRTおよびTensorFlowフレームワークのソースコードは、GitHubで入手できる。