SlideShare a Scribd company logo
@Vengineer
2017/3/20
TensorFlow XLA
コード解析 : AOT編
チラ見版
勉強会主催 :
Xilinx Zynq MPSoC (2016/02/20)
Altera SDK for OpenCL (2016/06/10)
Xilinx SDSoC (2017/01/28)
PYNQ祭り (2017/03/04)
FPGAディープラーニング実践懇親会 (2017/05/20)
ブログ : Vengineerの戯言
http://blogs.yahoo.co.jp/verification_engineer
Twitter : @Vengineer
書籍 : SystemVerilogスタートアップ
http://www.cqpub.co.jp/hanbai/books/36/36191.htm
自己紹介
TensorFlow XLAとは
https://www.tensorflow.org/performance/xla/
XLA(Accelerated Linear Algebra)は、TensorFlow計算を最適化
する線形代数のドメイン固有のコンパイラです。 結果として、サー
バーおよびモバイルプラットフォームでの速度、メモリ使用率、移植性
が向上します。 当初、ほとんどのユーザーはXLAの大きなメリットは
見られませんが、JIT(Just-In-Time)コンパイルや
AOT(Ahead-Of-Time)コンパイルを使用してXLAを使用することで
実験を開始できます。 新しいハードウェアアクセラレータをターゲット
とする開発者は、XLAを試すことを特にお勧めします。
原文(英語)をそのまま、Google翻訳にお願いしました。
ブログにも書きました
TensorFlow XLAの衝撃
2017年2月20日
http://blogs.yahoo.co.jp/verification_engineer/71016304.html
簡単にまとめると
TensorFlow XLAでは、次の2つをサポートした
1)、JIT (Just-In-Time) コンパイル
ただし、単一マシンのみで、GPUは1つ
2)、AOT (Ahead-Of-Time) コンパイル
CPUのみ
x86/x86-64/ARM/AARCH64/PowerPC
この資料は、
TensorFlow XLAの
AOTに関するコードを解析したものをまと
めたです。
ご利用は、自己責任でお願いします。
Using AOT compilation
https://www.tensorflow.org/performance/xla/tfcompile
・tfcompileって、何?
・tfcompileは、何をする?
・tfcompileを使うには!
現時点(TensorFlow r1.0) では、AOTのターゲットは
CPU(x86/x86-64/ARM/ARM64/PowerPC)のみサポート。
tfcompileって、何?
・TensorFlowグラフを実行可能コードにコンパイルす
るためのツール
・バイナリサイズおよびランタイムオーバーヘッドを減ら
す
・利用例:推論グラフをモバイルデバイス用の実行可
能コードにコンパイル
ランタイムが無くなる
TensorFlowグラフは通常、TensorFlowランタイムに
よって実行されます。 これにより、グラフ内の各ノード
の実行ではランタイムオーバヘッドを招く。 グラフ自体
に加えて、TensorFlowランタイム用のコードが必要で
あるため、バイナリサイズが大きくなる。
tfcompileによって生成される実行可能コードは、
TensorFlowランタイムを使用せず、計算で実際に使
用されるカーネルにのみ依存する。
tfcompileは、何をする?
tfcompileは、TensorFlowサブグラフからそのサブグ
ラフを実装する関数を生成する。
Feedは関数の入力引数、Fetchは関数の出力引数と
なる。
すべてのPalceholdersとVariablesは、関数の入力引
数としてFeedとして指定する必要がある。
tfcompileによって生成されたファイルは、関数のオブ
ジェクトファイルとして利用できる。
tfcompileを使うには!
ステップ1:コンパイルするサブグラフを構成する
ステップ2:tf_libraryビルドマクロを使用してサブグラ
フをコンパイルする
ステップ3:サブグラフを呼び出すコードを書く
ステップ4:最終的なバイナリを作成する
tfcompile
バイナリでは提供されていない
ので、ソースコードからビルドす
る必要がある
ディレクトリ構成
compilerディレクトリがTensorFlow XLA
・aot
・jit
・tests
・tf2xla
・xla
AOT関連は、主に、aotディレクトリ内にある
TensorFlowは、
Bazelを使ってビルドしていますので、
Bazel : https://bazel.build/
まずは、BUILDファイル
aot/BUILD
cc_binary(
name = "tfcompile",
visibility = ["//visibility:public"],
deps = [":tfcompile_main"],
)
tfcompile_main
tfcompile_main
aot/BUILD
cc_library(
name = "tfcompile_main",
srcs = ["tfcompile_main.cc"],
visibility = ["//visibility:public"],
deps = [
":tfcompile_lib",
":tfcompile_proto",
…..
],
)
tfcompile_main.cc
tfcompile_main.cc
int main(int argc, char** argv) {
各種処理フラグの設定
tensorflow::tfcompile::MainFlags flags;
flags.target_triple = "x86_64-pc-linux";
flags.out_object = "out.o";
flags.out_header = "out.h";
std::vector<tensorflow::Flag> flag_list;
AppendMainFlags(&flag_list, &flags);
xla::legacy_flags::AppendCompilerFunctorFlags(&flag_list);
xla::legacy_flags::AppendCpuCompilerFlags(&flag_list);
xla::legacy_flags::AppendCpuRuntimeFlags(&flag_list);
tfcompile_main.cc
引数の処理
tensorflow::string usage = tensorflow::tfcompile::kUsageHeader;
usage += tensorflow::Flags::Usage(argv[0], flag_list);
bool parsed_flags_ok = tensorflow::Flags::Parse(&argc, argv, flag_list);
tensorflow::port::InitMain(usage.c_str(), &argc, &argv);
tensorflow::tfcompile::Main(flags);
return 0;
}
tfcompile::Main
aot/tfcompile_main.cc
コンフィグファイルとグラフファイルの読み込み
ReadProtoFile("config", flags.config, &config);
ReadProtoFile("graph", flags.graph, &graph_def);
グラフの初期化
InitGraph(graph_def, config, flags, &flib, &graph);
グラフのコンパイル
CompileGraph(std::move(graph), flags, &flib, &compile_result);
ファイル(オブジェクト、ヘッダ)の書き出し
WriteStringToFile( …., …., …. );
グラフ
情報
コンフィグ
情報
グラフ情報
をHLO(最適化)に変換
HLOをLLVMで
CPU実行コードに変換
オブジェクトファイルへ
の出力
ProtoFileの読み込み
aot/tfcompile_main.cc
if (StringPiece(fname).ends_with(".pbtxt")) {
core/platform/env.cc
return ReadTextProto(Env::Default(), fname, proto);
} else {
core/platform/env.cc
return ReadBinaryProto(Env::Default(), fname, proto);
}
グラフの初期化
aot/compile.cc : InitGraph
新しいグラフを生成
std::unique_ptr<Graph> g(new Graph(flib));
GraphDef copy_def(graph_def);
AddDefaultAttrsToGraphDef(&copy_def, *g->op_registry(), 0);
グラフ定義(GraphDef)からグラフに変換
ConvertGraphDefToGraph(GraphConstructorOptions(), copy_def, g.get());
Feed/Fetchをノード(_Arg/Retval)としてグラフに追加
RewriteAndPruneGraph(g.get(), config, flags));
グラフのコンパイル
aot/compile.cc : CompileGraph
TensorFlowグラフをXLA(HLO)フォーマットに変換
ConvertGraphToXla(client, std::move(graph), flib,
&computation, &compile_result->has_context_arg);
コンパイルオプションの設定
xla::cpu::CpuAotCompilationOptions aot_opts(
flags.target_triple, flags.target_cpu, flags.target_features,
flags.entry_point,
xla::cpu::CpuAotCompilationOptions::RelocationModel::BigPic);
XLA(HLO)をコンパイル
return CompileXla(client, computation, aot_opts, compile_result);
ファイルの書き出し
aot/tfcompile_main.cc:Main
オブジェクトファイルの書き出し
const std::vector<char>& obj = compile_result.aot->object_file_data();
WriteStringToFile(env, flags.out_object, StringPiece(obj.data(), obj.size()));
CPPクラス名の解析
ParseCppClass(flags.cpp_class, &header_opts.class_name,
&header_opts.namespaces));
ヘッダの生成
GenerateHeader(header_opts, config, compile_result, &header));
ファイルの書き出し
WriteStringToFile(env, flags.out_header, header));
ありがとうございました

More Related Content

What's hot (20)

PDF
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
marsee101
 
PDF
Pynqでカメラ画像をリアルタイムfastx コーナー検出
marsee101
 
PDF
FPGAアクセラレータの作り方
Mr. Vengineer
 
PDF
高位合成ツールVivado hlsのopen cv対応
marsee101
 
PPTX
Polyphony 新機能ツアー
ryos36
 
PDF
Pynq祭り資料
一路 川染
 
PDF
Vivado hlsのシミュレーションとhlsストリーム
marsee101
 
PDF
Altera SDK for OpenCL解体新書 perlスクリプト編
Mr. Vengineer
 
PPTX
研究者のための Python による FPGA 入門
ryos36
 
PPTX
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
marsee101
 
PDF
FPGAスタートアップ資料
marsee101
 
PDF
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
 
PDF
Linux : PSCI
Mr. Vengineer
 
ODP
MPSoCのPLの性能について
marsee101
 
PPTX
SDSoC でストリーム
ryos36
 
PPTX
Gpgpu tomoaki-fp16
tomoaki0705
 
PPTX
C# 8.0 非同期ストリーム
信之 岩永
 
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
 
PDF
ACRiウェビナー:岩渕様ご講演資料
直久 住川
 
PDF
Inside FastEnum
Takaaki Suzuki
 
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
marsee101
 
Pynqでカメラ画像をリアルタイムfastx コーナー検出
marsee101
 
FPGAアクセラレータの作り方
Mr. Vengineer
 
高位合成ツールVivado hlsのopen cv対応
marsee101
 
Polyphony 新機能ツアー
ryos36
 
Pynq祭り資料
一路 川染
 
Vivado hlsのシミュレーションとhlsストリーム
marsee101
 
Altera SDK for OpenCL解体新書 perlスクリプト編
Mr. Vengineer
 
研究者のための Python による FPGA 入門
ryos36
 
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
marsee101
 
FPGAスタートアップ資料
marsee101
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
 
Linux : PSCI
Mr. Vengineer
 
MPSoCのPLの性能について
marsee101
 
SDSoC でストリーム
ryos36
 
Gpgpu tomoaki-fp16
tomoaki0705
 
C# 8.0 非同期ストリーム
信之 岩永
 
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
 
ACRiウェビナー:岩渕様ご講演資料
直久 住川
 
Inside FastEnum
Takaaki Suzuki
 

Viewers also liked (16)

PPTX
Summary of topic 1.2
Michael Smith
 
PPSX
Tecnologia en la prevencion del delito
ISMARITA25
 
PDF
ゆるふわコンピュータ (IPSJ-ONE2017)
Shinya Takamaeda-Y
 
PPTX
Summary of topic 1.3
Michael Smith
 
PDF
ARM Compute Library
Mr. Vengineer
 
PDF
TensorFlow White Paperを読む
Yuta Kashino
 
PPTX
AITP - Building the Foundation of Agile (ABRIDGED)
Michael Dougherty, SPC4, CSP
 
PPTX
Android Services
Ahsanul Karim
 
PPTX
Email signature and It's necessary
Sauvik Ray
 
PDF
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
徹 上野山
 
PDF
Alluxio: Unify Data at Memory Speed at Strata and Hadoop World San Jose 2017
Alluxio, Inc.
 
PDF
Java, JCP, Adopt-a-JSR & You DevNexus
Heather VanCura
 
PPTX
3Com 3C16941A
savomir
 
PDF
Presentation eq1
Raymond C. A.
 
PPTX
2 Principios físicos de la teledetección
cartografia cartografia
 
PDF
Cyberthreat Defense Report 2017 by Impreva
Ghader Ahmadi
 
Summary of topic 1.2
Michael Smith
 
Tecnologia en la prevencion del delito
ISMARITA25
 
ゆるふわコンピュータ (IPSJ-ONE2017)
Shinya Takamaeda-Y
 
Summary of topic 1.3
Michael Smith
 
ARM Compute Library
Mr. Vengineer
 
TensorFlow White Paperを読む
Yuta Kashino
 
AITP - Building the Foundation of Agile (ABRIDGED)
Michael Dougherty, SPC4, CSP
 
Android Services
Ahsanul Karim
 
Email signature and It's necessary
Sauvik Ray
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
徹 上野山
 
Alluxio: Unify Data at Memory Speed at Strata and Hadoop World San Jose 2017
Alluxio, Inc.
 
Java, JCP, Adopt-a-JSR & You DevNexus
Heather VanCura
 
3Com 3C16941A
savomir
 
Presentation eq1
Raymond C. A.
 
2 Principios físicos de la teledetección
cartografia cartografia
 
Cyberthreat Defense Report 2017 by Impreva
Ghader Ahmadi
 
Ad

More from Mr. Vengineer (20)

PDF
XilinxのxsimでSoftware Driven Verification.pdf
Mr. Vengineer
 
PDF
VerilatorとSystemCでSoftware Driven Verification
Mr. Vengineer
 
PDF
VerilatorとSystemC
Mr. Vengineer
 
PDF
TVM VTA (TSIM)
Mr. Vengineer
 
PDF
Cloud TPU Driver API ソースコード解析
Mr. Vengineer
 
PDF
Cloud Deep Learning Chips Training & Inference
Mr. Vengineer
 
PDF
TensorFlow Lite Delegateとは?
Mr. Vengineer
 
PDF
Pixel Visual Core device driver source code analysis
Mr. Vengineer
 
PDF
Google Edge TPUで TensorFlow Liteを使った時に 何をやっているのかを妄想してみる 2 「エッジAIモダン計測制御の世界」オ...
Mr. Vengineer
 
PDF
TensorFlow XLA 「XLAとは、から、最近の利用事例について」
Mr. Vengineer
 
PDF
Facebook Glow Compiler のソースコードをグダグダ語る会
Mr. Vengineer
 
PDF
Ultra96(UltraZed)実践勉強会
Mr. Vengineer
 
PDF
Bridge TensorFlow to run on Intel nGraph backends (v0.4)
Mr. Vengineer
 
PDF
Bridge TensorFlow to run on Intel nGraph backends (v0.5)
Mr. Vengineer
 
PDF
TensorFlow XLA RPC
Mr. Vengineer
 
PDF
TensorFlow local Python XLA client
Mr. Vengineer
 
PDF
Tiramisu をちょっと、味見してみました。
Mr. Vengineer
 
PDF
LeFlowを調べてみました
Mr. Vengineer
 
PDF
Tensorflow dynamically loadable XLA plugin ソースコード解析
Mr. Vengineer
 
PDF
Tiramisu概要
Mr. Vengineer
 
XilinxのxsimでSoftware Driven Verification.pdf
Mr. Vengineer
 
VerilatorとSystemCでSoftware Driven Verification
Mr. Vengineer
 
VerilatorとSystemC
Mr. Vengineer
 
TVM VTA (TSIM)
Mr. Vengineer
 
Cloud TPU Driver API ソースコード解析
Mr. Vengineer
 
Cloud Deep Learning Chips Training & Inference
Mr. Vengineer
 
TensorFlow Lite Delegateとは?
Mr. Vengineer
 
Pixel Visual Core device driver source code analysis
Mr. Vengineer
 
Google Edge TPUで TensorFlow Liteを使った時に 何をやっているのかを妄想してみる 2 「エッジAIモダン計測制御の世界」オ...
Mr. Vengineer
 
TensorFlow XLA 「XLAとは、から、最近の利用事例について」
Mr. Vengineer
 
Facebook Glow Compiler のソースコードをグダグダ語る会
Mr. Vengineer
 
Ultra96(UltraZed)実践勉強会
Mr. Vengineer
 
Bridge TensorFlow to run on Intel nGraph backends (v0.4)
Mr. Vengineer
 
Bridge TensorFlow to run on Intel nGraph backends (v0.5)
Mr. Vengineer
 
TensorFlow XLA RPC
Mr. Vengineer
 
TensorFlow local Python XLA client
Mr. Vengineer
 
Tiramisu をちょっと、味見してみました。
Mr. Vengineer
 
LeFlowを調べてみました
Mr. Vengineer
 
Tensorflow dynamically loadable XLA plugin ソースコード解析
Mr. Vengineer
 
Tiramisu概要
Mr. Vengineer
 
Ad

Recently uploaded (9)

PDF
セットトップボックス市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
snow326214
 
PPTX
Powering Performance: メルセデス・ベンツにおけるDatabricksとQlikのリアルなユースケース
QlikPresalesJapan
 
PDF
20250722_TECH TALK 事例発表 Qlikを活用したSAPデータ活用の事例紹介
QlikPresalesJapan
 
PDF
埋め込み型ドラッグデリバリーデバイスの成長予測:2031年には751百万米ドルに到達へ
2418867459
 
PDF
20250722_TECH TALK 事例発表 データ活用で未来を拓く!AI/機械学習が導くビジネス変革事例
QlikPresalesJapan
 
PDF
FeNO呼気分析装置市場、CAGR13.90%で成長し、2031年には290百万米ドル規模に
yhresearch
 
PDF
RV車市場、CAGR2.60%で成長し、2031年には37640百万米ドル規模に
yhresearch
 
PDF
工業用ミストシステム調査レポート:市場規模、シェア、産業分析データ、最新動向2025-2031 YH Research
2418867459
 
PPTX
BEIS ORIENTATION FOR S.Y2024 - 2025.pptx
AsmiraCo2
 
セットトップボックス市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
snow326214
 
Powering Performance: メルセデス・ベンツにおけるDatabricksとQlikのリアルなユースケース
QlikPresalesJapan
 
20250722_TECH TALK 事例発表 Qlikを活用したSAPデータ活用の事例紹介
QlikPresalesJapan
 
埋め込み型ドラッグデリバリーデバイスの成長予測:2031年には751百万米ドルに到達へ
2418867459
 
20250722_TECH TALK 事例発表 データ活用で未来を拓く!AI/機械学習が導くビジネス変革事例
QlikPresalesJapan
 
FeNO呼気分析装置市場、CAGR13.90%で成長し、2031年には290百万米ドル規模に
yhresearch
 
RV車市場、CAGR2.60%で成長し、2031年には37640百万米ドル規模に
yhresearch
 
工業用ミストシステム調査レポート:市場規模、シェア、産業分析データ、最新動向2025-2031 YH Research
2418867459
 
BEIS ORIENTATION FOR S.Y2024 - 2025.pptx
AsmiraCo2
 

TensorFlow XLA : AOT編 チラ見版