TensorFlowはGoogleが開発した機械学習/深層学習のライブラリで、GitHubにオープンソースソフトウェアとして公開されています。TensorFlowという名は、機械学習/深層学習にメインに携わっている人でなくても、その名前知っている方は多いかと思います。
TensorFlowはドキュメントやサンプルが充実していることから、TensorFlowを使うだけであれば、情報不足により困ることはほとんどありません。しかし、TensorFlowの内部構造を説明した資料は非常に少なく、TensorFlowの内部を理解するためにはソースコードを読む必要があります。
そこで、TensorFlowの内部構造を説明する記事を、連載で書きたいと思います。
現状書こうと考えている記事は以下の通りですが、執筆を進める中で構成の変更や記事の追加も考えたいと思います。
- データ構造
- Protocol Buffers形式のデータ構造
- Python API
- グラフ構築
- Session立ち上げ
- Python APIからC APIの呼び出し(SWIG)
- Operation自動生成
- C API
- C-C++への接続
- コア処理
- Session
- グラフ構築(GraphConstructor)
- デバイス割り当て(Placer)
- 計算グラフ最適化処理1 Grappler
- グラフ分割処理(Partition)
- 計算グラフ最適化処理2 GraphOptimizationPass
- 計算グラフ最適化処理3 GraphOptimizer
- ノードと演算の対応(Node、OpKernel間の関係)
- グラフ実行制御(Executor、スレッド割り当て)
- 各演算の実行(OpKernelContext、OpKernel)
- 各演算処理(OpKernel)
- デバイスの登録
- Tensorメモリの確保
- OpKernelの実装
- ConstantOp
- VariableOp
- PlaceHolderOp
- その他
- TensorFlowのデータ型
- Profiler機能