Я работаю в среде, в которой вычислительные ресурсы используются совместно, то есть у нас есть несколько серверных машин, оснащенных несколькими графическими процессорами Nvidia Titan X на каждой.
Для моделей малого и среднего размера 12 ГБ Titan X обычно достаточно, чтобы 2-3 человека могли одновременно тренироваться на одном и том же графическом процессоре. Если модели достаточно малы, чтобы одна модель не в полной мере использовала все вычислительные единицы графического процессора, это может фактически привести к ускорению по сравнению с запуском одного учебного процесса за другим. Даже в тех случаях, когда одновременный доступ к графическому процессору замедляет индивидуальное время обучения, все же приятно иметь возможность одновременной тренировки нескольких пользователей на графическом процессоре.
Проблема с TensorFlow заключается в том, что по умолчанию он выделяет полный объем доступной памяти GPU при запуске. Даже для небольшой двухслойной нейронной сети я вижу, что все 12 ГБ памяти GPU израсходованы.
Есть ли способ заставить TensorFlow выделять, скажем, 4 ГБ памяти GPU, если известно, что этого достаточно для данной модели?
источник
MonitoredTrainingSession
https://github.com/tensorflow/tensorflow/issues/1578
источник
from keras import backend as K
иK.set_session(sess)
ограничения памяти , остерегайтесьВот выдержка из Книги
Deep Learning with TensorFlow
1) Разрешить рост: (более гибкий)
Второй метод - это
per_process_gpu_memory_fraction
опция, которая определяет долю общего объема памяти, котораяeach
должна быть выделена видимому графическому процессору. Примечание: освобождение памяти не требуется, это может даже ухудшить фрагментацию памяти, когда закончите.2) Выделите фиксированную память :
Распределение
40%
общей памяти каждого графического процессора только:Примечание. Это полезно только в том случае, если вы действительно хотите связать объем памяти GPU, доступной в процессе TensorFlow.
источник
Обновлено для TensorFlow 2.0 Alpha и выше
Из 2.0 Alpha docs ответ теперь - всего одна строка, прежде чем что-то делать с TensorFlow:
источник
Все ответы выше предполагают выполнение с
sess.run()
вызовом, который становится исключением, а не правилом в последних версиях TensorFlow.При использовании
tf.Estimator
фреймворка (TensorFlow 1.4 и выше) способ передать дробь неявно созданномуMonitoredTrainingSession
:Аналогично в режиме Eager (TensorFlow 1.5 и выше),
Редактировать: 11-04-2018 Например, если вы хотите использовать
tf.contrib.gan.train
, то вы можете использовать что-то похожее на ниже:источник
Для Tensorflow версии 2.0 и 2.1 используйте следующий фрагмент :
Для предыдущих версий у меня работал следующий фрагмент:
источник
Tensorflow 2.0 Beta и (возможно) вне
API снова изменился. Теперь его можно найти в:
Псевдонимы:
Ссылки:
Смотрите также: Tensorflow - используйте графический процессор : https://www.tensorflow.org/guide/gpu
для Tensorflow 2.0 Alpha см .: этот ответ
источник
Ты можешь использовать
в переменных вашего окружения.
В тензорном коде:
источник
Бесстыдный плагин: если вы устанавливаете Tensorflow, поддерживаемый графическим процессором, сеанс сначала выделяет все графические процессоры, независимо от того, настроены ли вы на использование только центрального процессора или графического процессора. Я могу добавить мой совет, что даже если вы настроите график для использования только процессора, вы должны установить ту же конфигурацию (как ответ выше :)), чтобы предотвратить нежелательное использование графического процессора.
И в интерактивном интерфейсе, таком как IPython, вы также должны установить эту конфигурацию, в противном случае она выделит всю память и почти не оставит ее для других. Это иногда трудно заметить.
источник
Для Tensorflow 2.0 это решение работало для меня. (TF-GPU 2.0, Windows 10, GeForce RTX 2070)
источник
Если вы используете Tensorflow 2, попробуйте следующее:
источник
я пытался обучить unet на наборе данных вокала, но из-за огромного размера изображения память заканчивалась. Я попробовал все вышеупомянутые советы, даже попробовал с размером партии == 1, но без улучшения. иногда версия TensorFlow также вызывает проблемы с памятью. попробуйте с помощью
источник
Ну, я новичок в tenorflow, у меня есть Geforce 740m или что-то вроде GPU с 2 Гб оперативной памяти, я запускал рукописный пример mnist для родного языка с обучающими данными, содержащими 38700 изображений и 4300 тестовых изображений, и пытался получить точность, вспомним, F1, использующий следующий код в качестве sklearn, не давал мне точных результатов. как только я добавил это в свой существующий код, я начал получать ошибки графического процессора.
Кроме того, моя модель была тяжелой, я думаю, я получал ошибку памяти после 147, 148 эпох, а затем я подумал, почему бы не создать функции для задач, поэтому я не знаю, работает ли он таким образом в tensrorflow, но я подумал, если локальная переменная использовался, и когда он выходит из области видимости, он может освободить память, и я определил вышеупомянутые элементы для обучения и тестирования в модулях, я смог достичь 10000 эпох без каких-либо проблем, я надеюсь, что это поможет ..
источник
источник