0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Tensorflow】グラフ実行ってなんやねん。

Posted at

はじめに

TensorFlow のグラフ実行のイメージがわかずあれこれ調べて、
大まかな仕組みを理解できたので共有します。

1. 「設計図」をつくる(グラフの構築)

  • @tf.function を付けた関数内で行う演算を記録し、ノード(演算)とエッジ(テンソルの流れ)からなる計算グラフを作成
  • まだ実際の計算は実行せず、「何をどう計算するか」のレシピだけを宣言している段階
@tf.function
def recipe(x):
    y = x * 2      # ノード①:スケーリング
    return y + 1   # ノード②:加算


2. 自動最適化(Grappler)

  • 作成したグラフに対して TensorFlow が自動的に最適化を適用
    • 定数折り畳み2*const のような計算を事前にまとめる
    • 演算融合:連続する演算をひとつの高速処理にまとめる
    • 不要ノード削除:使われない部分を切り捨てる
  • 必要に応じて XLA(JIT コンパイラ)も有効化でき、さらに高度な最適化が可能

3. 一気に「調理」する(グラフの実行)

  • 最適化済みグラフをまとめて一度に実行
  • GPU/TPU 等、割り当てられたデバイス上で高速に動く
  • 同じグラフは何度でも再利用できるため、大量データを高速に処理可能
# 実際に入力テンソルを渡してまとめて計算
result = recipe(tf.constant([3.0, 4.0]))
print(result.numpy())  # → [7. 9.]


メリット・注意点

  • メリット
    • 一度最適化されたグラフは繰り返し高速実行できる
    • 本番投入時の性能・移植性が高い
  • 注意点
    • 初回のトレース&最適化に時間がかかる
    • デバッグ時は中身が見えにくいので、開発中は Eager モード(即時実行)で動作確認するのがおすすめ

使い分けの流れ

  1. Eager 実行 で「1行ずつ」動きを確認 →
  2. 安定したら @tf.function を付けてグラフ実行 →
  3. Grappler/XLA による最適化で性能アップ

このように「先に設計図を作って自動最適化→まとめて実行」する仕組みが、
TensorFlow のグラフ実行の大きな特徴です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?