Как заставить TensorFlow использовать 100% GPU? - PullRequest
1 голос
/ 03 ноября 2019

У меня есть ноутбук с графическим процессором RTX 2060, и я использую Keras и TF 2 для обучения на нем LSTM. Я также наблюдаю за использованием графического процессора nvidia-smi и заметил, что ноутбук Jupyter и TF используют максимум 35%, и обычно графический процессор используется между 10-25%.

В текущих условиях потребовалосьболее 7 часов на обучение этой модели, я хочу знать, что я делаю что-то не так или это ограничение Keras и TF?

Мой вывод nvidia-smi:

Sun Nov  3 00:07:37 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26       Driver Version: 430.26       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 2060    Off  | 00000000:01:00.0  On |                  N/A |
| N/A   51C    P3    22W /  N/A |    834MiB /  5931MiB |     24%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1032      G   /usr/lib/xorg/Xorg                           330MiB |
|    0      1251      G   /usr/bin/gnome-shell                         333MiB |
|    0      1758      G   ...equest-channel-token=622209288718607755   121MiB |
|    0      5086      G   ...uest-channel-token=12207632792533837012    47MiB |
+-----------------------------------------------------------------------------+

Мой LSTM:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import LSTM
from tensorflow.keras.layers import Dropout

regressor = Sequential()

regressor.add(LSTM(units = 180, return_sequences = True, input_shape = (X_train.shape[1], 3)))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 180, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 180, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 180, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 180, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 180))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')

regressor.fit(X_train, y_train, epochs = 10, batch_size = 32, callbacks=[cp_callback])

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

TensorFlow автоматически заботится об оптимизации распределения ресурсов GPU через CUDA и cuDNN, при условии, что последний установлен правильно. Статистика использования, которую вы видите, это в основном статистика активности / памяти, не обязательно полезности (выполнения);см. этот ответ . То, что ваша утилита «всего лишь» 25%, - это хорошо, в противном случае, если вы существенно увеличили размер модели (который не является большим как есть), вы бы получили OOM.

Чтобы увеличить использование, увеличьтеразмер партии, размер модели или что-либо еще увеличило бы параллелизм вычислений;обратите внимание, что углубление модели увеличит полезность памяти графического процессора, но намного меньше, чем его вычислительную утилиту.

Кроме того, рассмотрите возможность использования CuDNNLSTM вместо LSTM, который может работать 10x быстрее и использовать меньше памяти графического процессора (благодаря алгоритмическому мастерству), но больше вычислительной полезности. Наконец, вставка Conv1D в качестве первого слоя с strides > 1 значительно увеличит скорость поезда за счет уменьшения входного размера, не нанося ущерба производительности (это может фактически улучшить ее).


Обновление: разгон графического процессора возможен, но я бы посоветовал против этого, поскольку он может изнашивать графический процессор в долгосрочной перспективе (и все DL - "долгосрочные"). Есть также «перенапряжение» и другие аппаратные настройки, но все они должны использоваться для некоторых коротких приложений. Что будет иметь наибольшее значение, так это ваш конвейер входных данных .

0 голосов
/ 03 ноября 2019

Нет ограничений по использованию графического процессора в tenorflow или jupyter. Проблема в том, что вы не можете загрузить свой графический процессор. Обычно это означает, что ваш загрузчик данных работает медленнее, чем GPU обрабатывает данные. Попробуйте профилировать свой рабочий процесс, и вы найдете узкое место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...