2017-01-31 7 views
11

Моя машина имеет следующие спецификации:Почему мой GPU медленнее, чем процессор при обучении LSTM/RNN?

CPU: Xeon E5-1620 v4

GPU: Titan X (Pascal)

Ubuntu 16,04

Nvidia драйвер 375.26

CUDA Tookit 8,0

cuDNN 5.1

Я протестированный на следующие примерах Keras с Tensorflow как скопированный reference:

SCRIPT NAME     GPU  CPU 
stated_lstm.py    5sec  5sec 
babi_rnn.py     10sec  12sec 
imdb_bidirectional_lstm.py 240sec 116sec 
imbd_lstm.py     113sec 106sec 

Моей видеокарта явно не выполняет мой процессор в моделях без LSTM.

SCRIPT NAME     GPU  CPU 
cifar10_cnn.py    12sec  123sec 
imdb_cnn.py     5sec  119sec 
mnist_cnn.py     3sec  47sec 

Неужели кто-нибудь еще испытал это?

ответ

8

Слишком маленький размер партии. Попытайтесь увеличить.

Результаты для моих GTX1050Ti:

 
imdb_bidirectional_lstm.py 
batch_size  time 
32 (default) 252 
64    131 
96    87 
128    66 

imdb_lstm.py 
batch_size  time 
32 (default) 108 
64    50 
96    34 
128    25 
+0

Я мог бы увеличить размер партии как для моего gpu, так и для процессора, и оба они будут выполнять подобное, я ожидал бы, что gpu будет работать лучше. Также похоже, что мы получаем похожие времена, хотя моя графическая карта намного сильнее, чем 1050ti. Мой gpu явно превосходит мой процессор на cnns, но не lstm, почему? – agsolid

+1

@agsolid Ваш процессор очень быстрый. Мой Core i3-4330 вычисляет imdb_lstm.py (batch = 128) в 110 секунд за эпоху против 25 секунд на графическом процессоре. Ваш GPU также быстрее моего. Разница заключается в процентном отношении использования (ваш ниже). –

+0

Как я могу использовать свои GPU полную мощность? – agsolid

1

У меня подобные вопросы здесь:

Тест 1

CPU: Intel (R) Xeon (R) CPU E5-2697 v3 @ 2.60 ГГц

Ubuntu 14,04

imdb_bidirectional_lstm.py: 155s

Тест 2

GPU: GTX 860m

Nvidia Driver: 369,30

CUDA Toolkit: v8.0

cuDNN: v6.0

imdb_bidirectional_lstm.py: 450s

Анализ

Когда я наблюдаю кривую нагрузки на GPU, я обнаружил одну интересную вещь:

  • для LSTM, загрузка GPU быстро перескакивает между ~ 80% и ~ 10%

GPU load

В основном это связано с последовательным вычислением в слое LSTM.Помните, что LSTM требует последовательного ввода для вычисления скрытых весов слоев итеративно, другими словами, вы должны ждать скрытого состояния в момент времени t-1 для расчета скрытого состояния в момент времени t.

Это нехорошая идея для ядер GPU, так как у них много маленьких ядер, которые любят делать вычисления параллельно, последовательное вычисление не может полностью использовать их вычислительные мощности. Именно поэтому мы видим, что загрузка GPU составляет от 10% до 20% в большинстве случаев.

Но в фазе обратного распространения графический процессор может запускать производные вычисления параллельно, поэтому мы можем видеть, что максимальная загрузка GPU составляет около 80%.

+0

«GTX 860m» является мобильным графическим процессором и, следовательно, имеет чрезвычайно ограниченную полосу пропускания и vram. Я бы настоятельно рекомендовал не анализировать что-либо на мобильном gpus. –

+0

Я проверил свою собственную модель c-lstm прошлой ночью (1 слой cnn + 1 lstm layer), используя как '' GTX 860m'', так и '' GTX 1060''. Оказывается, что 1060 только ** 1,28 ** раз быстрее, чем 860 м. Поэтому я хотел бы утверждать, что 1060 все еще медленнее, чем CPU для '' imdb_bidirectional_lstm''. Будет проверять мою идею сегодня вечером. –

+0

'' GTX 1060'': одна эпоха принимает '' 320s'' –

 Смежные вопросы

  • Нет связанных вопросов^_^