Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Moduł: tf.distribute

TensorFlow 1 wersja

Biblioteka na prowadzenie obliczeń na wielu urządzeniach.

Intencją tej biblioteki jest to, że można napisać algorytm w stylizowanej sposób i będzie to działało z różnych tf.distribute.Strategy wdrożeń. Każdy potomek będzie zastosować inną strategię dystrybucji algorytmu w wielu urządzeń / maszyn. Co więcej, zmiany te mogą być ukryte wewnątrz poszczególnych warstw i innych zajęciach bibliotecznych, które wymagają specjalnego traktowania, aby uruchomić w rozproszonym otoczeniu, tak że kod większości użytkowników wzór definicja może działać bez zmian. tf.distribute.Strategy API działa w ten sam sposób z realizacją chętny i wykresu.

przewodniki

Poradniki

Słownik

  • Równoległość danych jest gdzie możemy uruchomić wiele kopii tego modelu na różnych plasterków danych wejściowych. Jest to w przeciwieństwie do modelu równoległości gdzie dzielimy się pojedynczą kopię modelu na wielu urządzeniach. Uwaga: tylko wspierać równoległości danych do teraz, ale nadzieja, aby dodać wsparcie dla modelu równoległości w przyszłości.
  • Urządzenie jest CPU lub przyspieszacz (np GPU, TPU) na jakiejś maszynie, która TensorFlow można uruchomić operacji (patrz np tf.device ). Można mieć wiele urządzeń na pojedynczym komputerze lub być podłączone do urządzeń na wielu maszynach. Urządzenia wykorzystywane do obliczeń są uruchamiane nazywane urządzeniami pracownika. Urządzenia wykorzystywane do przechowywania zmiennych są urządzeniami parametrów. Dla niektórych strategii, takich jak tf.distribute.MirroredStrategy , urządzenia i parametrów pracownik będzie taka sama (patrz lustrzane zmiennych poniżej). Dla innych będą różne. Na przykład, tf.distribute.experimental.CentralStorageStrategy umieszcza zmienne na jednym urządzeniu (którym może być urządzenie lub pracownik może być CPU) i tf.distribute.experimental.ParameterServerStrategy umieszcza zmienne na oddzielnych komputerach zwanych serwerami parametrów (patrz poniżej).
  • Replika jest jedna kopia modelu, działa na jednym plasterkiem danych wejściowych. Teraz każda replika jest wykonana na własnym urządzeniu pracownika, ale gdy dodamy wsparcie dla modelu równoległości replika może obejmować wiele urządzeń pracownika.
  • Gospodarzem jest urządzenie procesora na maszynie z urządzeń roboczych, zazwyczaj używany do prowadzenia rurociągów wejściowych.
  • Pracownik określa się urządzenie fizyczne (y) zawierający fizycznych urządzeń (np graficzne, TPU), w którym replikowanych obliczenie jest wykonywany. Pracownik może zawierać jeden lub więcej replik, ale zawiera co najmniej jedną replikę. Zazwyczaj jeden pracownik będzie odpowiadał jednej maszynie, ale w przypadku bardzo dużych modeli z modelu równoległości, jeden pracownik może obejmować wiele maszyn. Zazwyczaj uruchomić jeden rurociąg wejściowy za pracownika, karmienie wszystkie repliki na temat tego pracownika.
  • Synchroniczny, lub bardziej powszechnie sync, szkolenia, gdzie aktualizacje z każdej repliki są łączone ze sobą przed aktualizacją zmienne modelu. Jest to w przeciwieństwie do asynchronicznego lub asynchronicznym szkolenia, gdzie każda replika aktualizuje zmienne modelu niezależnie. Można również mieć repliki podzielone na grupy, które są zsynchronizowane w każdej grupie, ale async między grupami.
  • Serwery parametrów: Są to maszyny, które posiadają pojedynczą kopię parametrów / zmiennych, stosowanych przez niektórych strategii (teraz tylko tf.distribute.experimental.ParameterServerStrategy ). Wszystkie repliki, które chcą działać na zmiennej pobrać go na początku etapu i wysłać aktualizację być zastosowany na koniec etapu. Mogą to być w priniciple wsparciu obu synchronizacji lub szkolenia asynchronicznym, ale teraz mamy tylko wsparcie dla kształcenia asynchronicznego z serwerami parametrów. Porównaj z tf.distribute.experimental.CentralStorageStrategy , co stawia wszystkie zmienne na jednym urządzeniu na tej samej maszynie (i robi szkolenia sync) i tf.distribute.MirroredStrategy , co lustra zmienne do wielu urządzeń (patrz niżej).

  • Kontekst replika vs. kontekście Cross-replik vs kontekście aktualizacji

    Kontekst replika zastosowanie podczas wykonywania funkcji obliczeń, które zostało wywołane z strategy.run . Koncepcyjnie, jesteś w kontekście replik podczas wykonywania funkcji obliczeń, które są replikowane.

    Kontekście zmiana jest wpisana w tf.distribute.StrategyExtended.update rozmowy.

    Kontekście cross-replika zostanie wprowadzony po wprowadzeniu strategy.scope . Jest to przydatne do wywoływania tf.distribute.Strategy metod, które działają na szczeblu replik (jak reduce_to() ). Domyślnie uruchomić w kontekście replik ( „default kontekstowego pojedyncze repliki”), a następnie niektóre metody mogą przełączać cię tam iz powrotem.

  • Ukazuje wartość: wartość rozprowadzany jest reprezentowana przez klasę bazową tf.distribute.DistributedValues . tf.distribute.DistributedValues jest przydatna do reprezentowania wartości na wielu urządzeniach i zawiera mapę z id repliki do wartości. Dwa reprezentatywne rodzaje tf.distribute.DistributedValues są „PerReplica” i wartości „lustrzanej”.

    Wartości „PerReplica” istnieje na urządzeniach pracowników, z inną wartością dla każdej repliki. Są one produkowane przez iteracja rozproszonego zbioru danych zwracanych przez tf.distribute.Strategy.experimental_distribute_dataset i tf.distribute.Strategy.experimental_distribute_datasets_from_function . Są też typowy wynik zwracany przez tf.distribute.Strategy.run .

    Wartości „lustrzane” są jak wartości „PerReplica”, z wyjątkiem wiemy, że wartość wszystkich replik są takie same. Możemy bezpiecznie czytać „lustrzanego” wartość w kontekście cross-repliki przy użyciu wartości w każdej replice.

  • Odwijania i połączenie: Rozważmy wywoływania funkcji fn na wielu replik jak strategy.run(fn, args=[w]) z argumentem w który jest tf.distribute.DistributedValues . To oznacza, w będzie mieć mapę biorąc id replika 0 do w0 , ID replika 1 do w1 , itp strategy.run() rozpakowuje w przed wywołaniem fn , więc wywołuje fn(w0) na urządzeniu d0 , fn(w1) na urządzeniu d1 , itp, a następnie łączy zwrotnych z wartości fn() , które prowadzi do jednego wspólnego obiektu, jeśli zwrócone są wartości sam obiekt ze wszystkich replik, albo DistributedValues obiekt inaczej.

  • Redukcje i całkowicie zredukować: redukcja A jest metoda agregacji wielu wartości do jednej wartości, jak „Suma” lub „średni”. Jeśli strategia robi szkolenia synchronizacji, będziemy przeprowadzić redukcję na gradientów do parametru z wszystkich replik przed zastosowaniem aktualizacji. All-zredukować to algorytm do wykonywania na zmniejszenie wartości z wieloma urządzeniami i uczynienie jej wynik jest dostępny na wszystkich tych urządzeniach.

  • Zmienne lustrzane: Są to zmienne, które są tworzone na wielu urządzeniach, gdzie trzymamy zmienne zsynchronizowane stosując te same aktualizacje do każdej kopii. Dublowane zmienne są tworzone z tf.Variable(...synchronization=tf.VariableSynchronization.ON_WRITE...) . Normalnie są one używane tylko w szkoleniu synchronicznym.

  • SyncOnRead zmienne

    SyncOnRead zmienne są tworzone przez tf.Variable(...synchronization=tf.VariableSynchronization.ON_READ...) , i są one tworzone na wielu urządzeniach. W kontekście replik, każdy zmienny składnik w lokalnej repliki mogą wykonywać odczytuje i zapisuje bez synchronizacji ze sobą. Gdy zmienna SyncOnRead jest odczytywany w kontekście cross-replik, wartości ze zmiennych składowych są sumowane i zwracane.

    SyncOnRead zmienne przynieść wiele trudności konfiguracji niestandardowych do podstawowej logiki, więc nie zachęcać użytkowników do zmiennych instancji i wykorzystanie SyncOnRead na własną rękę. Używaliśmy głównie zmienne SyncOnRead dla przypadków użycia, takich jak normy serii i metryki. Ze względu na wydajność, często nie trzeba zachować te statystyki w synchronizacji każdym kroku i mogą być gromadzone na każdej replice niezależnie. Jedynym razem chcemy je zsynchronizować donosi lub punktów kontrolnych, co zwykle dzieje się w ramach cross-replik. SyncOnRead zmienne są również często wykorzystywane przez zaawansowanych użytkowników, którzy chcą kontrolować, gdy wartości zmiennych są sumowane. Na przykład, użytkownicy często chcą utrzymać gradienty niezależnie na każdej replice na kilka kroków bez agregacji.

  • Rozprowadzać-aware warstwy

    Warstwy są ogólnie nazywane w kontekście replik, z wyjątkiem przy definiowaniu modelu funkcjonalnego Keras. tf.distribute.in_cross_replica_context pozwoli Ci określić, który przypadek jesteś. Jeśli w kontekście replik The tf.distribute.get_replica_context funkcja zwróci kontekst domyślny repliki poza zakresem strategii, None w zakresie strategii i tf.distribute.ReplicaContext obiekt wewnątrz zakresu strategii i wewnątrz tf.distribute.Strategy.run funkcji. ReplicaContext obiekt ma all_reduce metodę agregacji we wszystkich replikach.

Zauważ, że zapewniamy domyślną wersję tf.distribute.Strategy , który jest używany, gdy żadna inna strategia jest zakres, który zapewnia taką samą API z rozsądnym zachowanie domyślne.

moduły

cluster_resolver modułu: import biblioteki dla ClusterResolvers.

experimental moduł: Experimental Dystrybucja Strategia biblioteka.

klasy

class CrossDeviceOps : Klasa bazowa zmniejszenie przekroju urządzenia i algorytmy nadawczych.

class DistributedDataset : Reprezentuje zbiór danych rozproszonych wśród urządzeń i maszyn.

class DistributedIterator : Iterator nad tf.distribute.DistributedDataset .

class DistributedValues : Klasa bazowa reprezentujący rozproszonych wartości.

class HierarchicalCopyAllReduce : Redukcja za pomocą hierarchicznej kopię wszystko zredukować.

class InputContext : a informacja klasa zawijania potrzebna funkcja wprowadzania.

class InputOptions : opcje Run for experimental_distribute_dataset(s_from_function) .

class InputReplicationMode : Tryb replikacji dla funkcji wejściowej.

class MirroredStrategy : Synchronous szkolenia w wielu replikach na jednej maszynie.

class NcclAllReduce : Redukcja za pomocą NCCL wszystko zredukować.

class OneDeviceStrategy : Strategia dystrybucji działa na jednym urządzeniu.

class ReduceOp : Wskazuje, jak zbiór wartości powinna zostać zmniejszona.

class ReductionToOneDevice : Zawsze zrobić ograniczenie do jednego urządzenia, a potem nie nadawać.

class ReplicaContext : tf.distribute.Strategy API gdy w kontekście replik.

class RunOptions : Uruchom opcje strategy.run .

class Server : Serwer TensorFlow w procesie, do wykorzystania w rozproszonych szkolenia.

class Strategy : Stan & Compute polityka dystrybucji na liście urządzeń.

class StrategyExtended : Dodatkowe API dla algorytmów, które muszą być dystrybucja świadomy.

class TPUStrategy : Synchronous szkolenie na TPU i TPU strąków.

Funkcje

experimental_set_strategy(...) : ustawianie tf.distribute.Strategy jak bez prądu with strategy.scope() .