Когда я пытаюсь приспособить простую модель 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, использование памяти