Wdrożenie

Oprócz definiowania obliczeń TFF udostępnia narzędzia do ich wykonywania. Podczas gdy główny nacisk kładziony jest na symulacje, oferowane przez nas interfejsy i narzędzia są bardziej ogólne. W tym dokumencie opisano opcje wdrożenia na różnych typach platform.

Przegląd

Istnieją dwa główne tryby wdrażania obliczeń TFF:

  • Natywne backendy . Zaplecze będziemy nazywać natywnym , jeśli jest ono w stanie interpretować strukturę składniową obliczeń TFF zgodnie z definicją w computation.proto . Natywny backend niekoniecznie musi obsługiwać wszystkie konstrukcje językowe lub elementy wewnętrzne. Natywne backendy muszą implementować jeden ze standardowych interfejsów executora TFF, taki jak tff.framework.Executor do wykorzystania przez kod Pythona lub jego niezależną od języka wersję zdefiniowaną w executor.proto uwidocznioną jako punkt końcowy gRPC.

    Natywne backendy obsługujące powyższe interfejsy mogą być używane interaktywnie zamiast domyślnego referencyjnego środowiska wykonawczego, np. do uruchamiania notatników lub skryptów eksperymentalnych. Większość natywnych backendów będzie działać w trybie interpretowanym , tj. będą przetwarzać definicję obliczeń w takiej postaci, w jakiej została zdefiniowana, i wykonywać ją przyrostowo, ale nie zawsze musi tak być. Natywny backend może również przekształcić ( kompilować lub skompilować JIT) część obliczeń w celu uzyskania lepszej wydajności lub uproszczenia jego struktury. Jednym z przykładów powszechnego zastosowania tej opcji byłoby ograniczenie zestawu operatorów stowarzyszonych pojawiających się w obliczeniach, tak aby części zaplecza znajdujące się poniżej transformacji nie musiały być udostępniane pełnemu zestawowi.

  • Nienatywne backendy . Backendy nienatywne, w przeciwieństwie do natywnych, nie mogą bezpośrednio interpretować struktury obliczeniowej TFF i wymagają jej konwersji na inną reprezentację docelową zrozumiałą dla backendu. Godnym uwagi przykładem takiego backendu byłby klaster Hadoop lub podobna platforma dla statycznych potoków danych. Aby obliczenia mogły zostać wdrożone w takim backendie, należy je najpierw przekształcić (lub skompilować ). W zależności od konfiguracji można to zrobić w sposób niewidoczny dla użytkownika (tzn. nienatywny backend może zostać opakowany w standardowy interfejs executora, taki jak tff.framework.Executor , który wykonuje transformacje pod maską) lub może zostać ujawniony jako narzędzie, które pozwala użytkownikowi ręcznie przekonwertować obliczenie lub zestaw obliczeń na odpowiednią reprezentację docelową zrozumiałą dla określonej klasy backendów. Kod obsługujący określone typy nienatywnych backendów można znaleźć w przestrzeni nazw tff.backends . W chwili pisania tego tekstu jedynym typem obsługi nienatywnych backendów jest klasa systemów zdolnych do wykonywania jednorundowego MapReduce.

Natywne backendy

Więcej szczegółów już wkrótce.

Nienatywne backendy

MapaRedukuj

Więcej szczegółów już wkrótce.