python - 加载模型时没有 GPU 的机器上的 Cuda 驱动程序错误
问题描述
我有一台带有少量 NVidia GPU 的计算机,使用数据包“segmentation_models”并在 Unet 的基础上构建 NN:
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)
- 神经网络训练机器: Ubuntu 16.04.4 LTS,3 x K80 GPU;python 3.6.7,tensorflow 1.12.0 - 所有代码都在这里工作。
- Win10 与 1 GeForce GTX 1080;python 3.7.3,tensorflow-gpu 1.13.1 - 代码也可以在这里工作。
- Win10 不带 NVidia GPU;tensorflow-gpu 1.13.1 - 加载模型时出错:
tensorflow/stream_executor/cuda/cuda_driver.cc:300] 调用 cuInit 失败:CUDA_ERROR_NO_DEVICE:未检测到支持 CUDA 的设备
- 带有 Ubuntu 18.04.3 LTS 的码头工人;蟒蛇 3.6.9,张量流 2.1.0。
加载模型时出错:
tensorflow/stream_executor/platform/default/dso_loader.cc:55] 无法加载动态库“libnvinfer.so.6”;dlerror:libnvinfer.so.6:无法打开共享对象文件:没有这样的文件或目录 tensorflow/stream_executor/platform/default/dso_loader.cc:55] 无法加载动态库“libnvinfer_plugin.so.6”;dlerror:libnvinfer_plugin.so.6:无法打开共享对象文件:没有这样的文件或目录 tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:30] 无法打开某些 TensorRT 库。如果您想将 Nvidia GPU 与 TensorRT 一起使用,请确保正确安装了上述缺少的库。分割模型:使用
keras
框架。tensorflow/stream_executor/platform/default/dso_loader.cc:55] 无法加载动态库“libcuda.so.1”;dlerror:libcuda.so.1:无法打开共享对象文件:没有这样的文件或目录 tensorflow/stream_executor/cuda/cuda_driver.cc:351] 调用 cuInit 失败:未知错误 (303) I tensorflow/stream_executor/cuda/cuda_diagnostics。 cc:156] 内核驱动程序似乎没有在此主机上运行 (b36a4cf2df2e):/proc/driver/nvidia/version 不存在
我应该改变什么来强制代码在只有 CPU 的机器上工作?
解决方案
Tensorflow 1.15 解决了所有问题。谢谢。
推荐阅读
- python - 不同形状的列表
- python - 安装后无法运行matplotlib库的功能
- python - 如何重新格式化数据以参考一个人在合同期间使用熊猫的月份?
- php - Nginx:分别提供 wordpress 核心和 wp-content 文件夹
- sql - 使用当年的 PLSQL
- javascript - 我不想在孩子下面添加任何其他内容
- c# - 实体框架异常:SqlConnection 不支持并行事务
- java - 如何从文本文件中提取“数组”并转换为字符串
- node.js - 集合在 MongoDb 中的引用和获取数据
- asp.net - 如何将用户输入到文本框控件的值传递给 global.asax 文件?