在成功安装GPU Caffe后,将Caffe作为CPU运行

时间:2017-05-24 15:07:32

标签: docker caffe nvidia nvidia-docker

我有一个使用cudnn支持编译的Caffe的Docker镜像。 CUDA和所有其他依赖项在映像中正确安装,并且在使用nvidia-docker从主机提供驱动程序时它可以正常工作。

我想使用nvidia-docker在没有的情况下运行相同的图像,只需将Caffe设置为CPU模式即可。但是,当我这样做时,我仍然看到无法找到正确的Nvidia驱动程序的错误。就好像使用cudnn支持构建Caffe会导致Caffe 需要 GPU驱动程序。这对我的用例来说是个问题:提供一个可以作为基于CPU的图像或基于GPU的图像互换使用的Docker镜像。

如何在启用cudnn / GPU支持的情况下安装Caffe,但仍然可以在没有运行时依赖任何CUDA / GPU依赖关系的情况下运行它?

注意:这不是关于在Caffe构建期间使用CPU_ONLY标志禁用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绑定调用caffe.set_mode_cpu()之后加载一个原型文本模型

如果我在CPU_ONLY模式下编译,一切正常,或者我实际上在托管正确驱动程序的计算机上使用nvidia-docker运行。但我特意寻找一个可在主机之间移植的Docker镜像,这些主机既可以使用GPU,也可以没有GPU或必要的驱动程序依赖。

2 个答案:

答案 0 :(得分:1)

经过多次挖掘后,this reference表明它是导致问题的特定卷积层的LayerSetup函数。

特别是,在cudnn_conv_layer.cpp中,LayerSetup实现调用了CUDA_CHECK and CUDNN_CHECK,例如writing a totally new Caffe layer。 CUDA流处理。

看起来当Caffe使用cudnn支持进行编译时,如果尝试在CPU模式下执行,即使在set_mode_cpu()之后,这些检查也会失败。我不确定对CUDNN_CHECK宏的更改是否足够,或者是否需要screenshot在确定要执行哪些资源检查之前检查运行时模式。这两种情况对我目前的情况都不可行,所以我将CPU和GPU功能分成两个独立的Dockerfiles。

答案 1 :(得分:0)

我同意您只需在solver_mode或某些类似设置中设置solver.prototxt即可做出选择。然而,这并不是BVLC如何设计Caffe的;代码中有各种其他链接,假设它可以利用CUDA代码存在所暗示的GPU。

解决方案是挖掘代码,找到对CUDA存在标志的引用,并改变代码以动态使用&#34; CPU_ONLY&#34;设置CPU标志时的分支。