(Tensorflow) У меня CUDNN_STATUS_ALLOC_FAILED, почему установка для атрибута set_memory_growth значения True в конфигурации графического процессора решает проблему? - PullRequest
0 голосов
/ 04 августа 2020

Этот вопрос не о том, как решить ошибку: Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED, которая иногда встречается, когда кто-то пытается обучить сеть с помощью Tensorflow. Я нашел много обсуждений, и это в значительной степени решено. Это те обсуждения, о которых я говорил.

  1. Не удалось создать дескриптор cudnn: CUDNN_STATUS_ALLOC_FAILED (проблемы с github)
  2. Не удалось создать дескриптор cudnn: CUDNN_STATUS_ALLOC_FAILED (форум nvidia)
  3. Как предотвратить выделение тензорным потоком всей памяти графического процессора? (stackoverflow)

Всегда есть одно важное решение для Эта проблема. Они сказали, что это может быть связано с проблемой памяти графического процессора, поэтому установка атрибута set_memory_growth конфигурации графического процессора на True решит проблему (по крайней мере, в моем случае).

Я хотел спросить, , почему ?

Я прочитал Используйте документацию по графическому процессору от Tensorflow, в которой говорилось:

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

Исходя из этого, я мог (возможно) понять, почему иногда мы наблюдаем ошибку CUDNN_STATUS_ALLOC_FAILED. Tensorflow по умолчанию выделяет для процесса почти всю память нашего графического процессора, и если нашему процессу требуется больше памяти (например, из-за сложности сети), он вызовет ошибку CUDNN_STATUS_ALLOC_FAILED, потому что не осталось места .

Затем я также прочитал эту часть документации, в которой говорилось:

В некоторых случаях желательно, чтобы процесс выделял только подмножество доступной памяти, или только для увеличения использования памяти, если это необходимо процессу . Первый вариант - включить рост памяти, вызвав tf.config.experimental.set_memory_growth, который пытается выделить столько памяти графического процессора, сколько необходимо для распределения времени выполнения: он начинает выделять очень мало памяти, и когда программа получает для работы и требуется больше памяти графического процессора, мы расширяем область памяти графического процессора, выделенную для процесса TensorFlow.

Я понял, что установив set_memory_growth на True, Tensorflow выделит Память GPU по мере необходимости, чтобы она не работала как стандартная.

Но я не вижу никакой связи с моей первой мыслью. Если проблема в первую очередь связана с ограничением памяти графического процессора, почему установка set_memory_growth на True может решить проблему? В моем случае я использую ту же самую точную сеть глубокого обучения и тот же графический процессор (следовательно, тот же размер доступной памяти) для конфигурации по умолчанию и конфигурации set_memory_growth True. Почему последний не вызывает ошибок?

Я что-то не понимаю? Я был бы очень признателен, если бы кто-нибудь мог исправить мое недоразумение (если оно есть) или предоставить дополнительную информацию об этой конкретной проблеме.

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