2016-06-02 43 views
6

Jestem całkiem nowy w firmie tensorflow. Używałem theano do rozwijania głębokiego uczenia się. Zauważyłem różnicę między tymi dwoma, to jest, gdzie dane wejściowe mogą być przechowywane.Dane treningowe sklepu tensorflow na pamięci GPU

W Theano obsługuje wspólną zmienną do przechowywania danych wejściowych w pamięci GPU w celu zmniejszenia transferu danych między procesorem a GPU.

W tensorflow, musimy podać dane do symbolu zastępczego, a dane mogą pochodzić z pamięci procesora lub plików.

Moje pytanie brzmi: czy możliwe jest zapisanie danych wejściowych w pamięci GPU dla tensorflow? czy robi to już w jakiś magiczny sposób?

Dzięki.

+1

Oto pełna Przykładem tego - [mnist fully_connected_preloaded.py] (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/how_tos/reading_data/fully_connected_preloaded.py) –

+0

@YaroslavBulatov Dzięki ! – xyd

+0

@YaroslavBulatov nie jesteś pewien, czy wiesz, czy nie, ale podany kod wykonuje jedną epokę w 28 sekund, co jest straszne. (Btw to jest na GPU). Co więcej, nie mogę znaleźć nawet jednego dobrego przykładu tensorflow w Internecie, który jest bardzo dziwny w porównaniu do innych ram głębokiego uczenia się, takich jak theano i latarka. Czy to dlatego, że tensorflow jest naprawdę wolniejszy od innych? Jeśli nie, to dlaczego nikt z twórców nie próbuje rozwiązać tego problemu, podczas gdy wszyscy nowi użytkownicy tensorflow mają o tym problem? – zwlayer

Odpowiedz

12

Jeśli Twoje dane mieszczą się na GPU, możesz załadować go do stałej na GPU z np. numpy tablicy:

with tf.device('/gpu:0'): 
    tensorflow_dataset = tf.constant(numpy_dataset) 

Jedną z metod wyodrębniania minibatches będzie kroić tej tablicy w każdym etapie zamiast doprowadzania go za pomocą tf.slice:

batch = tf.slice(tensorflow_dataset, [index, 0], [batch_size, -1]) 

Istnieje wiele możliwych odmian wokół tego tematu, w tym z zastosowaniem kolejki do dynamicznego wstępnego pobierania danych na GPU.

+0

Dziękuję bardzo! Zajrzę do tego. – xyd

1

Możliwe jest, jak wskazano, ale upewnij się, że jest on rzeczywiście użyteczny, zanim poświęcisz mu zbyt wiele wysiłku. Przynajmniej obecnie nie każda operacja ma obsługę GPU, a lista operacji bez takiej obsługi obejmuje niektóre typowe operacje grupowania i tasowania. Może nie być żadnej korzyści z umieszczenia danych na GPU, jeśli pierwszym etapem przetwarzania jest przeniesienie go na procesor.

Przed próbą byłaby kod używać przechowywania on-GPU, spróbuj przynajmniej jedną z następujących czynności:

1) Rozpocznij sesję logowania placement urządzenie do logowania, które ops są wykonywane na których urządzeniach:

config = tf.ConfigProto(log_device_placement=True) 
sess = tf.Session(config=config) 

2) Spróbuj ręcznie umieścić wykres na GPU, umieszczając jego definicję w bloku with tf.device('/gpu:0'):. Spowoduje to zgłoszenie wyjątków, jeśli operacje ops nie są obsługiwane przez układ GPU.

Powiązane problemy