Yerel TensorFlow Everywhere etkinliğiniz için bugün LCV!
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Federasyon Çekirdek

Bu belge, Birleşik Öğrenme için bir temel görevi gören çekirdek TFF katmanını ve gelecekteki olası öğrenme olmayan birleşik algoritmaları tanıtır.

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

Federe öğrenme için Federated Core API (FC API) kullanımı, içinde yaptığımız seçimlerden bazıları için önemli bir bağlam sağladığından, Federe Öğrenmeye ve görüntü sınıflandırması ve metin oluşturmaya ilişkin ilgili eğitimlere kendinizi alıştırmanızı da öneririz. bu katmanı tasarlamak.

Genel Bakış

Hedefler, Kullanım Amaçları ve Kapsam

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

Dağıtılmış terimi çok geneldir ve TFF oradaki olası tüm dağıtılmış algoritma türlerini hedeflemez, bu nedenle bu çerçevede ifade edilebilecek algoritma türlerini tanımlamak için daha az genel bir terim olan federe hesaplamayı kullanmayı tercih ederiz.

Birleşik hesaplama terimini tamamen resmi bir şekilde tanımlamak bu belgenin kapsamı dışındayken, yeni bir dağıtılmış öğrenme algoritmasını açıklayan bir araştırma yayınında sözde kodla ifade edildiğini görebileceğiniz algoritma türlerini düşünün.

Bir nusthell'de FC'nin amacı, sözde kod olmayan program mantığının benzer sözde kod benzeri bir soyutlama seviyesinde benzer şekilde kompakt gösterimini mümkün kılmaktır, bunun yerine çeşitli hedef ortamlarda çalıştırılabilir.

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. Bu nedenle, verileri yerel olarak dönüştüren her cihazdan ve sonuçlarını yayınlayan , toplayan veya bir araya getiren merkezi bir koordinatör tarafından yapılan işi koordine eden cihazlar hakkında konuşma eğilimindeyiz.

TFF, basit istemci-sunucu mimarilerinin ötesine geçebilecek şekilde tasarlanmış olsa da, toplu işleme kavramı esastır. Bunun nedeni, TFF'nin federe öğrenmedeki kökenlerinden kaynaklanmaktadır; bu, istemci cihazların kontrolü altında kalan potansiyel olarak hassas veriler üzerindeki hesaplamaları desteklemek için orijinal olarak tasarlanmış bir teknoloji olup, gizlilik nedenleriyle merkezi bir konuma kolayca indirilemeyebilir. 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 (genel olarak tüm katılımcılar için değerli olmasını beklediğimiz bir sonuçtur), ayrıca her müşterinin mahremiyetini ve anonimliğini korumaya çalışıyoruz.

Bu nedenle, dağıtılmış bilgi işlem için çoğu çerçeve, işlemi bireysel katılımcıların bakış açısından ifade etmek için tasarlanırken - 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ığı düzeyinde TFF'nin Federe Çekirdeği, sistemin davranışını küresel sistem çapında perspektiften (örneğin, MapReduce'a benzer şekilde) tanımlamak için tasarlanmıştır.

Sonuç olarak, genel amaçlar için dağıtılmış çerçeveler yapı taşları olarak gönderme ve alma gibi işlemler sunabilirken, FC basit dağıtılmış protokolleri kapsayan tff.federated_sum , tff.federated_reduce veya tff.federated_broadcast gibi yapı taşları sağlar.

Dil

Python Arayüzü

TFF, sözdizimi computation.proto'daki serileştirilebilir gösterimle tanımlanan federe hesaplamaları temsil etmek için dahili bir dil kullanır. Ancak FC API kullanıcılarının genellikle bu dille doğrudan etkileşime girmesi gerekmez. Bunun yerine, hesaplamaları tanımlamanın bir yolu olarak etrafını saran bir Python API ( tff ad alanı) sağlıyoruz.

Özellikle TFF, dekore edilmiş işlevlerin gövdelerini izleyen ve TFF'nin dilinde federe hesaplama mantığının serileştirilmiş temsillerini üreten tff.federated_computation gibi Python işlev dekoratörleri sağlar. tff.federated_computation ile tff.federated_computation işlev, bu tür serileştirilmiş gösterimin taşıyıcısı olarak hareket eder ve onu başka bir hesaplamanın gövdesine bir yapı taşı olarak yerleştirebilir veya çağrıldığında isteğe bağlı olarak çalıştırabilir.

İşte sadece bir örnek; özel algoritma eğitimlerinde daha fazla örnek bulunabilir.

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

Hevesli olmayan TensorFlow'u tanıyan okuyucular, bu yaklaşımı, bir TensorFlow grafiğini tanımlayan Python kodunun bir bölümünde tf.add veya tf.reduce_sum gibi işlevleri kullanan Python kodu yazmaya benzer bulacaktır. Kod teknik olarak Python'da ifade tf.Graph de amacı, altında bir tf.Graph serileştirilebilir bir temsilini oluşturmaktır ve TensorFlow çalışma zamanı tarafından dahili olarak yürütülen Python kodu değil, grafiktir. Benzer şekilde, tff.federated_mean , tff.federated_mean temsil edilen federe bir hesaplamaya bir federasyon operasyonu eklemek olarak get_average_temperature .

FC'nin bir dili tanımlamasının nedeninin bir kısmı, yukarıda belirtildiği gibi, federe hesaplamaların dağıtılmış toplu davranışları belirtmesi ve bu nedenle bunların mantığının yerel olmamasıyla ilgilidir. Örneğin, TFF, ağın farklı yerlerinde mevcut olabilecek operatörler, girişler ve çıkışlar sağlar.

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

Tipi Sistem

Federated Core, aşağıdaki tür kategorilerini sunar. Bu türleri açıklarken, kullanışlı bir yol veya hesaplama ve işleç türlerini tanımlayan kompakt bir gösterim sunmanın yanı sıra tür kurucularına işaret ediyoruz.

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

  • Tensör türleri ( tff.TensorType ). TensorFlow'da olduğu gibi, bunların dtype ve shape . Tek fark, bu türdeki nesnelerin Python'daki tf.Tensor örnekleriyle sınırlı olmaması ve bir TensorFlow grafiğindeki TensorFlow işlemlerinin çıktılarını temsil eden, ancak aynı zamanda üretilebilen veri birimlerini de içerebilir, örneğin, dağıtılmış bir toplama protokolü. Bu nedenle, TFF tensör türü, Python veya TensorFlow'daki bu tür bir türün somut fiziksel temsilinin basit bir versiyonudur.

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

  • Sıra türleri ( tff.SequenceType ). Bunlar, TFF'nin TensorFlow'un somuttf.data.Dataset s kavramının soyut eşdeğeridir. Dizilerin elemanları sıralı bir şekilde tüketilebilir ve karmaşık türleri içerebilir.

    Sıra türlerinin kompakt temsili T* ve burada T , elemanların türüdür. Örneğin, int32* bir tamsayı dizisini temsil eder.

  • Adlandırılmış demet türleri ( tff.StructType ). Bunlar, TFF'nin belirli türlerde, adlandırılmış veya adlandırılmamış önceden tanımlanmış sayıda öğeye sahip tuple ve sözlüğe benzer yapılar oluşturma yöntemidir. Önemlisi, TFF'nin adlandırılmış tuple kavramı, Python'un argüman dizilerinin soyut eşdeğerini, yani tümü değil bazıları isimlendirilmiş ve bazıları konumsal olan öğe koleksiyonlarını kapsar.

    Adlandırılmış <n_1=T_1, ..., n_k=T_k> için kompakt gösterim, <n_1=T_1, ..., n_k=T_k> , burada n_k isteğe bağlı öğe adlarıdır ve T_k öğe türleridir. Örneğin, <int32,int32> , bir çift adsız tamsayı için kompakt bir gösterimdir ve <X=float32,Y=float32> , bir düzlemdeki bir noktayı temsil edebilen X ve Y adlı bir kayan çift için kompakt bir gösterimdir . Tuplelar iç içe yerleştirilebilir ve diğer türlerle karıştırılabilir, örneğin, <X=float32,Y=float32>* , bir nokta dizisi için kompakt bir gösterim olacaktır.

  • Fonksiyon türleri ( tff.FunctionType ). TFF, birinci sınıf değerler olarak değerlendirilen işlevlere sahip işlevsel bir programlama çerçevesidir. Fonksiyonların en fazla bir argümanı ve tam olarak bir sonucu vardır.

    Fonksiyonlar için kompakt gösterim, (T -> U) , burada T bir argümanın türüdür ve U , sonucun türüdür veya argüman yoksa ( -> U) (argüman içermeyen fonksiyonlar dejenere olmasına rağmen) Çoğunlukla sadece Python düzeyinde var olan kavram). Örneğin (int32* -> int32) , bir tamsayı dizisini tek bir tamsayı değerine indirgeyen bir işlev türü için bir gösterimdir.

Aşağıdaki türler, TFF hesaplamalarının dağıtılmış sistemler yönünü ele almaktadır. Bu kavramlar bir şekilde TFF'ye özgü olduğundan, ek yorumlar ve örnekler için özel algoritmalar öğreticisine bakmanızı öneririz.

  • Yerleşim türü . Bu tür, bu türden sabitler olarak tff.SERVER 2 değişmez tff.SERVER ve tff.CLIENTS dışında genel API'de henüz açığa tff.SERVER . Bununla birlikte, dahili olarak kullanılır ve gelecekteki sürümlerde genel API'de tanıtılacaktır. Bu türün kompakt temsili placement .

    Yerleştirme , belirli bir rolü oynayan sistem katılımcılarından oluşan bir grubu temsil eder. İlk sürüm, iki katılımcı grubunun olduğu istemci-sunucu hesaplamalarını hedefliyor: istemciler ve bir sunucu (ikincisini tekil bir grup olarak düşünebilirsiniz). Bununla birlikte, daha ayrıntılı mimarilerde, çok katmanlı bir sistemdeki ara toplayıcılar gibi, farklı toplama türleri 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şim kavramını tanımlamanın birincil amacı, federe türleri tanımlamak için bir temel oluşturmaktır.

  • Birleşik türler ( tff.FederatedType ). Federasyon türünün değeri, belirli bir yerleşimle ( tff.SERVER veya tff.CLIENTS ) tanımlanan bir grup sistem katılımcısı tarafından barındırılan tff.CLIENTS . Federasyon türü, yerleşim değeri (bu nedenle, bağımlı bir türdür ), üye bileşenlerinin türü (katılımcıların her birinin yerel olarak ne tür içerik barındırdığı) ve tüm katılımcıların yerel olarak olup olmadığını belirten ek bit all_equal ile tanımlanır. aynı öğeyi barındırıyor.

    Her biri grup (yerleşim) G tarafından barındırılan, T türü öğeleri (üye bileşenleri) içeren federe tür değerlerin kompakt gösterimi, sırasıyla, all_equal bit kümesiyle veya ayarlanmadan T@G veya {T}@G T@G .

    Örneğin:

    • {int32}@CLIENTS , her istemci cihazı için bir potansiyel olarak farklı tam sayılardan oluşan bir federasyon değeri temsil eder. Ağ üzerinde birden çok konumda görünen birden çok veri öğesini kapsayan tek bir birleşik değerden bahsettiğimizi unutmayın. Bunu düşünmenin bir yolu, "ağ" boyutuna sahip bir tür tensördür, ancak bu benzetme mükemmel değildir çünkü TFF, federe bir değerin üye bileşenlerine rastgele erişime izin vermez.

    • {<X=float32,Y=float32>*}@CLIENTS , istemci cihaz başına bir sıra olmak üzere, birden çok XY koordinat dizisinden oluşan bir değer olan federe bir veri kümesini temsil eder.

    • <weights=float32[10,5],bias=float32[5]>@SERVER , sunucudaki adlandırılmış ağırlık ve önyargı tensörlerini temsil eder. Küme parantezlerini all_equal , bu, all_equal bitinin ayarlandığını gösterir, yani yalnızca tek bir demet vardır (bu değeri barındıran bir kümede kaç sunucu kopyası olabileceğine bakılmaksızın).

Yapı taşları

Federated Core'un dili, birkaç ek unsur içeren bir lambda-hesaplama biçimidir.

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

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

    İşte bir örnek, tamsayıların toplamını hesaplamak için tf.data.Dataset.reduce operatörünü kullanan bir TF hesaplama türü (int32* -> int) :

    @tff.tf_computation(tff.SequenceType(tf.int32))
    def add_up_integers(x):
      return x.reduce(np.int32(0), lambda x, y: x + y)
    
  • İçsel veya birleşik operatörler ( tff.federated_... ). Bu, FC API'nin büyük bir kısmını oluşturan tff.federated_sum veya tff.federated_broadcast gibi işlevlerden oluşan bir kitaplıktır ve çoğu TFF ile kullanım için dağıtılmış iletişim operatörlerini temsil eder.

    Bunları içsel olarak adlandırıyoruz çünkü, bir şekilde içsel işlevler gibi, bunlar TFF tarafından anlaşılan ve daha düşük seviyeli koda derlenmiş açık uçlu, genişletilebilir bir işleçler kümesidir.

    Bu işleçlerin çoğunun, birleşik türlerin parametreleri ve sonuçları vardır ve çoğu, çeşitli veri türlerine uygulanabilen şablonlardır.

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

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

    Python kodunda bunlar, Python işlevlerini tff.federated_computation ile tff.federated_computation ve bir argüman tanımlayarak oluşturulabilir.

    İş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şim değişmez değerleri . Şimdilik, basit istemci-sunucu hesaplamalarının tanımlanmasına izin vermek için yalnızca tff.SERVER ve tff.CLIENTS .

  • İşlev çağrıları ( __call__ ). İşlevsel bir türü olan her şey, standart Python __call__ sözdizimi kullanılarak çağrılabilir. Çağrı, türü çağrılan işlevin sonucunun türüyle aynı olan bir ifadedir.

    Örneğin:

    • add_up_integers(x) , daha önce bir x bağımsız değişkeninde tanımlanan TensorFlow hesaplamasının bir çağrısını temsil eder. Bu ifadenin türü int32 .

    • tff.federated_mean(sensor_readings) , sensor_readings üzerinde federe ortalama alma operatörünün çağrılmasını temsil eder. Bu ifadenin türü float32@SERVER (yukarıdaki örnekteki bağlam varsayılarak).

  • Dizilerini Şekillendirme ve kendi elemanları seçerek. tff.federated_computation ile süslenmiş işlevlerin gövdelerinde görünen [x, y] , x[y] veya xy biçimindeki Python ifadeleri.