Google I / O, 18-20 Mayıs'ta geri dönüyor! Yer ayırın ve programınızı oluşturun Şimdi kaydolun
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Federe Öğrenme

Genel Bakış

Bu belge, birleşik eğitim veya TensorFlow'da uygulanan mevcut makine öğrenimi modelleriyle değerlendirme gibi federe öğrenme görevlerini kolaylaştıran arabirimleri tanıtır. Bu arayüzleri tasarlarken birincil hedefimiz, başlık altında nasıl çalıştığına dair bilgi gerektirmeden federe öğrenmeyi denemeyi mümkün kılmak ve uygulanan federe öğrenme algoritmalarını çeşitli mevcut modeller ve veriler üzerinde değerlendirmekti. Platforma geri katkıda bulunmanızı öneririz. TFF, genişletilebilirlik ve birleştirilebilirlik göz önünde bulundurularak tasarlanmıştır ve katkıları memnuniyetle karşılıyoruz; ortaya çıkardığınız şeyi görmekten heyecan duyuyoruz!

Bu katmanın sunduğu arayüzler aşağıdaki üç ana bölümden oluşur:

  • Modeller . Mevcut modellerinizi TFF ile kullanmak üzere sarmalamanıza olanak tanıyan sınıflar ve yardımcı işlevler. Bir modeli sarmak, tek bir sarmalama işlevini çağırmak (örneğin, tff.learning.from_keras_model ) veya tam özelleştirilebilirlik için tff.learning.Model arabiriminin bir alt sınıfını tanımlamak kadar basit olabilir.

  • Federe Hesaplama Oluşturucular . Mevcut modellerinizi kullanarak eğitim veya değerlendirme için birleşik hesaplamalar oluşturan yardımcı işlevler.

  • Veri kümeleri . Birleşik öğrenme senaryolarının simülasyonunda kullanmak için Python'da indirebileceğiniz ve erişebileceğiniz hazır veri koleksiyonları. Birleşik öğrenme, merkezi bir konumda basitçe indirilemeyen merkezi olmayan verilerle kullanılmak üzere tasarlanmış olsa da, araştırma ve geliştirme aşamalarında, yerel olarak indirilebilen ve manipüle edilebilen verileri kullanarak, özellikle de olabilecek geliştiriciler için ilk deneyler yapmak genellikle uygundur. yaklaşımda yeni.

Bu arabirimler, araştırma veri kümeleri ve tff.simulation gruplandırılmış diğer simülasyonla ilgili yetenekler haricinde, öncelikle tff.learning ad alanında tanımlanır. Bu katman, aynı zamanda bir çalışma zamanı ortamı sağlayan Federated Core (FC) tarafından sunulan daha düşük seviyeli arayüzler kullanılarak uygulanır.

Devam etmeden önce, burada açıklanan kavramların çoğunu somut örnekler kullanarak tanıttıkları için görüntü sınıflandırması ve metin oluşturma hakkındaki öğreticileri incelemenizi öneririz. TFF'nin nasıl çalıştığı hakkında daha fazla bilgi edinmekle ilgileniyorsanız, federe hesaplamaların mantığını ifade etmek için kullandığımız alt düzey arabirimlere giriş olarak özel algoritmalar öğreticisine göz atmak ve mevcut tff.learning arayüzleri.

Modeller

Mimari varsayımlar

Serileştirme

TFF, yazdığınız makine öğrenimi modeli kodunun çeşitli yeteneklere sahip çok sayıda heterojen istemcide yürütülebileceği çeşitli dağıtılmış öğrenme senaryolarını desteklemeyi amaçlamaktadır. Yelpazenin bir ucunda, bazı uygulamalarda bu istemciler güçlü veritabanı sunucuları olabilirken, platformumuzun birçok önemli kullanımı, sınırlı kaynaklara sahip mobil ve gömülü cihazları desteklemeyi amaçlamaktadır. Bu cihazların Python çalışma zamanlarını barındırabileceğini varsayamayız; Bu noktada varsayabileceğimiz tek şey, yerel bir TensorFlow çalışma zamanını barındırabilmeleridir. Bu nedenle, TFF'de yaptığımız temel bir mimari varsayım, model kodunuzun bir TensorFlow grafiği olarak serileştirilebilir olması gerektiğidir.

İstekli modu kullanmak gibi en son en iyi uygulamaları izleyerek TF kodunuzu geliştirebilirsiniz (ve geliştirmelisiniz). Bununla birlikte, son kod serileştirilebilir olmalıdır (örneğin, istekli mod kodu için bir tf.function işlevi olarak sarılabilir). Bu, yürütme sırasında gerekli olan herhangi bir Python durumunun veya kontrol akışının serileştirilebilmesini sağlar (muhtemelen Autograph yardımıyla).

Şu anda, TensorFlow, istekli mod TensorFlow serileştirmeyi ve seriyi kaldırmayı tam olarak desteklemiyor. Bu nedenle, TFF'de serileştirme şu anda TF 1.0 modelini izler; burada tüm kod, TFF'nin kontrol ettiği bir tf.Graph içinde yapılandırılmalıdır. Bu, halihazırda TFF'nin önceden oluşturulmuş bir modeli kullanamayacağı anlamına gelir; bunun yerine, model tanımlama mantığı bir tff.learning.Model döndüren tff.learning.Model bir tff.learning.Model . Bu işlev daha sonra modelin tüm bileşenlerinin serileştirilmesini sağlamak için TFF tarafından çağrılır. Ek olarak, türü güçlü bir ortam olan TFF, modelinizin girdi türünün bir özelliği gibi biraz ek meta veri gerektirecektir.

Toplama

Çoğu kullanıcının Keras kullanarak modeller oluşturmasını şiddetle tavsiye ederiz, aşağıdaki Keras için Dönüştürücüler bölümüne bakın. Bu sarmalayıcılar, model güncellemelerinin bir araya getirilmesinin yanı sıra model için otomatik olarak tanımlanan herhangi bir metrikle ilgilenir. Ancak, genel bir tff.learning.Model için toplamanın nasıl işlendiğini anlamak yine de faydalı olabilir.

Birleşik öğrenmede her zaman en az iki toplama katmanı vardır: yerel cihaz üzerinde toplama ve cihazlar arası (veya birleşik) toplama:

  • Yerel toplama . Bu toplama düzeyi, tek bir müşterinin sahip olduğu birden çok örnek grubu arasında kümelemeyi ifade eder. Hem model yerel olarak eğitildikçe sıralı olarak gelişmeye devam eden model parametreleri (değişkenler) hem de modelinizin yerel olarak tekrar güncelleyeceği hesapladığınız istatistikler (ortalama kayıp, doğruluk ve diğer ölçümler gibi) için geçerlidir. her bir müşterinin yerel veri akışı üzerinde yinelenirken.

    Bu seviyede toplama yapmak, model kodunuzun sorumluluğundadır ve standart TensorFlow yapıları kullanılarak gerçekleştirilir.

    İşlemenin genel yapısı aşağıdaki gibidir:

    • Model ilk olarak, parti sayısı veya işlenen örnek sayısı, parti başına veya örnek başına kayıpların toplamı, vb. Gibi kümeleri tutmak için tf.Variable .

    • TFF, Model forward_pass yöntemini, bir yan etki olarak çeşitli kümeleri tutan değişkenleri güncellemenize olanak tanıyan, sırayla sonraki istemci verileri yığınları üzerinden birden çok kez çağırır.

    • Son olarak, TFF, modelinizin topladığı tüm özet istatistikleri müşteri tarafından dışa aktarılacak kompakt bir metrik kümesi halinde derlemesine izin vermek için Modelinizde report_local_outputs yöntemini çağırır. Burası model kodunuzun, örneğin, kayıpların toplamını, ortalama kaybı vb. Dışa aktarmak için işlenen örneklerin sayısına bölebileceği yerdir.

  • Birleşik toplama . Bu toplama düzeyi, sistemdeki birden çok istemcide (aygıt) toplamayı ifade eder. Yine, hem istemciler arasında ortalaması alınan model parametreleri (değişkenler) hem de modelinizin yerel toplama sonucunda dışa aktardığı metrikler için geçerlidir.

    Bu seviyede birleştirme yapmak TFF'nin sorumluluğundadır. Bununla birlikte, bir model yaratıcısı olarak, bu süreci kontrol edebilirsiniz (bu konuda daha fazlası aşağıda).

    İşlemenin genel yapısı aşağıdaki gibidir:

    • İlk model ve eğitim için gerekli tüm parametreler, bir eğitim veya değerlendirmeye katılacak olan bir müşteri alt kümesine bir sunucu tarafından dağıtılır.

    • Her istemcide, bağımsız olarak ve paralel olarak, model kodunuz, yeni bir model parametreleri kümesi (eğitim sırasında) ve yukarıda açıklandığı gibi yeni bir yerel ölçüm kümesi üretmek için yerel veri grupları akışında tekrar tekrar çağrılır (bu yereldir toplama).

    • TFF, sistem genelinde model parametrelerini ve yerel olarak dışa aktarılan ölçümleri biriktirmek ve toplamak için dağıtılmış bir toplama protokolü çalıştırır. Bu mantık, Modelin federated_output_computation dosyasında TFF'nin kendi federe hesaplama dili (TensorFlow'da değil) kullanılarak bildirimsel bir şekilde ifade edilir federated_output_computation. Toplama API'si hakkında daha fazla bilgi için özel algoritmalar eğitimine bakın.

Soyut arayüzler

Bu temel yapıcı + meta veri arabirimi, aşağıdaki gibi tff.learning.Model arabirimi tarafından temsil edilir:

  • Yapıcı, forward_pass ve report_local_outputs yöntemler modeli değişkenleri, ileri pas oluşturmalıdır ve istatistikler buna, rapora diliyorum. Bu yöntemlerle oluşturulan TensorFlow, yukarıda tartışıldığı gibi serileştirilebilir olmalıdır.

  • input_spec özelliğinin yanı sıra eğitilebilir, input_spec ve yerel değişkenlerinizin alt kümelerini döndüren 3 özellik, meta verileri temsil eder. TFF bu bilgiyi, modelinizin parçalarını birleşik optimizasyon algoritmalarına nasıl bağlayacağınızı belirlemek ve inşa edilen sistemin doğruluğunu doğrulamaya yardımcı olmak için dahili tip imzaları tanımlamak için kullanır (böylece modeliniz, modeliniz neyle eşleşmeyen veriler üzerinden başlatılamaz). model tüketmek için tasarlanmıştır).

Buna ek olarak, soyut arayüzü tff.learning.Model bir özellik ortaya federated_output_computation , birlikte report_local_outputs mülkiyet önce de belirttiğimiz, sen özet istatistikleri toplayarak sürecini kontrol etmenizi sağlar.

Kendi özel tff.learning.Model nasıl tanımlayacağınıza dair örnekleri, görüntü sınıflandırma tff.learning.Model ikinci bölümünde ve model_examples.py test etmek için kullandığımız örnek modellerde model_examples.py .

Keras için Dönüştürücüler

TFF'nin gerektirdiği neredeyse tüm bilgiler tf.keras arabirimleri çağrılarak elde edilebilir, bu nedenle bir tf.keras modeliniz varsa, tff.learning.from_keras_model oluşturmak için tff.learning.Model .

TFF'nin hala bir yapıcı - aşağıdakiler gibi bağımsız değişken olmayan bir model işlevi sağlamanızı istediğini unutmayın:

def model_fn():
  keras_model = ...
  return tff.learning.from_keras_model(keras_model, sample_batch, loss=...)

Modelin kendisine ek olarak, TFF'nin modelinizin girdisinin türünü ve şeklini belirlemek için kullandığı örnek bir veri grubu sağlarsınız. Bu, TFF'nin istemci cihazlarda gerçekten mevcut olacak veriler için modeli düzgün şekilde başlatabilmesini sağlar (çünkü bu verilerin, serileştirilecek TensorFlow'u oluşturduğunuz sırada genel olarak mevcut olmadığını varsayıyoruz).

Keras sarmalayıcıların kullanımı, görüntü sınıflandırma ve metin oluşturma eğitimlerimizde gösterilmektedir.

Federe Hesaplama Kurucuları

tff.learning paketi, öğrenmeyle ilgili görevleri gerçekleştiren tff.Computation lar için birkaç kurucu sağlar; gelecekte bu tür hesaplamaların genişlemesini bekliyoruz.

Mimari varsayımlar

Yürütme

Birleşik bir hesaplama çalıştırmanın iki farklı aşaması vardır.

  • Derleme : TFF ilk olarak federe öğrenme algoritmalarını tüm dağıtılmış hesaplamanın soyut bir serileştirilmiş temsilinde derler . Bu, TensorFlow serileştirmenin gerçekleştiği, ancak daha verimli yürütmeyi desteklemek için başka dönüştürmelerin gerçekleştiği zamandır. Derleyici tarafından yayınlanan serileştirilmiş gösterime federe hesaplama olarak atıfta bulunuyoruz.

  • Yürütme TFF, bu hesaplamaları yürütmek için yollar sağlar. Şimdilik, yürütme yalnızca yerel bir simülasyon aracılığıyla desteklenmektedir (örneğin, simüle edilmiş merkezi olmayan verileri kullanan bir dizüstü bilgisayarda).

Birleştirilmiş model ortalamasını kullanan bir eğitim algoritması veya birleştirilmiş bir değerlendirme gibi, TFF'nin Birleşik Öğrenme API'si tarafından oluşturulan bir birleşik hesaplama, en önemlisi:

  • Model kodunuzun serileştirilmiş bir biçimi ve modelinizin eğitim / değerlendirme döngüsünü yürütmek için Birleşik Öğrenme çerçevesi tarafından oluşturulan ek TensorFlow kodu (örneğin, optimizetf.data.Dataset , model güncellemelerini uygulama,tf.data.Dataset s üzerinde yineleme ve hesaplama ölçümleri, ve toplu güncellemeyi sunucuya uygulamak, bunlardan birkaçıdır).

  • İstemciler ve bir sunucu arasındaki iletişimin bildirimsel bir özelliği (tipik olarak istemci aygıtları arasında çeşitli toplama biçimleri ve sunucudan tüm istemcilere yayın ) ve bu dağıtılmış iletişimin istemci-yerel veya sunucu-yerel yürütme ile nasıl iç içe geçtiği TensorFlow kodu.

Bu serileştirilmiş formda temsil edilen federe hesaplamalar , Python'dan farklı, platformdan bağımsız bir iç dilde ifade edilir, ancak Federe Öğrenme API'sini kullanmak için, bu temsilin ayrıntılarıyla ilgilenmenize gerek yoktur. Hesaplamalar, Python kodunuzda tff.Computation türünde nesneler olarak temsil edilir ve bu nesneler çoğunlukla opak Python callable tff.Computation olarak değerlendirilebilir.

Eğitimlerde, bu birleşik hesaplamaları yerel olarak çalıştırılmak üzere normal Python işlevleriymiş gibi çağıracaksınız. Bununla birlikte, TFF, federe hesaplamaları yürütme ortamının çoğu yönünden bağımsız bir şekilde ifade etmek için tasarlanmıştır, böylece bunlar potansiyel olarak örneğin Android çalıştıran cihaz gruplarına veya bir veri merkezindeki kümelere konuşlandırılabilir. Yine, bunun ana sonucu serileştirme ile ilgili güçlü varsayımlardır. Özellikle, aşağıda açıklanan build_... yöntemlerinden birini çalıştırdığınızda, hesaplama tamamen serileştirilir.

Modelleme durumu

TFF, işlevsel bir programlama ortamıdır, ancak federe öğrenmeye ilgi duyan birçok süreç durum bilgilidir. Örneğin, birden fazla federasyon modeli ortalamasını içeren bir eğitim döngüsü, durum bilgisi olan bir süreç olarak sınıflandırabileceğimiz bir örnektir. Bu süreçte, yuvarlaktan diğerine gelişen durum, eğitilmekte olan model parametreleri kümesini ve muhtemelen optimize edici ile ilişkili ek durumu (örneğin, bir momentum vektörü) içerir.

TFF işlevsel olduğundan, durum bilgisi olan işlemler TFF'de mevcut durumu bir girdi olarak kabul eden ve ardından güncellenmiş durumu bir çıktı olarak sağlayan hesaplamalar olarak modellenir. Durum bilgisi olan bir süreci tam olarak tanımlamak için, ilk durumun nereden geldiğini de belirtmek gerekir (aksi takdirde süreci önyükleyemeyiz). Bu yardımcı sınıfı tanımında yakalanır tff.templates.IterativeProcess 2 özellikleri olan, initialize ve next iterasyon başlatma tekabül eden ve sırasıyla.

Mevcut inşaatçılar

Şu anda TFF, birleşik eğitim ve değerlendirme için birleşik hesaplamaları oluşturan iki oluşturucu işlevi sağlar:

Veri kümeleri

Mimari varsayımlar

Müşteri seçimi

Tipik birleşik öğrenme senaryosunda, herhangi bir anda yalnızca küçük bir kısmı aktif ve eğitim için uygun olabilecek yüz milyonlarca istemci cihazından oluşan büyük bir popülasyona sahibiz (örneğin, bu, bir güç kaynağına takılı, ölçülü bir ağda değil ve başka şekilde boşta). Genel olarak, eğitim veya değerlendirmeye katılmaya uygun müşteri grubu geliştiricinin kontrolü dışındadır. Ayrıca, milyonlarca müşteriyi koordine etmek pratik olmadığından, tipik bir eğitim veya değerlendirme turu , rastgele örneklenebilen mevcut müşterilerin yalnızca bir kısmını içerecektir.

Bunun temel sonucu, federe hesaplamaların, tasarım gereği, tam katılımcı kümesinden habersiz bir şekilde ifade edilmesidir; tüm işlemler soyut bir anonim istemciler grubu üzerinde toplu işlemler olarak ifade edilir ve bu grup bir eğitim turundan diğerine değişiklik gösterebilir. Hesaplamanın somut katılımcılara ve dolayısıyla hesaplamaya besledikleri somut verilere gerçek bağlanması, böylece hesaplamanın dışında modellenir.

Birleşik öğrenme kodunuzun gerçekçi bir dağıtımını simüle etmek için, genellikle şuna benzeyen bir eğitim döngüsü yazacaksınız:

trainer = tff.learning.build_federated_averaging_process(...)
state = trainer.initialize()
federated_training_data = ...

def sample(federate_data):
  return ...

while True:
  data_for_this_round = sample(federated_training_data)
  state, metrics = trainer.next(state, data_for_this_round)

Bunu kolaylaştırmak için, simülasyonlarda TFF kullanılırken, federe veriler Python list olarak kabul edilir ve katılan istemci cihaz başına bir öğe, o cihazın yereltf.data.Dataset temsil eder.

Soyut arayüzler

TFF, simüle edilmiş birleşik veri kümeleriyle uğraşmayı standartlaştırmak için, bir tff.simulation.datasets.ClientData istemci kümesini numaralandırmasına ve belirli birtf.data.Dataset verilerini içeren birtf.data.Dataset oluşturmasına olanak tanıyan soyut bir arabirim tff.simulation.datasets.ClientData sağlar. müşteri. Butf.data.Dataset , istekli modda oluşturulan birleşik hesaplamalara doğrudan girdi olarak beslenebilir.

Müşteri kimliklerine erişme yeteneğinin, yalnızca simülasyonlarda kullanılmak üzere veri kümeleri tarafından sağlanan bir özellik olduğu ve müşterilerin belirli alt kümelerinden gelen verileri eğitme yeteneğinin gerekli olabileceği (örneğin, farklı günlük kullanılabilirliklerini simüle etmek için) not edilmelidir. müşteri türleri). Derlenmiş hesaplamalar ve altta yatan çalışma zamanı istemci kimliği herhangi bir kavramı yer almamaktadır. Belirli bir istemci alt kümesinden gelen veriler, örneğin tff.templates.IterativeProcess.next çağrısında girdi olarak seçildiğinde, istemci kimlikleri artık içinde görünmez.

Mevcut veri setleri

Simülasyonlarda kullanım için tff.simulation.datasets.ClientData arabirimini uygulayan veri kümeleri için tff.simulation.datasets ad alanını tahsis ettik ve görüntü sınıflandırmasını ve metin oluşturma eğitimlerini desteklemek için onu 2 veri kümesiyle tff.simulation.datasets.ClientData . Kendi veri kümelerinizle platforma katkıda bulunmanızı tavsiye ederiz.