Birleşik Çekirdek

Bu belge, temel olarak hizmet eden TFF çekirdek tabakasını tanıtır Federe Öğrenme ve gelecekteki muhtemel olmayan öğrenme federe algoritmalar.

Federated Core'a nazik bir giriş için, bazı temel kavramları örneklerle tanıttıklarından ve basit bir birleşik ortalama algoritmasının yapımını adım adım gösterdiklerinden, lütfen aşağıdaki öğreticileri okuyun.

Biz de yakından tanımak için teşvik edecek Federe Öğrenme ve üzerinde ilişkili öğreticiler görüntü sınıflandırma ve metin nesil birleşik öğrenme için Federe Çekirdek API kullanır (FC API) biz Yaptığım seçimler bazıları için önemli bir bağlam oluşturuyor olarak, Bu katmanı tasarlamak.

genel bakış

Hedefler, Kullanım Amaçları ve Kapsam

Federated Core (FC) en iyi şekilde, dağıtık hesaplamaları, yani her biri farklı performans gösterebilen birden fazla bilgisayarı (cep telefonları, tabletler, gömülü cihazlar, masaüstü bilgisayarlar, sensörler, veritabanı sunucuları vb.) içeren hesaplamaları uygulamak için bir programlama ortamı olarak anlaşılır. yerel olarak önemsiz işleme ve işlerini koordine etmek için ağ üzerinden iletişim kurma.

Dağıtılmış terim çok genel olduğunu ve bu çerçevede ifade edilebilir algoritmaların türlerini tanımlamak için daha az genel bir terim federe hesaplama kullanmayı tercih böylece TFF, orada dağıtılan algoritmalar olası tüm türleri hedef almaz.

Tam resmi bir şekilde terim federe hesaplama tanımlayan dışında, bu belgenin kapsamı olsa da, bir pseudocode ifade bkz olabilir algoritmaların türleri düşünmek araştırma yayının yeni bir dağıtılmış öğrenme algoritması anlatılmaktadır.

FC hedefi, bir nusthell içinde, hedef ortamlarda çeşitli yürütülebilir var oldukça benzer kompakt yalancı kod değil programı mantığının soyutlama benzer yalancı kod benzeri düzeyinde temsil, ancak, sağlamaktır.

FC'nin ifade etmek için tasarlandığı algoritma türlerinin temel tanımlayıcı özelliği, sistem katılımcılarının eylemlerinin toplu bir şekilde tanımlanmasıdır. Böylece, yerel veri dönüştürme her cihaz hakkında konuşmak eğilimindedir ve cihazlar, merkezi bir koordinatör yayın çalışmalarını koordine toplama veya bunların sonuçlarını toplayarak.

TFF basit istemci-sunucu mimarileri ötesine edebilmek için tasarlanmış olsa da, toplu işleme kavramı esastır. Bunun nedeni, TFF'nin orijinal olarak istemci cihazlarının kontrolü altında kalan ve gizlilik nedenleriyle merkezi bir konuma indirilemeyen potansiyel olarak hassas veriler üzerindeki hesaplamaları desteklemek için tasarlanmış bir teknoloji olan federe öğrenmedeki kökenleridir. Bu tür sistemlerdeki her müşteri, sistem tarafından bir sonucun hesaplanmasına yönelik veri ve işlem gücüne katkıda bulunurken (genelde tüm katılımcılar için değerli olmasını beklediğimiz bir sonuç), ayrıca her müşterinin gizliliğini ve anonimliğini korumaya çalışıyoruz.

Bu nedenle, dağıtılmış bilgi işlem çerçevelerinin çoğu, bireysel katılımcıların bakış açısıyla - yani bireysel noktadan noktaya mesaj alışverişi düzeyinde ve katılımcının yerel durum geçişlerinin gelen ve giden mesajlarla karşılıklı bağımlılığını - ifade etmek için tasarlanırken , TFF'nin Federe Çekirdek (örneğin benzer küresel sistem çapında bir perspektiften sistemin davranışını tanımlamak için tasarlanmıştır mapreduce ).

Genel amaçlı dağıtılan çerçevelerin bu send işlemleri sağlar ve yapı taşları olarak alabilirken, Sonuç olarak, FC gibi yapı taşları içerir tff.federated_sum , tff.federated_reduce veya tff.federated_broadcast kapsülü basit protokolleri dağıtılan.

Dilim

Python Arayüzü

TFF federe hesaplamaları temsil etmek bir iç dil kullanan, sözdizimi içinde seri hale getirilebilir temsil tanımlanır computation.proto . FC API kullanıcılarının genellikle bu dille doğrudan etkileşime girmesine gerek yoktur. Aksine, biz bir Python API (sağlamak tff giydirme hesaplamalar tanımlamak için bir yol olarak bunu arounds o ad).

Özellikle, TFF gibi Python fonksiyonu dekoratörler sağlar tff.federated_computation izi olduğu dekore fonksiyonların organları ve TFF'nin dilinde federe hesaplama mantığının tefrika temsillerini üretirler. Süslenmiş bir işlev tff.federated_computation gibi seri temsil bir taşıyıcı olarak görev yapan ve bir hesaplama gövdesinde bir yapı bloğu olarak yerleştirebilir veya çağrıldığında talep üzerine çalıştırmak.

İşte sadece bir örnek; fazla örnek bulunabilir özel algoritmalar öğreticiler.

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

Olmayan istekli TensorFlow aşina Okuyucular Python kodu yazmak için bu yaklaşım, benzer bulacaksınız gibi kullanım fonksiyonları bu tf.add veya tf.reduce_sum bir TensorFlow grafik tanımlar Python kodu bir bölümü. Kod teknik Python ifade edilir de olsa, amacı, bir bir seri temsilini oluşturmak için tf.Graph alt kısımda ve dahili olarak TensorFlow çalışma yürütür grafiktir Python koddur. Aynı şekilde, bir aklınıza gelebilecek tff.federated_mean ile temsil federe hesaplama içine federe op ekleme gibi get_average_temperature .

FC'nin bir dili tanımlamasının nedeninin bir kısmı, yukarıda belirtildiği gibi, birleşik hesaplamaların dağıtılmış toplu davranışları belirtmesi ve bu nedenle mantıklarının yerel olmaması gerçeğiyle ilgilidir. Örneğin TFF, girişleri ve çıkışları ağda farklı yerlerde bulunabilecek operatörler sağlar.

Bu, dağıtılmışlık kavramını yakalayan bir dil ve bir tür sistemi gerektirir.

Tip Sistem

Federated Core, aşağıdaki tür kategorilerini sunar. Bu türleri tanımlarken, tür oluşturuculara işaret ediyoruz ve ayrıca kullanışlı bir yol olduğu veya hesaplama ve operatör türlerini açıkladığı için kompakt bir gösterim tanıtıyoruz.

İlk olarak, mevcut ana akım dillerde bulunanlara kavramsal olarak benzeyen tür kategorileri şunlardır:

  • Tensör türleri ( tff.TensorType ). Sadece TensorFlow olduğu gibi bunlar var dtype ve shape . Tek fark, bu tip nesneler ile sınırlı değildir olmasıdır tf.Tensor bir TensorFlow grafikte TensorFlow ops çıkışlarını temsil eder Python durumda değil, aynı zamanda, dağıtılmış bir çıkış olarak, örneğin üretilebilir veri birimlerini içerebilir toplama protokolü. Bu nedenle, TFF tensör türü, Python veya TensorFlow'da bu türün somut bir fiziksel temsilinin basit bir soyut versiyonudur.

    Tensör türleri için kompakt notasyon dtype veya dtype[shape] . Örneğin, int32 ve int32[10] tamsayı ve int vektör türleri, sırasıyla,.

  • Sekans türleri ( tff.SequenceType ). Bunlar arasında TensorFlow en somut kavramının TFF'nin soyut eşdeğerdir tf.data.Dataset s. Dizilerin öğeleri sıralı bir şekilde tüketilebilir ve karmaşık türleri içerebilir.

    Dizisi türleri gösterimidir T* , T elemanlarının türüdür. Örnek için int32* bir tamsayıdır dizisini göstermektedir.

  • Adını tanımlama grubu türleri ( tff.StructType ). Bu dizilerini ve belirli türleri olan öğelerinin önceden tanımlanmış sayıda yapılar, adında veya isimsiz sözlük benzeri inşa etmenin TFF'nin yoludur. Daha da önemlisi, TFF'nin adlandırılmış tanımlama grubu kavramı, Python'un bağımsız değişken gruplarının soyut eşdeğerini, yani bazılarının adlandırıldığı, ancak tümü değil ve bazılarının konumsal olduğu öğelerin koleksiyonlarını kapsar.

    Adlandırılmış tuplelar için kompakt notasyonu olan <n_1=T_1, ..., n_k=T_k> , nerede n_k isteğe bağlı öğe isimleri ve T_k eleman türleridir. Örneğin, <int32,int32> isimsiz bir tamsayı çifti için kompakt bir gösterim olduğu, ve <X=float32,Y=float32> adlandırılan yüzer bir çift için kompakt notasyon X ve Y bir düzlem üzerinde bir noktayı temsil edebilir . Demetler yanı karıştırılmış olan diğer türleri ile iç içe olabilir, örneğin, <X=float32,Y=float32>* noktaları dizisi için bir kompakt gösterim olacaktır.

  • Fonksiyon türleri ( tff.FunctionType ). TFF olarak kabul fonksiyonları ile fonksiyonel bir programlama çerçevesi, bir birinci sınıf değerleri . Fonksiyonların en fazla bir argümanı ve tam olarak bir sonucu vardır.

    Fonksiyon için kompakt notasyon (T -> U) , T bir argüman türüdür ve U Sonuç ürün, ya da ( -> U) no-argüman fonksiyonları dejenere olmasına rağmen herhangi bir bağımsız değişken (varsa çoğunlukla sadece Python düzeyinde var olan kavram). Örneğin (int32* -> int32) tek bir tam sayı değerine bir tamsayı dizisi azaltmak fonksiyonları bir türü için bir gösterim olup.

Aşağıdaki türler, TFF hesaplamalarının dağıtılmış sistemler yönünü ele almaktadır. Bu kavramlar TFF'ye biraz benzersiz olarak size başvurmak için teşvik özel algoritmalar ek yorumlarıyla ve örnekler için öğretici.

  • Yerleşim türü. Bu tip henüz 2 değişmezleri şeklinde dışındaki kamu API açığa çıkmadığı tff.SERVER ve tff.CLIENTS bu türdeki sabitleri olarak düşünebiliriz söyledi. Ancak dahili olarak kullanılır ve gelecek sürümlerde genel API'de tanıtılacaktır. Bu tip kompakt temsilidir placement .

    Bir yerleşim özel bir rol oynamaktadır sistem katılımcı bir kolektif temsil eder. İlk sürüm 2 katılımcı gruplar var olduğu istemci-sunucu hesaplamaları, hedeflemektedir: istemcileri ve bir sunucu (bir tekil grup olarak ikincisi düşünebiliriz). Ancak, daha ayrıntılı mimarilerde, çok katmanlı bir sistemdeki ara toplayıcılar gibi farklı türlerde toplama gerçekleştiren veya sunucu veya sunucu tarafından kullanılanlardan farklı veri sıkıştırma/açma türleri kullanan başka roller olabilir. müşteriler.

    Yerleşimler kavramını tanımlayan birincil amacı federe türlerini tanımlamak için bir temel olarak olduğunu.

  • Federal türleri ( tff.FederatedType ). Bir birleşik tipte bir değer (örneğin, özel bir yerleşimi ile tayin edilen sistem katılımcı bir grup tarafından barındırılan biridir tff.SERVER veya tff.CLIENTS ). Bir federe tipi yerleştirme değeri (böylece, öyle bir tarafından tanımlanır bağımlı tip ), üye bileşenlerinin tipi (ne tür içerik katılımcıların her yerel ev sahipliği yapıyor) ve ek bit all_equal belirtir tüm katılımcılar yerel olup olmadığının aynı öğeyi barındırma.

    Tipi öğeleri (üye bileşenleri) içerir değerler birleşik türü için kompakt gösterim T grubu (yerleştirme) ev sahipliği, her G bir T@G ya da {T}@G ile all_equal sırasıyla ayarlanmış bit kümesi ya da değil.

    Örneğin:

    • {int32}@CLIENTS potansiyel farklı tamsayılar, istemci cihaz başına bir kümesinden meydana gelen bir birleşik değeri temsil eder. Biz ağ üzerinden birden çok yerde görünen verilerin birden fazla öğe kapsayacak şekilde tek bir federasyon değeri bahsediyoruz unutmayın. TFF olanak vermemektedir, çünkü bu benzetme mükemmel olmasa da bunu düşünmek bir yolu, bir "ağ" boyutuyla tensör bir tür gibidir rastgele erişim federe değerin üyesi bileşenlerine.

    • {<X=float32,Y=float32>*}@CLIENTS bir birleşik veri seti, çoklu sekansların oluşan bir değeri temsil eder XY koordinat, istemci cihaz başına bir dizi.

    • <weights=float32[10,5],bias=float32[5]>@SERVER sunucuda ağırlığı ve çapraz tensörlerinin adlandırılmış tuple temsil eder. Biz küme parantezi düştü beri ise bu işaret all_equal , biraz yani ayarlanır sadece tek tuple (bakılmaksızın bu değeri barındıran bir kümede olabileceğini kaç sunucu kopyaları arasında) var.

Yapı taşları

Birleştirilmiş Çekirdek dili şeklidir lambda hesabı birkaç ilave elementler ile.

Şu anda genel API'de sunulan aşağıdaki programlama soyutlamalarını sağlar:

  • TensorFlow hesaplamaları ( tff.tf_computation ). Bu kullanılarak TFF yeniden kullanılabilir bileşenler olarak sarılmış TensorFlow kod kesitleridir tff.tf_computation dekoratör. Her zaman işlevsel türleri vardır ve TensorFlow'daki işlevlerin aksine, yapılandırılmış parametreler alabilir veya bir dizi türünün yapılandırılmış sonuçlarını döndürebilirler.

    İşte bir örnek, tip bir TF hesaplaması var (int32* -> int) kullandığı tf.data.Dataset.reduce tamsayılar toplamını hesaplamak için operatöre:

    @tff.tf_computation(tff.SequenceType(tf.int32))
    def add_up_integers(x):
      return x.reduce(np.int32(0), lambda x, y: x + y)
    
  • İntrinsics veya birleşik operatör ( tff.federated_... ). Bu gibi bir fonksiyon kütüphanesi tff.federated_sum veya tff.federated_broadcast TFF ile kullanım için iletişim operatörleri dağıtılmış temsil çoğu FC API kısmını oluşturmaktadır.

    Biraz gibi çünkü intrinsics olarak adlandırıyoruz içsel fonksiyonlar , onlar TFF tarafından anlaşılmış ve alt düzey koduna aşağı derlenmektedir operatörlerin açık uçlu, genişletilebilir kümesidir.

    Bu operatörlerin çoğu, birleştirilmiş türlerin parametrelerine ve sonuçlarına sahiptir ve çoğu, çeşitli veri türlerine uygulanabilen şablonlardır.

    Örneğin, tff.federated_broadcast fonksiyonel tipte bir şablon operatörü olarak düşünülebilir T@SERVER -> T@CLIENTS .

  • Lambda ifadeleri ( tff.federated_computation ). TFF bir lambda ekspresyonu eşdeğerdir lambda veya def Python; parametre adından ve bu parametreye referansları içeren bir gövdeden (ifade) oluşur.

    Python kodunda, bunlarla Python fonksiyonları dekorasyon oluşturulabilir tff.federated_computation ve bir argüman tanımlayan.

    İşte daha önce bahsettiğimiz bir lambda ifadesi örneği:

    @tff.federated_computation(tff.type_at_clients(tf.float32))
    def get_average_temperature(sensor_readings):
      return tff.federated_mean(sensor_readings)
    
  • Yerleştirme değişmezleri. Şimdilik, sadece tff.SERVER ve tff.CLIENTS basit istemci-sunucu hesaplamaları tanımlamak için izin vermek.

  • Fonksiyon invocations ( __call__ ). Fonksiyonel bir türü olan şey standart Python kullanılarak çağrılabilir __call__ sözdizimi. Çağırma, türü çağrılan işlevin sonucunun türüyle aynı olan bir ifadedir.

    Örneğin:

    • add_up_integers(x) bir bağımsız değişken ile daha önce tanımlandığı TensorFlow hesaplama bir çağırma temsil x . Bu ifadenin türüdür int32 .

    • tff.federated_mean(sensor_readings) ile birleşik ortalama operatörünün bir çağırma temsil sensor_readings . Bu ifadenin türüdür float32@SERVER (örneğin yukarıdaki içerik varsayılarak).

  • Dizilerini Şekillendirme ve kendi elemanları seçerek. Formun Python ifadeleri [x, y] , x[y] veya xy dekore fonksiyonların organları görünür tff.federated_computation .