よくある質問

TensorFlow Federated は、携帯電話などの実稼働設定で使用できますか?

現時点では使用できません。TFF は、実際のデバイスへのデプロイを念頭に設計されてはいますが、現段階では、この目的で提供されているツールはありません。現行リリースは、新しいフェデレーションアルゴリズムの表現や、フェデレーテッドラーニングを独自のデータセットで試すなど、含まれているシミュレーションランタイムを使用して実験的に使用することを目的としています。

いずれは、TFF にかかわるオープンソースエコシステムが進化して、物理的なデプロイプラットフォームをターゲットとするランタイムが含まれると予想しています。

大規模なデータセットを実験するには、TFF をどのように使用しますか?

TFF の初期リリースに含まれているデフォルトのランタイムは、チュートリアルに説明されているような小規模な実験のみを目的としています。チュートリアルの実験では、すべてのデータ(すべてのシミュレーションされるクライアント)は単一のマシンのメモリに同時に収まるため、実験全体を Colab ノートブック内でローカルに実行することができます。

ロードマップには、近い将来、非常に大規模なデータセットと多数のクライアントを使用した実験用の高性能ランタイムが含まれています。

TFF のランダム性が期待値に一致するようにするにはどうすればよいですか?

TFF には、フェデレーテッドコンピューティングがコアに含まれるため、TFF のライターは、どこでどのように TensorFlow Session が開始されるのか、これらのセッションで run が呼び出されるのかに対する制御を行う必要はありません。ランダム性のセマンティックは、シードが設定される場合に、TensorFlow Session の開始と終了に依存できます。TF 1.14 の tf.random.experimental.Generator などを使用して、TensorFlow 2 スタイルのランダム性を使用することをお勧めします。これは、tf.Variable を使用して、内部状態を管理します。

期待値を管理できるように、TFF はそれがシリアル化する TensorFlow で、グラフレベルのシードではなく、演算レベルのシードを設定できるようにしています。これは、演算レベルのシードのセマンティックが、TFF でより明確である必要があるためです。tf_computation としてラッピングされる関数が呼び出されるたびに確定的なシーケンスが生成され、この呼び出し内でのみ、疑似乱数ジェネレータによる保証が保持されます。これは、eager モードで tf.function を呼び出すセマンティックとまったく同じではないことに注意してください。TFFは、tf_computation が呼び出されるたびに一意の tf.Session を開始して終了しますが、eager モードで関数を繰り返し呼び出すことは、同じセッション内で出力テンソルに対して繰り返し sess.run を呼び出すのに変わりません。

どうすれば貢献できますか?

README貢献者向けガイドライン、およびコラボレーションをご覧ください。

FedJAX と TensorFlow Federated? にはどのような関係がありますか?

TensorFlow Federated(TFF)は、異なるアルゴリズムと特徴を計算しやすくするために設計され、さまざまなシミュレーションとデプロイのシナリオにおいてコードの移植を可能にする、連合学習と分析のためのフル機能フレームワークです。TFF にはスケーラブルなランタイムが備わっており、数多くのプライバシー、圧縮、および最適化アルゴリズムを標準 API によってサポートしています。TFF はまた、多くの種類の FL リサーチもサポートしており、発表済みの Google 論文からのサンプル集が google-research リポジトリに公開されています。

一方で、FedJAX は軽量の Python ベースおよび JAX ベースのシミュレーションライブラリで、研究目的で連合学習アルゴリズムの使いやすさと高速プロトライピングに焦点が当てられています。TensorFlow Federated と FedJAX は個別のプロジェクトとして開発されており、コードの移植性は期待されていません。