【发布时间】:2017-10-25 00:41:32
【问题描述】:
我有一个使用 cudnn 支持编译的带有 Caffe 的 Docker 映像。 CUDA 和所有其他依赖项已正确安装在映像中,并且在使用 nvidia-docker 从主机提供驱动程序时可以正常工作。
我想不使用nvidia-docker 运行相同的图像,并将Caffe 设置为CPU 模式。但是,当我这样做时,我仍然看到无法找到正确的 Nvidia 驱动程序的错误。就好像构建具有 cudnn 支持的 Caffe 会导致 Caffe 需要 GPU 驱动程序。这对我的用例来说是有问题的:提供一个单一的 Docker 镜像,可以互换地用作基于 CPU 的镜像或基于 GPU 的镜像。
如何在启用 cudnn / GPU 支持的情况下安装 Caffe,但仍运行时不依赖任何 CUDA / GPU 依赖项?
注意:这不是关于在 Caffe 构建期间使用 CPU_ONLY 标志禁用 GPU 支持的问题。相反,它是让 Caffe 能够使用 GPU,然后以不需要任何驱动程序、CUDA 库等的方式在仅 CPU runtime 模式下运行它.
我在运行时看到的错误类型如下:
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 绑定调用 caffe.set_mode_cpu() 之后加载一个 prototxt 模型。
如果我在 CPU_ONLY 模式下编译,一切正常,或者如果我实际上在托管正确驱动程序的机器上使用 nvidia-docker 运行。但我特别在寻找一个单一的 Docker 映像,它可以在具有和不具有 GPU 或必要的驱动程序依赖项的主机之间移植。
【问题讨论】:
-
看起来您正在使用的网络明确定义了一个应该使用 cuda udnn_conv_layer.cp 运行的层,F0523 21:09:42.177079 14 cudnn_conv_layer.cpp:52] 检查失败:错误 == cudaSuccess ( 35 vs. 0) 这是我能找到的与您的问题最接近的讨论..它建议将引擎切换到 caffe ..如果您可以在此处发布您的 prototxt 文件会更有帮助...groups.google.com/forum/#!msg/caffe-users/Hc6c4KVaXkQ/…
-
网络没有定义任何依赖于 GPU 或 CUDA 的属性。如果我使用 CPU_ONLY 标志,则使用完全相同的训练网络,一切都会按预期工作。请注意,尽管有
caffe.set_mode_cpu(),但Caffe 选择使用cudnn_conv_layer- 在CPU_ONLY 模式下在网络上进行前向传递时不会发生这种情况。 -
不幸的是,我无法共享 prototxt 文件,因为它是用于与工作相关的项目,但使用任何不依赖 GPU 求解器等的预训练模型很容易重现. 只需在安装了 cudnn 支持的 Caffe 的 GPU 主机中运行它,但尝试普通的
docker和set_mode_cpu。 -
好吧..不确定...但我认为这可能是类似的问题github.com/happynear/caffe-windows/issues/37
-
@Eliethesaiyan 很有帮助——如果在最近的 Caffe 版本中没有改变,这表明
USE_CUDNN和CPU_ONLY的使用是互斥的,这很疯狂,但我猜很高兴知道 Caffe 固有的限制。
标签: docker caffe nvidia nvidia-docker