Bu belge, birleştirilmiş program kavramlarına üst düzey bir genel bakışla ilgilenen herkes içindir. TensorFlow Federated, özellikle de tip sistemi hakkında bilgi sahibi olduğunu varsayar.
Birleşik program hakkında daha fazla bilgi için bkz.:
Birleştirilmiş program nedir?
Birleştirilmiş program, birleştirilmiş bir ortamda hesaplamaları ve diğer işleme mantığını yürüten bir programdır.
Daha fazlası, özellikle birleştirilmiş bir program :
- hesaplamaları yürütür
- program mantığını kullanma
- platforma özel bileşenlerle
- ve platformdan bağımsız bileşenler
- program tarafından belirlenen parametreler
- ve müşteri tarafından belirlenen parametreler
- müşteri programı çalıştırdığında
- ve platform depolama alanındaki verileri şu amaçlarla gerçekleştirebilir :
- Python mantığında kullanın
- hata toleransını uygulamak
- ve verileri müşteri depolama alanına bırakabilir
Bu kavramların ve soyutlamaların tanımlanması, birleştirilmiş bir programın bileşenleri arasındaki ilişkilerin tanımlanmasını mümkün kılar ve bu bileşenlerin farklı roller tarafından sahiplenilmesine ve yazılmasına olanak tanır. Bu ayırma, geliştiricilerin diğer birleştirilmiş programlarla paylaşılan bileşenleri kullanarak birleştirilmiş program oluşturmasına olanak tanır; bu, genellikle aynı program mantığını birçok farklı platformda yürütmek anlamına gelir.
TFF'nin federe program kütüphanesi ( tff.program ), federe bir program oluşturmak için gereken soyutlamaları tanımlar ve platformdan bağımsız bileşenler sağlar.
Bileşenler
<!--#include file="components.dot"-->
TFF'nin federe program kütüphanesinin bileşenleri , farklı rollerin sahiplenebileceği ve yazılabileceği şekilde tasarlanmıştır.
programı
Program aşağıdaki özelliklere sahip bir Python ikili dosyasıdır:
- parametreleri tanımlar (örn. bayraklar)
- platforma özgü bileşenler ve platformdan bağımsız bileşenler oluşturur
- birleşik bir bağlamda program mantığını kullanarak hesaplamaları yürütür
Örneğin:
# Parameters set by the customer.
flags.DEFINE_string('output_dir', None, 'The output path.')
def main() -> None:
# Parameters set by the program.
total_rounds = 10
num_clients = 3
# Construct the platform-specific components.
context = tff.program.NativeFederatedContext(...)
data_source = tff.program.DatasetDataSource(...)
# Construct the platform-agnostic components.
summary_dir = os.path.join(FLAGS.output_dir, 'summary')
metrics_manager = tff.program.GroupingReleaseManager([
tff.program.LoggingReleaseManager(),
tff.program.TensorBoardReleaseManager(summary_dir),
])
program_state_dir = os.path.join(..., 'program_state')
program_state_manager = tff.program.FileProgramStateManager(program_state_dir)
# Define the computations.
initialize = ...
train = ...
# Execute the computations using program logic.
tff.framework.set_default_context(context)
asyncio.run(
train_federated_model(
initialize=initialize,
train=train,
data_source=data_source,
total_rounds=total_rounds,
num_clients=num_clients,
metrics_manager=metrics_manager,
program_state_manager=program_state_manager,
)
)
Parametreler
Parametreler programın girdileridir, bu girdiler bayrak olarak gösterilmişse müşteri tarafından ayarlanabilir veya program tarafından ayarlanabilir. Yukarıdaki örnekte, output_dir
müşteri tarafından ayarlanan bir parametredir ve total_rounds
ve num_clients
program tarafından ayarlanan parametrelerdir.
Platforma Özel Bileşenler
Platforma özel bileşenler, TFF'nin federe program kütüphanesi tarafından tanımlanan soyut arayüzleri uygulayan bir platform tarafından sağlanan bileşenlerdir.
Platformdan Bağımsız Bileşenler
Platformdan bağımsız bileşenler, TFF'nin federe program kütüphanesi tarafından tanımlanan soyut arayüzleri uygulayan bir kütüphane (örn. TFF) tarafından sağlanan bileşenlerdir.
Hesaplamalar
Hesaplamalar tff.Computation
soyut arayüzünün uygulamalarıdır.
Örneğin, TFF platformunda bir tff.framework.ConcreteComputation
oluşturmak için tff.tensorflow.computation
veya tff.federated_computation
dekoratörlerini kullanabilirsiniz:
Daha fazla bilgi için bir hesaplamanın ömrüne bakın.
Program Mantığı
Program mantığı, girdi olarak alan bir Python işlevidir:
- müşteri ve program tarafından belirlenen parametreler
- platforma özgü bileşenler
- platformdan bağımsız bileşenler
- hesaplamalar
ve genellikle aşağıdakileri içeren bazı işlemleri gerçekleştirir:
- hesaplamaları yürütmek
- Python mantığını yürütme
- Verilerin platform depolama alanında somutlaştırılması :
- Python mantığında kullanın
- hata toleransını uygulamak
ve genellikle aşağıdakileri içeren bazı çıktılar sağlayabilir:
- verileri müşteri depolama alanına metrik olarak yayınlama
Örneğin:
async def program_logic(
initialize: tff.Computation,
train: tff.Computation,
data_source: tff.program.FederatedDataSource,
total_rounds: int,
num_clients: int,
metrics_manager: tff.program.ReleaseManager[
tff.program.ReleasableStructure, int
],
) -> None:
state = initialize()
start_round = 1
data_iterator = data_source.iterator()
for round_number in range(1, total_rounds + 1):
train_data = data_iterator.select(num_clients)
state, metrics = train(state, train_data)
_, metrics_type = train.type_signature.result
metrics_manager.release(metrics, metrics_type, round_number)
Roller
Birleştirilmiş programları tartışırken tanımlanması yararlı olan üç rol vardır: müşteri , platform ve kitaplık . Bu rollerin her biri, birleştirilmiş bir program oluşturmak için kullanılan bazı bileşenlerin sahibidir ve yazar. Ancak tek bir varlığın veya grubun birden fazla rolü yerine getirmesi mümkündür.
Müşteri
Müşteri genellikle:
- müşteri depolama alanına sahip
- programı başlatıyor
ancak şunları yapabilir:
- programı yazar
- platformun yeteneklerinden herhangi birini yerine getirin
platformu
Platform genellikle:
- platform depolama alanına sahip
- yazarların platforma özel bileşenleri
ancak şunları yapabilir:
- programı yazar
- Kütüphanenin yeteneklerinden herhangi birini yerine getirmek
Kütüphane
Bir kütüphane genellikle:
- yazarlar platformdan bağımsız bileşenler
- yazar hesaplamaları
- yazarların program mantığı
Kavramlar
<!--#include file="concepts.dot"-->
Birleşik programları tartışırken tanımlanması yararlı olan birkaç kavram vardır.
Müşteri Depolama Alanı
Müşteri depolaması, müşterinin okuma ve yazma erişimine sahip olduğu ve platformun yazma erişimine sahip olduğu depolamadır.
Platform Depolama
Platform depolama, yalnızca platformun okuma ve yazma erişimine sahip olduğu depolamadır.
Serbest bırakmak
Bir değerin serbest bırakılması, değerin müşteri deposunda kullanılabilir olmasını sağlar (örneğin, değerin bir kontrol panelinde yayınlanması, değerin günlüğe kaydedilmesi veya değerin diske yazılması).
Gerçekleştir
Bir değer referansının gerçekleştirilmesi, referans verilen değerin program tarafından kullanılabilir olmasını sağlar. Genellikle değeri serbest bırakmak veya program mantığını hataya dayanıklı hale getirmek için bir değer referansının gerçekleştirilmesi gerekir.
Hata Toleransı
Hata toleransı, program mantığının bir hesaplamayı yürütürken bir hatadan kurtulma yeteneğidir. Örneğin, 100 turun ilk 90'ını başarıyla eğitirseniz ve ardından bir başarısızlıkla karşılaşırsanız, program mantığı eğitimi 91. turdan devam ettirebilecek kapasitede midir yoksa eğitimin 1. turda yeniden başlatılması gerekir mi?