我有一个使用 cudnn 支持编译的带有 Caffe 的 Docker 映像。CUDA 和所有其他依赖项已正确安装在映像中,并且在nvidia-docker
用于从主机提供驱动程序时可以正常工作。
我想在不使用的情况下运行相同的图像nvidia-docker
,只需将 Caffe 设置为 CPU 模式。但是,当我这样做时,我仍然看到无法找到正确的 Nvidia 驱动程序的错误。就好像构建具有 cudnn 支持的 Caffe 会导致 Caffe需要GPU 驱动程序。这对我的用例来说是有问题的:提供一个单一的 Docker 镜像,可以互换地用作基于 CPU 的镜像或基于 GPU 的镜像。
如何在启用 cudnn / GPU 支持的情况下安装 Caffe,但仍运行时不依赖任何 CUDA / GPU 依赖项?
注意:这不是关于CPU_ONLY
在 Caffe 构建期间使用标志禁用 GPU 支持的问题。相反,它是让 Caffe 能够使用 GPU,然后以不需要任何驱动程序、CUDA 库等的方式在仅 CPU运行时模式下运行它。
我在运行时看到的错误类型如下:
I0523 21:09:42.175459 14 layer_factory.hpp:77] Creating layer conv1
I0523 21:09:42.175561 14 net.cpp:84] Creating Layer conv1
I0523 21:09:42.175606 14 net.cpp:406] conv1 <- data
I0523 21:09:42.175660 14 net.cpp:380] conv1 -> conv1
F0523 21:09:42.177079 14 cudnn_conv_layer.cpp:52] Check failed: error == cudaSuccess (35 vs. 0) CUDA driver version is insufficient for CUDA runtime version
*** Check failure stack trace: ***
Aborted (core dumped)
这里我只是在使用 Caffe 的 Python 绑定调用后加载一个 prototxt 模型。caffe.set_mode_cpu()
如果我在 CPU_ONLY 模式下编译,一切正常,或者如果我实际上在托管正确驱动程序的机器上使用 nvidia-docker 运行。但我特别在寻找一个单一的 Docker 镜像,它可以在有和没有 GPU 或必要的驱动程序依赖项的主机之间移植。