TFF で Python 関数を実行する
この例では、Python 関数が TFF computation になる過程と computation が TFF によってどのように評価されるかを簡単に説明します。
ユーザーの観点から見た計算:
tff.backends.native.set_sync_local_cpp_execution_context() # 3
@tff.tf_computation(tf.int32) # 2
def add_one(x): # 1
return x + 1
result = add_one(2) # 4
Python 関数を書きます。
Python 関数を
@tff.tf_computation
でデコレートします。注意: 現時点では、Python 関数がデコレートされていることが重要であって、具体的なデコレータ自体は重要ではありません。これについては、以下で詳しく説明します。
TFF のコンテキストを設定します。
Python 関数を呼び出します。
TFF の観点から見た計算:
Python が構文解析される際、@tff.tf_computation
デコレータは Python 関数をトレースして TFF computation を構築します。
デコレートされた Python 関数が呼び出されると、呼び出されるのは TFF computation であり、TFF はその computation を設定されたコンテキストでコンパイルして実行します。
TF と TFF と Python
tff.backends.native.set_sync_local_cpp_execution_context()
@tff.tf_computation(tf.int32)
def add_one(x):
return x + 1
@tff.federated_computation(tff.type_at_clients(tf.int32))
def add_one_to_all_clients(values):
return tff.federated_map(add_one, values)
values = [1, 2, 3]
values = add_one_to_all_clients(values)
values = add_one_to_all_clients(values)
>>> [3, 4, 5]
TODO(b/153500547): TF と TFF と Python の例を説明してください。