Tensorflow выдает исключение при использовании графического процессораPython

Программы на Python
Anonymous
Tensorflow выдает исключение при использовании графического процессора

Сообщение Anonymous »

Я пытаюсь ускорить модель, которую я построил с помощью keras, и после некоторых трудностей с версиями библиотеки cuda мне удалось заставить тензорный поток обнаружить мой графический процессор. Однако теперь, когда я запускаю модель с обнаруженным графическим процессором, происходит сбой со следующей обратной трассировкой:

Код: Выделить всё

2021-01-20 17:40:26.549946: W tensorflow/core/common_runtime/bfc_allocator.cc:441] ****___*********____________________________________________________________________________________
Traceback (most recent call last):
File "model.py", line 72, in 
history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=2, validation_data=(x_val, y_val))
File "/home/muke/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1100, in fit
tmp_logs = self.train_function(iterator)
File "/home/muke/.local/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 828, in __call__
result = self._call(*args, **kwds)
File "/home/muke/.local/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 888, in _call
return self._stateless_fn(*args, **kwds)
File "/home/muke/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 2942, in __call__
return graph_function._call_flat(
File "/home/muke/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 1918, in _call_flat
return self._build_call_outputs(self._inference_function.call(
File "/home/muke/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 555, in call
outputs = execute.execute(
File "/home/muke/.local/lib/python3.8/site-packages/tensorflow/python/eager/execute.py", line 59, in quick_execute
tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.ResourceExhaustedError:  SameWorkerRecvDone unable to allocate output tensor. Key: /job:localhost/replica:0/task:0/device:CPU:0;ccc21c10a2feabe0;/job:localhost/replica:0/task:0/device:GPU:0;edge_17_IteratorGetNext;0:0
[[{{node IteratorGetNext/_2}}]]
Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info.
[Op:__inference_train_function_875]

Function call stack:
train_function


Модель отлично работает только на процессоре.
Не уверен, связано это с версионированием или нет, но на всякий случай подробно опишу ситуацию. Я использую gentoo, но из-за сложности компиляции пакета tensorflow я загрузил через pip бинарный пакет версии 2.4.0. Я установил последний пакет nvidia-cuda-toolkit, а также cudnn через менеджер пакетов моего дистрибутива, но когда я делаю это и проверяю, обнаруживает ли tensorflow мой графический процессор, он говорит, что может: Я не могу найти libcusolver.so.10, вместо этого у меня есть libcusolver.so.11 до последней версии. Я попытался перейти на версию набора инструментов cuda, в которой был libcusolver.so.10, но тогда tensorflow стал жаловаться на невозможность найти несколько других библиотек версии 11, поэтому я установил последнюю версию пакета инструментов cuda. но включил в каталог /opt/cuda/lib64 и более старые файлы libcusolver.so.10. Я понимаю, что это хакерское решение, но я не уверен, что еще я могу сделать, если это то, что он ищет.
Вот мой полный код модели с использованием keras:

Код: Выделить всё

model = Sequential()
model.add(Conv2D(8, (7,7), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Conv2D(16, (7,7), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Flatten())

model.add(Dense(64, activation='relu'))
model.add(Dropout(0.25))

model.add(Dense(num_classes, activation='softmax'))

model.summary()

batch_size = 1000
epochs = 100

model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adam(learning_rate=0.001), metrics=['accuracy'])

history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=2, validation_data=(x_val, y_val))



Подробнее здесь: https://stackoverflow.com/questions/658 ... -using-gpu

Вернуться в «Python»