Odpowiedz

25

Opcje inter_op_parallelism_threads i intra_op_parallelism_threads są udokumentowane w source of the tf.ConfigProto protocol buffer. Te opcje konfiguracji dwa baseny nici użytej przez TensorFlow parallelize wykonania, zgodnie komentarze opisać:

// The execution of an individual op (for some op types) can be 
// parallelized on a pool of intra_op_parallelism_threads. 
// 0 means the system picks an appropriate number. 
int32 intra_op_parallelism_threads = 2; 

// Nodes that perform blocking operations are enqueued on a pool of 
// inter_op_parallelism_threads available in each process. 
// 
// 0 means the system picks an appropriate number. 
// 
// Note that the first Session created in the process sets the 
// number of threads for all future sessions unless use_per_session_threads is 
// true or session_inter_op_thread_pool is configured. 
int32 inter_op_parallelism_threads = 5; 

Istnieje kilka możliwych form równoległości gdy uruchomione wykres TensorFlow i opcje te zapewniają pewną kontrolę multi-core CPU równoległość:

  • Jeśli masz pracę, która może być parallelized wewnętrznie, takich jak mnożenie macierzy (tf.matmul()) lub redukcji (np tf.reduce_sum()) TensorFlow wykona go planowania zadań w puli wątków z intra_op_parallelism_threads wątkach. Ta opcja konfiguracji kontroluje maksymalne równoległe przyspieszenie dla pojedynczej operacji. Zwróć uwagę, że jeśli uruchomisz wiele operacji równolegle, te operacje będą współużytkować tę pulę wątków.

  • Jeśli masz wiele operacji, które są niezależne w swojej wykresie TensorFlow — ponieważ nie ma skierowany ścieżka między nimi w przepływu danych wykres — TensorFlow będzie próbował uruchomić je jednocześnie, przy użyciu puli wątków z inter_op_parallelism_threads wątkach. Jeśli te operacje mają implementację wielowątkową, będą one (w większości przypadków) współużytkować tę samą pulę wątków dla równoległości wewnętrznej operacji.

Wreszcie obie opcje konfiguracyjne przyjąć domyślną wartość 0, co oznacza „system wybiera odpowiedni numer.” Obecnie oznacza to, że każda pula wątku będzie miała jeden wątek na rdzeń procesora w komputerze.

+0

Czy można to wykorzystać do paralelizacji kodu przez wiele procesorów? Jak korzystać z tych funkcji w celu osiągnięcia odporności na awarie w przypadku awarii jednego z komputerów w klastrze? – itsamineral

+2

Te opcje kontrolują maksymalną ilość paralelizmu, jaki można uzyskać dzięki uruchomieniu wykresu TensorFlow. Opierają się one jednak na operacjach wykonywanych równolegle (podobnie jak wiele standardowych ziaren) w przypadku równoległości wewnętrznej operacji; oraz dostępność niezależnych operacji do wyświetlania na wykresie dla równoległości między opcjami. Jeśli jednak (na przykład) twój wykres jest liniowym łańcuchem operacji, a te operacje mają tylko szeregowe implementacje, to te opcje nie dodadzą równoległości. Opcje nie są związane z tolerancją błędu (lub rozproszonym wykonaniem). – mrry

+1

Wygląda na to, że dwie opcje działają tylko dla procesorów, ale nie dla procesorów graficznych? Gdybym miał tf.add_n operatora wielu operacji opartych na multiplikacji macierzy równoległej i działał w GPU, w jaki sposób jest wykonywana konfiguracja domyślna i czy mogę ją kontrolować? – chentingpc