Использование памяти, не удалось получить алгоритм свертки. возможно, это связано с тем, что cudnn не удалось инициализировать, TF_FORCE_GPU_ALLOW_GROWTH 'Истинно решить проблему - PullRequest
0 голосов
/ 07 марта 2020

Когда я пытаюсь приспособить простую модель CNN с керасами с использованием tenorflow 2.1.0, я сталкиваюсь с проблемами использования памяти на моем графическом процессоре.

Прежде всего, вот библиотеки, которые я установил с помощью condas :

tensorflow 2.1.0
cudatoolkit 10.1.243
cudnn 7.6.5

и вот результат nvidia-smi после подгонки модели:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    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 208...  On   | 00000000:08:00.0  On |                  N/A |
|  0%   48C    P2    57W / 250W |   7788MiB /  7979MiB |      3%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1554      G   /usr/lib/xorg/Xorg                           267MiB |
|    0      8141      C   ...da3/envs/tensorflow_gpu_test/bin/python  7443MiB |
+-----------------------------------------------------------------------------+

Вот модель, которую я пытаюсь подогнать:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 30, 30, 32)        896       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 15, 15, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 13, 13, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 6, 6, 64)          0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 4, 4, 64)          36928     
_________________________________________________________________
flatten (Flatten)            (None, 1024)              0         
_________________________________________________________________
dense (Dense)                (None, 64)                65600     
_________________________________________________________________
dense_1 (Dense)              (None, 10)                650       
=================================================================
Total params: 122,570
Trainable params: 122,570
Non-trainable params: 0

Когда я пытаюсь соответствовать этой модели, я получаю следующую ошибку:

CUDNN ERROR: Failed to get convolution algorithm

Я прочитал различные сообщения об этой ошибке и понял, что это может быть связано с ошибками памяти (насколько я понимаю, tenorflow заполняет память графического процессора для быстрой инициализации cudnn). Итак, я наконец-то нашел решение, используя:

os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'

вверху скрипта.

Итак, мой вопрос прост: есть ли способ решить эти проблемы с памятью на моем графическом процессоре без используя этот обходной путь?

Кроме того, чтобы сохранить порядок как можно более аккуратным, я бы хотел использовать исключительно менеджер пакетов conda для обработки зависимостей cuda, tenorflow и cudnn (чтобы избежать смешивания между pip and conda).

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

РЕДАКТИРОВАТЬ: Это сообщение, которое может помочь другим с использованием карт RTX с тензорным потоком:

средний, карты RTX, использование памяти

1 Ответ

0 голосов
/ 07 марта 2020

Я не знаю, как решить вашу проблему. Я построил и обучил гораздо более крупные модели, чем та, которую вы используете на графическом процессоре, без возникновения этой проблемы без необходимости использовать обходной путь, который вы используете. Однако я получаю проблему, если у меня слишком много запущенных экземпляров python. Если я убью несколько запущенных экземпляров, проблема исчезнет. Ни один из других экземпляров не использует графический процессор, но проблема все еще возникает, и я не смог понять, почему. При возникновении этой проблемы у вас работает несколько экземпляров python? Попробуйте это без других запущенных экземпляров и без обходного пути и посмотрите, исчезнет ли проблема. Для другой проблемы я использую pip и conda для установки пакетов. Я обнаружил, что для tenorsflow 2.0 лучше использовать conda, чем pip, потому что с conda набор инструментов и Cudnn устанавливаются автоматически.

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