このページは Cloud Translation API によって翻訳されました。
Switch to English

モジュール:tf.distribute

TensorFlow 1つのバージョン

複数のデバイス間で計算を実行するためのライブラリ。

このライブラリの目的は、あなたが定型化された方法でアルゴリズムを記述することができ、それは違うの様々な利用可能になるということですtf.distribute.Strategy実装。それぞれの子孫は、複数のデバイス/マシン間のアルゴリズムを分配するためのさまざまな戦略を実装します。さらに、これらの変更は、ほとんどのユーザーモデルの定義コードを変更せずに実行できるように、特定の層と、分散環境で実行するための特別な処理を必要とする他のライブラリのクラス内で非表示にすることができます。 tf.distribute.Strategy APIは熱心とグラフ実行と同じように動作します。

ガイド

チュートリアル

用語集

  • 我々は、入力データの異なるスライス上のモデルの複数のコピーを実行しているデータの並列です 。これは、我々は、複数のデバイス間でモデルの単一のコピーを分割モデルの並列処理とは対照的です。注:我々は今だけのためにデータの並列処理をサポートしていますが、希望は将来のモデル並列処理のサポートを追加します。
  • デバイスは TensorFlow(例えば参照上で操作を実行できることをいくつかのマシン上のCPUまたはアクセラレータ(例えばGPUは、TPUは)あるtf.device )。あなたは、単一のマシン上で複数のデバイスを有していてもよく、または複数のマシン上のデバイスに接続すること。計算を実行するために使用されるデバイスは、 労働者のデバイスと呼ばれています。店舗変数に使用される装置は、 パラメータのデバイスです。以下のようないくつかの戦略についてtf.distribute.MirroredStrategy 、労働者およびパラメータのデバイスは、(下記のミラーリング変数を参照)と同じになります。他の人のために彼らは異なります。例えば、 tf.distribute.experimental.CentralStorageStrategy (作業者デバイスであってもよいし、CPUであってもよい)は、単一のデバイスに変数を置き、そしてtf.distribute.experimental.ParameterServerStrategyパラメータサーバと呼ばれる別のマシン上に表示する変数を置きます未満)。
  • レプリカは、入力データの1つのスライス上で実行されている、モデルのコピーです。今各レプリカは、独自のワーカーデバイス上で実行されますが、我々はモデルの並列処理のサポートを追加したら、レプリカは、複数のワーカー・デバイスにまたがることがあります。
  • ホストは、典型的には、入力パイプラインを実行するために使用されるワーカー・デバイスとマシンのCPU装置です。
  • 作業者は複製計算が実行されている物理デバイス(例えば、GPUは、のTPU)を含む物理マシン(S)であると定義されます。作業員は、一の以上のレプリカが含まれていますが、少なくとも一つのレプリカが含まれています。典型的には、1人の作業者は、一台のマシンに対応することになるが、モデル並列に非常に大規模なモデルの場合には、1つのワーカーは、複数のマシンにまたがってもよいです。私たちは通常、その作業者のすべてのレプリカを供給し、一人当たり1つの入力パイプラインを実行します。
  • 各レプリカからの更新がモデル変数を更新する前に、一緒に集約されている場合、同期 、またはより一般的に同期 、トレーニングがあります。これは、各レプリカが独立してモデル変数を更新し、非同期 、または非同期トレーニングとは対照的です。また、グループ間の各グループが、非同期以内に同期しているグループに分割レプリカを有することができます。
  • パラメータサーバ :これらは、いくつかの戦略(今だけで使用されるパラメータ/変数の単一コピー、保有機ですtf.distribute.experimental.ParameterServerStrategy )。変数を操作したいすべてのレプリカは、ステップの開始時にそれを取得し、ステップの終わりに適用するアップデートを送信します。これらのprinicipleサポートのいずれかの同期または非同期トレーニングでできますが、今、我々は唯一のパラメータサーバとの非同期のトレーニングをサポートしています。比較tf.distribute.experimental.CentralStorageStrategy同じマシン上の単一デバイス上のすべての変数を置く(および同期研修を行い)、およびtf.distribute.MirroredStrategy 、複数のデバイスへのミラー変数(下記参照)。

  • 更新コンテキストクロスレプリカコンテキストレプリカコンテキスト

    レプリカコンテキストは、あなたと呼ばれた演算機能の実行時に適用されstrategy.run 。複製されて演算機能を実行する際に概念的に、あなたはレプリカのコンテキストにいます。

    更新コンテキストをに入力されtf.distribute.StrategyExtended.updateコール。

    あなたが入力したときに、クロスレプリカコンテキストが入力されているstrategy.scope 。これは、呼び出すために有用であるtf.distribute.Strategyレプリカ間で操作するメソッド(のようなreduce_to()デフォルトでは、 レプリカのコンテキスト (「デフォルトの単一のレプリカの文脈 」)で開始し、その後、いくつかの方法が前後にあなたを切り替えることができます。

  • 分散値 :分散値は、基底クラスによって表されtf.distribute.DistributedValuestf.distribute.DistributedValues複数のデバイス上の値を表すために有用であり、それは値のレプリカIDからマップを含みます。 2つの代表的な種類のtf.distribute.DistributedValues 「PerReplica」と「ミラー」の値です。

    「PerReplica」値は、各レプリカの異なる値と、作業者デバイス上に存在します。彼らはによって返された分散データセットを反復処理することによって製造されるtf.distribute.Strategy.experimental_distribute_datasettf.distribute.Strategy.experimental_distribute_datasets_from_function 。彼らはまたによって返された典型的な結果であるtf.distribute.Strategy.run

    「ミラー」の値は、我々はすべてのレプリカ上の値が同じであることを知っている以外、「PerReplica」値のようなものです。私たちは、安全に任意のレプリカ上の値を使用することにより、クロスレプリカの文脈における「ミラー」の値を読み取ることができます。

  • アンラップマージ :関数呼び出しを検討fnように、複数の複製にstrategy.run(fn, args=[w])引数とwあることtf.distribute.DistributedValues 。この手段wレプリカID取るマップがあります0w0 、レプリカID 1w1strategy.run()アンラップw呼び出す前に、 fn 、それが呼び出して、 fn(w0)デバイス上d0fn(w1)デバイス上にd1 、等その後の戻り値マージfn()戻り値は、すべてのレプリカから同じオブジェクトである場合、または一つの共通のオブジェクトをもたらし、 DistributedValuesそうでなければオブジェクト。

  • 削減全減らす還元は 、「和」または「平均値」のように、一つの値に複数の値を集約する方法です。戦略は同期の訓練を行っている場合、我々はアップデートを適用する前に、すべてのレプリカからのパラメータに勾配の削減を実行します。 すべての-減らす複数のデバイスからの値の削減を実施し、それらのデバイスのすべての結果が利用できるようにするためのアルゴリズムです。

  • ミラーリングされた変数 :これらは、我々はすべてのコピーに同じアップデートを適用することにより、同期変数を保持し、複数のデバイス上に作成されている変数です。ミラーリングされた変数が使用して作成されtf.Variable(...synchronization=tf.VariableSynchronization.ON_WRITE...)通常、彼らは唯一の同期の訓練に使用されています。

  • SyncOnRead変数

    SyncOnRead変数はによって作成されtf.Variable(...synchronization=tf.VariableSynchronization.ON_READ...)およびそれらが複数のデバイス上で作成されます。レプリカ・コンテキストで、実行することができるローカルレプリカの各構成要素変数は、読み取り、互いに同期せずに書き込みます。 SyncOnRead変数はクロスレプリカ文脈で読まれるとき、コンポーネント変数の値を集計し、返されます。

    我々はインスタンス化するユーザーを奨励し、自分でSyncOnRead変数を使用しないようにSyncOnRead変数は 、基本的なロジックにカスタム設定の難易度の多くをもたらします。私たちは、主に、このようなバッチ規範とメトリックとして使用するケースのSyncOnRead変数を使用していました。パフォーマンス上の理由から、私たちはしばしば同期すべてのステップでこれらの統計を維持する必要はありません、彼らはそれぞれ独立したレプリカ上に蓄積することができます。我々はそれらを同期するだけの時間は、一般的にクロスレプリカコンテキストで起きた、報告やチェックポイントされます。 SyncOnRead変数も 、多くの場合、変数の値が集計されたときに制御したい上級ユーザーによって使用されています。たとえば、ユーザーが時々凝集することなく、ステップのカップルのための各レプリカに独立勾配を維持したいです。

  • 配布し、意識層

    層は一般Keras機能モデルを定義する場合を除き、レプリカ・コンテキストで呼び出されます。 tf.distribute.in_cross_replica_contextはあなたがである場合を判断できるようになる。レプリカコンテキストで、場合tf.distribute.get_replica_context機能は、戦略の範囲外で、デフォルトのレプリカのコンテキストを返しますNoneの戦略の範囲内、およびtf.distribute.ReplicaContext戦略の範囲内と内のオブジェクトtf.distribute.Strategy.run機能。 ReplicaContextオブジェクトが有するall_reduceすべてのレプリカを横切って集約する方法。

私たちは、デフォルトのバージョンを提供することを注意tf.distribute.Strategy他の戦略は、合理的なデフォルト動作と同じAPIを提供し、スコープ内にない場合に使用されています。

モジュール

cluster_resolverモジュール:ClusterResolversためのライブラリ輸入。

experimentalモジュール:実験流通戦略ライブラリ。

クラス

class CrossDeviceOps :クロスデバイスの低減及び放送アルゴリズムの基本クラス。

class DistributedDataset :機械・装置の間に分散データセットを表します。

class DistributedIterator :の反復子tf.distribute.DistributedDataset

class DistributedValues :分散値を表すための基本クラス。

class HierarchicalCopyAllReduce :削減はすべて削減階層的なコピーを使用して。

class InputContext :入力機能が必要とするクラスラッピング情報。

class InputOptions :のためのファイル名を指定して実行オプションexperimental_distribute_dataset(s_from_function)

class InputReplicationMode :入力機能のための複製モード。

class MirroredStrategy :一台のマシン上に複数のレプリカ間の同期トレーニング。

class NcclAllReduce :NCCLはすべて-減らす使用削減。

class OneDeviceStrategy :単一デバイス上で実行するための流通戦略。

class ReduceOp :値のセットを削減する方法を示します。

class ReductionToOneDevice :常に最初のデバイスへの削減を行い、その後、放送ありません。

class ReplicaContexttf.distribute.Strategy APIレプリカコンテキストインチ

class RunOptions :のための実行オプションstrategy.run

class Server :アンインプロセスTensorFlowサーバ、分散訓練で使用します。

class Strategy :デバイスのリスト上の状態&計算配布ポリシー。

class StrategyExtended :分布を意識する必要がアルゴリズムのための追加のAPI。

class TPUStrategy :TPU類とTPUポッドに同期トレーニング。

関数

experimental_set_strategy(...)セットtf.distribute.Strategyせずに、現在のようwith strategy.scope()

get_replica_context(...)戻り値:現在のtf.distribute.ReplicaContextまたはNone

get_strategy(...)現在の返しtf.distribute.Strategyオブジェクトを。

has_strategy(...)リターン現在のデフォルト以外がある場合tf.distribute.Strategy

in_cross_replica_context(...)戻り値: Trueクロスレプリカのコンテキストであれば。