Rozproszony przepływ tensorflow: różnica między replikacją w grafie a replikacją między grafem

Pomyliłem się co do dwóch pojęć: In-graph replication i Between-graph replication czytając replikowany trening w oficjalnym How-to tensorflow.

  1. W powyższym linku jest napisane, że

    Replikacja w grafie. w tym podejściu klient buduje pojedynczy tf.Wykres zawierający jeden zestaw parametrów (w tf.Węzły zmienne przypięty do / job:ps);)..

    Czy to oznacza, że istnieje wiele tf.Graphs in Between-graph replication approach? Jeśli tak, gdzie są odpowiednie kody w podane przykłady?

  2. O ile w powyższym linku jest już Between-graph replication przykład, czy ktoś mógłby podać In-graph replication implementacji (pseudo kod jest w porządku) i podkreślają jego główne różnice od Between-graph replication?

    Z góry dzięki!


Edit_1: więcej pytań

Wielkie dzięki za szczegółowe wyjaśnienia i Kod gist @mrry @YaroslavBulatov ! Po obejrzeniu Wasze odpowiedzi, mam następujące dwa pytania:

  1. W Trening replikowany jest następujące stwierdzenie:

    Replikacja między grafami. w tym podejściu istnieje oddzielna klient dla każdego / zadania: zadanie pracownika, zazwyczaj w tym samym procesie, co zadanie pracownika. Każdy klient buduje podobny Wykres zawierający parametry (przypięte do / job:ps jak przed użyciem tf.pociąg.replica_device_setter (), aby odwzorować je deterministycznie na te same zadania); oraz pojedynczy egzemplarz części obliczeniowej model, przypięty do lokalnego zadania w /job: worker.

    Mam dwa pytania podrzędne związane z powyższymi słowami pogrubionymi.

    (A) dlaczego mówimy, że każdy klient buduje podobny Wykres , ale nie ten sam wykres? Zastanawiam się, Wykres zbudowany w każdym kliencie na przykładzie replikowanego szkolenia powinny być takie same, ponieważ poniżej kody konstrukcyjne grafu są współdzielone we wszystkich workerS.:

    # Build model...

    loss = ...

    global_step = tf.Variable(0)

    (B) czy nie powinno być wielokrotnych kopii części obliczeniowej model, ponieważ mamy wiele workers?

  2. Czy przykład w replikowany trening obsługuje trening na wielu maszynach, z których każda ma wiele GPU? Jeśli nie, możemy używaj jednocześnie obu In-graph replication do wspomagania treningu na wielu GPU na każdej maszynie i Between-graph replication dla trening między maszynami? Pytam o to pytanie ponieważ @mrry używany w cifar-10 przykładowy model dla wielu GPU .

Author: ROBOT AI, 2017-01-11

1 answers

Po pierwsze, w kontekście historycznym, "replikacja w grafie" jest pierwszym podejściem, które wypróbowaliśmy w TensorFlow i nie osiągnęło ono wydajności wymaganej przez wielu użytkowników, więc bardziej skomplikowane podejście "między grafami" jest obecnie zalecanym sposobem wykonywania rozproszonych szkoleń. Biblioteki wyższego poziomu, takie jak tf.learn, używają podejścia "between-graph" do szkolenia rozproszonego.

Aby odpowiedzieć na twoje konkretne pytania:

  1. Czy to znaczy istnieje wiele tf.Graphs W wykresie pomiędzy podejście replikacyjne? Jeżeli tak, to gdzie znajdują się odpowiednie kody w podanych przykładach?

    Tak. Typowa konfiguracja replikacji między grafami będzie używać oddzielnego procesu TensorFlow dla każdej repliki roboczej, a każdy z nich zbuduje oddzielny tf.Graph dla modelu. Zwykle każdy proces korzysta z globalnego domyślnego wykresu (dostępnego poprzez tf.get_default_graph()) i nie jest tworzony jawnie.

    (W zasadzie można użyć pojedynczy proces TensorFlow z tymi samymi obiektami tf.Graph i wieloma obiektami tf.Session, które mają ten sam wykres bazowy, o ile opcja tf.ConfigProto.device_filters dla każdej sesji została skonfigurowana inaczej, ale jest to rzadka konfiguracja.)

  2. O ile w powyższym linku jest już przykład replikacji między grafami, czy ktoś mógłby podać implementację replikacji w grafie (pseudokod jest w porządku) i podkreślić jej główne różnice w stosunku do replikacji między grafami?

    Dla ze względów historycznych nie ma zbyt wielu przykładów replikacji w grafie (wyjątek stanowi gist Jarosława[23]). Program wykorzystujący replikację w grafie zazwyczaj zawiera pętlę, która tworzy tę samą strukturę wykresu dla każdego workera (np. pętlę na linii 74 gist) i używa współdzielenia zmiennych między workerami.

    Jedynym miejscem, w którym utrzymuje się replikacja w grafie, jest używanie wielu urządzeń w jednym procesie (np. wielu procesorów graficznych). CIFAR-10 przykładowy model dla wielu układów GPU jest przykładem tego wzorca (zobacz pętlę nad urządzeniami GPU tutaj).

(moim zdaniem niespójność między traktowaniem wielu pracowników i wielu urządzeń w jednym pracowniku jest niefortunna. Replikacja w grafie jest łatwiejsza do zrozumienia niż replikacja między grafami, ponieważ nie polega na niejawnym współdzieleniu między replikami. Biblioteki wyższego poziomu, takie jak tf.learn i TF-Slim, ukrywają niektóre z tych problemów, i dać nadzieję, że możemy zaoferować lepszy schemat replikacji w przyszłości.)

  1. Dlaczego mówimy, że każdy klient buduje podobny Wykres, ale nieten sam Wykres?

    Ponieważ nie muszą być identyczne (i nie ma kontroli integralności, która tego wymusza). W szczególności każdy pracownik może utworzyć Wykres z różnymi przypisaniami urządzeń jawnych ("/job:worker/task:0", "/job:worker/task:1", itd.). Główny pracownik może tworzyć dodatkowe operacje które nie są tworzone na (lub używane przez) pracowników nie-naczelnych. Jednak w większości przypadków wykresy są logicznie (tj. przyporządkowania urządzeń modulo) takie same.

    Czy nie powinno to być wielokrotne kopie obliczeniowej części modelu, skoro mamy wielu pracowników?

    Zazwyczaj każdy pracownik ma oddzielny wykres, który zawiera pojedynczą kopię obliczeniowej części modelu. Wykres dla workera i nie zawiera węzłów dla worker j (zakładając, że I ≠ j). (Wyjątek dotyczy replikacji między grafami w szkoleniu rozproszonym oraz replikacji w grafie w przypadku korzystania z wielu procesorów graficznych w każdym środowisku roboczym. W takim przypadku wykres dla workera zazwyczaj zawiera N kopie intensywnie obliczeniowej części wykresu, gdzie N jest liczbą GPU w tym workerze.)

  2. Czy przykład w replikowany trening wspomaga trening na wiele maszyn, z których każdy ma wiele procesorów graficznych?

    Przykładowy kod obejmuje tylko szkolenia na wielu komputerach i nie mówi nic o tym, jak trenować na wielu GPU w każdej maszynie. Jednak techniki komponują się łatwo. W tej części przykładu:

    # Build model...
    loss = ...
    

    ...możesz dodać pętlę nad procesorami GPU na maszynie lokalnej, aby uzyskać rozproszone szkolenie wielu pracowników, każdy z wieloma procesorami GPU.

 30
Author: mrry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 23:18:22