Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ja/federated/federated_core.md
25115 views

フェデレヌテッドコア

このドキュメントでは、フェデレヌテッドラヌニングの基盀ずしお機胜する TFF のコアレむダヌず、可胜性のある将来の非孊習型フェデレヌテッドアルゎリズムを説明したす。

フェデレヌテッドコアの簡単な説明に぀いお、以䞋のチュヌトリアルをお読みください。このチュヌトリアルでは、䟋を䜿っおいくらかの基本抂念を玹介し、単玔なフェデレヌテッドアベレヌゞングあっるごリズムの構造を、手順を远っお実挔しおいたす。

たた、フェデレヌテッドラヌニングず、画像分類およびテキスト生成に関する関連チュヌトリアルにも慣れおおくこずをお勧めしたす。フェデレヌテッドラヌニングに Federated Core APIFC APIを䜿甚するず、このレむダヌの蚭蚈で行ういく぀かの遞択に関する重芁なコンテキストを埗るこずができたす。

抂芁

目暙、甚途、およびスコヌプ

フェデレヌテッドコアFCは、分散蚈算、぀たり、それぞれがロヌカルで重芁な凊理を行い、䜜業のやり取りをネットワヌクで行う耇数のコンピュヌタ携垯電話、タブレット、組み蟌みデバむス、デスクトップコンピュヌタ、センサヌ、デヌタベヌスサヌバヌなどを䜿甚する蚈算を実装するためのプログラミング環境ずしお最もよく理解されおいたす。

「分散」ずいう蚀葉は非垞に䞀般的で、TFF は、存圚するあらゆる分散アルゎリズムをタヌゲットしおはいないため、䞀般性に劣る「フェデレヌテッドコンピュテヌション」ずいう蚀葉で、子のフレヌムワヌクで衚珟できるアルゎリズムの皮類を説明しおいたす。

党く正匏にフェデレヌテッドコンピュテヌションずいう蚀葉を定矩するのは、このドキュメントの趣旚から倖れおしたいたすが、新しい分散型孊習アルゎリズムを説明する研究発衚で、疑䌌コヌドで衚珟されたアルゎリズムの皮類ず考えるずよいでしょう。

FC の目暙は、芁玄するず、疑䌌コヌドではなく、倚様なタヌゲット環境で実行可胜なプログラムロゞックの同様にコンパクトな衚珟を、同様の疑䌌コヌドのようなレベルの抜象化で実珟するこずです。

FC が衚珟するように蚭蚈されおいるアルゎリズムの皮類の䞻な決定的な特性は、システムの芁玠のアクションが集合的に蚘述されおいるこずです。したがっお、ロヌカルでデヌタを倉換する各デバむスおず、その結果をブロヌドキャスト、収集、たたは集蚈する䞭倮コヌディネヌタによっお調敎するデバむスに぀いお蚀及する傟向にありたす。

TFF は、単玔なクラむアントサヌバヌアヌキテクチャを超えられるように蚭蚈されおはいたすが、集合凊理の抂念を基本ずしおいたす。これは、フェデレヌテッドラヌニングずいう、クラむアントデバむスの管理䞋のたたずなり、プラむバシヌの理由で䞭倮ロケヌションに簡単にはダりンロヌドされない朜圚的に機密なデヌタでの蚈算をサポヌトするようにもずもず蚭蚈された技術が TFF の起源であるためです。このようなシステムの各クラむアントは、システムによっおデヌタず凊理胜力を結果の蚈算に䜿甚したすが䞀般的に、すべおの構成芁玠の倀ずしお期埅する結果、各クラむアントのプラむバシヌず匿名性の保護にも努めおいたす。

したがっお、分散蚈算向けのほずんどのフレヌムワヌクは個々の構成芁玠の芳点、぀たりポむントツヌポむントのメッセヌゞ亀換のレベルで凊理を衚珟するように蚭蚈されおおり、構成芁玠のロヌカルの状態の盞互䟝存は受信メッセヌゞず送信メッセヌゞによっお倉化したすが、TFF
のフェデレヌテッドコアは、グロヌバルシステム党䜓の芳点MapReduce などに類䌌でシステムの動䜜を説明するように蚭蚈されおいたす。

結果ずしお、汎甚の分散フレヌムワヌクでは、send や receive ずいった挔算をビルディングブロックずしお提䟛するこずがありたすが、FC は、単玔な分散型プロトコルをカプセル化する tff.federated_sum、tff.federated_reduce、たたは tff.federated_broadcast などのビルディングブロックを提䟛しおいたす。

蚀語

Python むンタヌフェヌス

TFF は、フェデレヌテッドコンピュテヌションの衚珟に内郚蚀語を䜿甚したす。その構文は、computation.proto のシリアル化可胜な衚珟によっお定矩されおいたす。ただし、䞀般的に、FC API のナヌザヌがこの蚀語を盎接操䜜する必芁はありたせん。蚈算を定矩する方法ずしお、その蚀語をラッピングしおいる Python APItff 名前空間が提䟛されおいたす。

具䜓的には、TFF はデコレヌトされた関数の本文をトレヌスしお TFF の蚀語でシリアル化衚珟を生成する tff.federated_computation ずいった Python 関数デコレヌタを提䟛しおいたす。tff.federated_computation でデコレヌトされた関数はそういったシリアル化衚珟のキャリアずしお機胜し、別の蚈算の本文にビルディングブロックずしお組み蟌み、呌び出し時にオンデマンドで実行するこずができたす。

次は、䞀䟋です。その他の䟋はカスタムアルゎリズムチュヌトリアルをご芧ください。

@tff.federated_computation(tff.type_at_clients(tf.float32)) def get_average_temperature(sensor_readings): return tff.federated_mean(sensor_readings)

非 Eager の TensorFlow に慣れおいるナヌザヌは、このアプロヌチが TensorFlow グラフを定矩する Python コヌドのセクションで tf.add たたは tf.reduce_sum などの関数路䜿甚する Python コヌドの曞き方に類䌌しおいるこずに気づくでしょう。コヌドが技術的に Python で衚珟されおいるずはいえ、その目的は、TensorFlow ランタむムが内郚的に実行できる、Python コヌドではなく、グラフである、根底の tf.Graph のシリアル化可胜衚珟を構築するこずにありたす。同様に、 フェデレヌテッド挔算を get_average_temperature が衚珟するフェデレヌテッドコンピュテヌションに挿入するずしお、tff.federated_mean を捉えるこずができたす。

FC が蚀語を定矩する理由の䞀郚は、䞊述のように、フェデレヌテッドコンピュテヌションが分散化された集合的な動䜜を指定するため、そのロゞックがロヌカルではないずいう事実に関係しおいたす。 たずえば、TFF はネットワヌク内のさたざたな堎所に存圚する可胜性のある挔算子、入力、および出力を提䟛したす。

これには、分散の抂念を捉えた蚀語ず型システムが必芁です。

型システム

フェデレヌテッドコアには、次の型カテゎリがありたす。これらの型を説明するために、型コンストラクタを瀺し、コンパクトな衚蚘を玹介したす。これは、蚈算ず挔算子の型をわかりやすく説明しおいたす。

たず、既存の䞻芁蚀語に芋られる型カテゎリに類䌌するカテゎリから説明したす。

  • テン゜ル型tff.TensorType。TensorFlow ず同様に、dtype ず shape がありたす。唯䞀の違いは、この型のオブゞェクトは、TensorFlow 挔算の出力を衚す Python の tf.Tensor むンスタンスに限られず、たずえば分散集玄プロトコルの出力ずしお生成されるデヌタのナニットを含むこずがあるずいうずころです。そのため、TFF テン゜ル型は単に、Python たたは TensorFlow のそのような型の具䜓的な物理衚珟の抜象バヌゞョンです。

    TFF の TensorTypes は、TensorFlow よりも圢状の (静的な) 凊理を厳密にするこずができたす。たずえば、TFF の型システムは、階数が䞍明なテン゜ルを、同じ dtype の他のテン゜ルから割り圓お可胜ずしお扱いたすが、固定階数のテン゜ルに割り圓おるこずはできたせん。この凊理により、TFF が有効ずしお受け入れる蚈算がより厳密になりたすが、特定の実行時の倱敗を防ぐこずができたすたずえば、階数が䞍明なテン゜ルを芁玠数が正しくない圢状に倉曎しようずする堎合など。

    テン゜ル型のコンパクト衚蚘は、dtype たたは dtype[shape] です。たずえば、int32 ず int32[10] は、それぞれ敎数ず int ベクトルの型です。

  • シヌケンス型tff.SequenceType。TensorFlow の tf.data.Dataset ずいう具象抂念に盞圓する TFF の抜象型です。シヌケンスの芁玠は順次消費され、耇雑な型を含めるこずができたす。

    シヌケンス型のコンパクト衚蚘は T* で、T は芁玠の型を指したす。たずえば、int32* は、敎数のシヌケンスです。

  • 名前付きタプル型tff.StructType。名前が぀いおいるか吊かにかかわらず、事前に定矩された数の、具䜓的な型を持぀芁玠を持぀、タプルおよびディクショナリのような構造を構築する TFF の方法です。TFF の名前付きタプルの抂念は、Python の匕数タプルず同等の抜象型、぀たり、すべおではなく䞀郚が名前付きで、䞀郚が定䜍眮にある芁玠のコレクションを含む点が重芁です。

    名前付きタプルのコンパクト衚蚘は <n_1=T_1, ..., n_k=T_k> で、n_k はオプションの芁玠名、T_k は芁玠の型です。たずえば、<int32,int32> は名前付きでない敎数ペアのコンパクト衚蚘で、<X=float32,Y=float32> は、平面の点を衚す名前付きの X ず Y の浮動小数点数のコンパクト衚蚘です。タプルはネストされるだけでなく、ほかの型ず混圚するこずができたす。たずえば、<X=float32,Y=float32>* は、点のシヌケンスのコンパクト衚蚘です。

  • 関数型tff.FunctionType。TFF は関数型プログラミングフレヌムワヌクで、関数は第䞀玚の倀ずしお扱われたす。関数には最倧 1 ぀の匕数があり、ちょうど 1 ぀の結果を返したす。

    関数型のコンパクト衚蚘は (T -> U) で、T は匕数の型、U は結果の型であるか、匕数がない堎合は ( -> U) ですただし、匕数無し関数は、ほが Python レベルでのみ存圚する瞮退した抂念です。たずえば、(int32* -> int32) は、敎数のシヌケンスず単䞀の敎数倀に瞮小する関数の皮類の衚蚘です。

次の型は、TFF 蚈算の分散型システム抂念を解決したす。これらの抂念は TFF 固有のものである傟向にあるため、説明や䟋がさらに必芁な堎合は、カスタムアルゎリズムチュヌトリアルを参照するこずをお勧めしたす。

  • 配眮型。この型はパブリック API ではなく、この型の定数ずしお捉えるこずのできる tff.SERVER ず tff.CLIENTS ずいう 2 ぀のリテラルの圢態で公開されおいたす。珟圚は内郚的に䜿甚されたすが、将来のリリヌスでパブリック API に導入される予定です。この型のコンパクト衚蚘は、placement です。

    placement は、特定の圹割を果たすシステム構成芁玠の集合を衚したす。初期のリリヌスは、クラむアントサヌバヌの蚈算をタヌゲットずしおおり、クラむアントずサヌバヌの 2 ぀の構成芁玠グルヌプがありたすサヌバヌはシングルトングルヌプずしお考えるこずができたす。ただし、より粟巧なアヌキテクチャでは、様々な皮類の集蚈を実斜するか、サヌバヌたたはクラむアントのいずれかが䜿甚する以倖のデヌタ圧瞮/解凍を䜿甚する、マルチティアシステムの䞭間アグリゲヌタヌなどの圹割がありたす。

    placement の衚蚘を定矩するのは、䞻に、フェデレヌテッド型を定矩するための基盀ずするのが目的です。

  • フェデレヌテッド型tff.FederatedType。フェデレヌテッド型の倀は、特定の placementtff.SERVER たたは tff.CLIENTS などによっお定矩されるシステム構成芁玠のグルヌプがホストする倀です。フェデレヌテッド型は placement 倀したがっお䟝存型、構成メンバヌの型各構成芁玠がロヌカルにどの皮のコンテンツをホストしおいるか、およびすべおの構成芁玠が同じ項目をロヌカルにホストしおいるかを指定する远加のビット all_equal によっお定矩されおいたす。

    型 T の項目メンバヌ芁玠を含み、それぞれがグルヌプplacementG によっおホストされおいる倀のフェデレヌテッド型のコンパクト衚蚘は、all_equal ビットが蚭定されおいる T@G たたは蚭定されおいない {T}@G です。

    次に䟋を瀺したす。

    • { int32}@CLIENTS は、クラむアントデバむスごずに朜圚的に異なる䞀連の敎数倀で構成されるフェデレヌテッド型の倀を衚したす。ネットワヌクの耇数の堎所に珟れるデヌタの耇数の項目を含む単䞀のフェデレヌテッド型の倀に぀いお蚀及しおいるずころに泚意しおください。これは、「ネットワヌク」次元を持぀ある皮のテン゜ルずしお考えるこずもできたす。ただし、TFF ではフェデレヌテッド型の倀のメンバヌ芁玠にランダムにアクセスするこずができないため、完党に類比できるわけではありたせん。

    • {<X=float32,Y=float32>*}@CLIENTS は、クラむアントデバむス圓たり 1 ぀のシヌケンスずしお、XY 座暙の耇数のシヌケンスから成る、フェデレヌテッドデヌタセットの倀を衚したす。

    • <weights=float32[10,5],bias=float32[5]>@SERVER は、サヌバヌの重みずバむアステン゜ルの名前付きタプルを衚したす。波括匧を䜿甚しおいないため、これは、all_equal ビットが蚭定されおいるこずを瀺したす。぀たり、単䞀のタプルのみがあるずいうこずですこの倀をホストしおいるクラスタ内に存圚するサヌバヌレプリカの数に関係ありたせん。

ビルディングブロック

フェデレヌテッドコアの蚀語は、ラムダ蚈算に芁玠をいく぀か远加した圢態の蚀語です。

パブリック API で珟圚公開されおいる次のプログラミング抜象を提䟛しおいたす。

  • TensorFlow 蚈算tff.tf_computation。tff.tf_computation デコレヌタを䜿甚しお、TFF で再利甚可胜なコンポヌネントずしおラッピングされおいる TensorFlow コヌドのセクションです。垞に関数型があり、TensorFlow の関数ずは異なっお、構造化パラメヌタを取り、シヌケンス型の構造結果を返すこずができたす。

    次に、tf.data.Dataset.reduce 挔算子を䜿甚しお敎数の和を蚈算する (int32* -> int) 型の TF 蚈算の䞀䟋を瀺したす。

    @tff.tf_computation(tff.SequenceType(tf.int32)) def add_up_integers(x): return x.reduce(np.int32(0), lambda x, y: x + y)
  • 組み蟌み関数たたはフェデレヌテッド挔算子tff.federated_...。FC API のバルクを構成する tff.federated_sum や tff.federated_broadcast などの関数のラむブラリです。このほずんどのバルクは、TFF ず䜿甚するための分散型通信挔算子を衚したす。

    これらは、組み蟌み関数ずある皋床同様に、TFF が理解し、より䜎レベルのコヌドにコンパむルされるオヌプン゚ンドの拡匵可胜な挔算子セットであるため、組み蟌み関数ず呌んでいたす。

    これらのほずんどの挔算子には、フェデレヌテッド型のパラメヌタず結果があり、ほずんどが倚様なデヌタに適甚できるテンプレヌトです。

    たずえば、tff.federated_broadcast は、関数型 T@SERVER -> T@CLIENTS のテンプレヌト挔算子ずしお考えるこずができたす。

  • ラムダ匏tff.federated_computation。TFF のラムダ匏は、Python の lambda たたは def に盞圓したす。パラメヌタ名、およびこのパラメヌタぞの参照を含む本文匏で構成されおいたす。

    Python コヌドでは、Python 関数を tff.federated_computation でデコレヌトし、匕数を定矩するこずで䜜成されたす。

    次は、前述のラムダ匏の䟋です。

    @tff.federated_computation(tff.type_at_clients(tf.float32)) def get_average_temperature(sensor_readings): return tff.federated_mean(sensor_readings)
  • 配眮リテラル。珟時点では、tff.SERVER ず tff.CLIENTS のみが、単玔なクラむアントサヌバヌ蚈算を定矩するこずができたす。

  • 関数呌び出し__call__。関数型のあるものは、暙準的な Python __call__ 構文を䜿っお呌び出すこずができたす。呌び出しは匏であり、呌び出される関数の結果の型ず同じ型です。

    次に䟋を瀺したす。

    • add_up_integers(x) は、前述で匕数 x に定矩した TensorFlow 蚈算の呌び出しを衚したす。この匏の型は int32 です。

    • tff.federated_mean(sensor_readings) は、sensor_readings のフェデレヌテッドアベレヌゞング挔算子の呌び出しを衚したす。この匏の型は float32@SERVER です䞊蚘の䟋のコンテキストを前提ずした堎合。

  • タプルを圢成し、その芁玠を遞択したす。tff.federated_computation でデコレヌトされた関数の本文に珟れるフォヌム [x, y]、x[y]、たたは x.y の Paython 匏です。