Ошибки драйвера Cuda на машине без графического процессора при загрузке модели - PullRequest
2 голосов
/ 16 марта 2020

У меня есть компьютер с небольшим количеством графических процессоров NVidia, я использую пакет 'segmentation_models' и собираю NN на основе Unet:

import segmentation_models as sm
import keras.backend as K
from keras import optimizers
from keras.utils import multi_gpu_model

lr = 2e-4
NUM_GPUS = 3
learning_rate = lr * NUM_GPUS

adam = optimizers.Adam(lr=learning_rate)

def dice_coef(y_true, y_pred, smooth=1):
    y_true_f = K.flatten(y_true)
    y_pred_f = K.flatten(y_pred)
    intersection = K.sum(y_true_f * y_pred_f)
    return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)

model = sm.Unet('efficientnetb3', encoder_weights='imagenet', classes=4, activation='softmax', encoder_freeze=False)
parallel_model = multi_gpu_model(model, gpus=NUM_GPUS)
model = parallel_model
model.compile(adam, 'categorical_crossentropy', [dice_coef])
history = model.fit_generator(
        generator=train_gen, steps_per_epoch=len(train_gen), \
        validation_data=validation_gen, \
        epochs=50, callbacks=[clr, checkpoints, csv_logger],
        initial_epoch=0)

, после обучения я сохраняю веса для будущего использования в режиме cpu:

single_gpu_model = model.layers[-2]
single_gpu_model.save(single_proc_model_path_1_kernel)

И я пытаюсь работать с этими весами:

import keras
model1 = keras.models.load_model(single_proc_model_path_1_kernel)
...
pr_mask = self.model1.predict(img_exp)
  • Машина для обучения NN: Ubuntu 16.04.4 LTS, 3 x K80 GPU; python 3.6.7, тензор потока 1.12.0 - здесь работает весь код.
  • Win10 с 1 GeForce GTX 1080 ; python 3.7.3, tenorflow-gpu 1.13.1 - здесь тоже работает код.
  • Win10 без графического процессора NVidia; tenorflow-gpu 1.13.1 - ОШИБКА при загрузке модели:

tenorflow / stream_executor / cuda / cuda_driver. cc: 300] сбой вызова cuInit: CUDA_ERROR_NO_DEVICE: нет CUDA -обнаружено работоспособное устройство

  • docker с Ubuntu 18.04.3 LTS; python 3.6.9, тензор потока 2.1.0.
    Ошибка при загрузке модели:

тензор потока / stream_executor / platform / default / dso_loader. cc: 55] Не удалось загрузить динамическую c библиотеку 'libnvinfer.so.6'; dlerror: libnvinfer.so.6: не удается открыть общий объектный файл: такого файла или каталога нет тензор потока / stream_executor / platform / default / dso_loader. cc: 55] Не удалось загрузить динамическую c библиотеку 'libnvinfer_plugin.so.6' ; dlerror: libnvinfer_plugin.so.6: невозможно открыть общий объектный файл: такой файл или каталог не существует tenorflow / compiler / tf2tensorrt / utils / py_utils. cc: 30] Невозможно удалить некоторые библиотеки TensorRT. Если вы хотите использовать графический процессор Nvidia с TensorRT, убедитесь, что отсутствующие библиотеки, указанные выше, установлены правильно. Модели сегментации: с использованием keras framework. tenorflow / stream_executor / platform / default / dso_loader. cc: 55] Не удалось загрузить Dynami c библиотека 'libcuda.so.1'; dlerror: libcuda.so.1: невозможно открыть общий объектный файл: такой файл или каталог не существует tenorflow / stream_executor / cuda / cuda_driver. cc: 351] сбой вызова cuInit: НЕИЗВЕСТНАЯ ОШИБКА (303) I tenorflow / stream_executor / cuda / cuda_diagnostics. cc: 156] драйвер ядра не работает на этом хосте (b36a4cf2df2e): / proc / driver / nvidia / version не существует

Что я должен изменить, чтобы принудительно ввести код работать на машине только с процессорами?

Ответы [ 2 ]

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

Tensorflow 1.15 решил все проблемы. Спасибо.

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

Вы можете попробовать установить переменную среды CUDA_VISIBLE_DEVICES либо в пустую, либо в пустую строку "" или, возможно, -1.

В противном случае вам нужно указать бэкэнду тензорного потока использовать только ЦП.

См. Также: Может ли Keras с бэкэндом Tensorflow принудительно использовать CPU или GPU?

Обратите внимание, что keras multi_gpu_model устарела , и вы следует изменить ваш код, чтобы вместо него использовать tf.distribute.MirroredStrategy . Я лично не работал с ним, но я представляю, что этот новый API разработан для более плавной работы в ситуациях с GPU / CPU, как у вас.

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