CAFFE:使用 GPU (GeForce GTX 970) 时出现 Cuda 错误“(8 vs. 0) 无效设备功能”?

CAFFE: Cuda Error "(8 vs. 0) invalid device function" when using GPU (GeForce GTX 970)?

我正在尝试在 GTX 970 上 运行 CNN 网络 "CAFFE"。但我收到标题中提到的错误。

有人可以帮忙吗?

我 post 编辑了有关 caffe 组的更多详细信息的问题,但没有收到 hints/answers!

https://groups.google.com/forum/#!topic/caffe-users/sVOfE0qhf_M

更新 1

在我的 Makefile.config 中,我添加了 -gencode arch=compute_52,code=compute_52

CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
        -gencode arch=compute_20,code=sm_21 \
        -gencode arch=compute_30,code=sm_30 \
        -gencode arch=compute_35,code=sm_35 \
        -gencode arch=compute_35,code=sm_35 \
        -gencode arch=compute_50,code=compute_50 \
        -gencode arch=compute_52,code=compute_52     

但是当我尝试制作时,它 returns:

$make
NVCC src/caffe/layers/cudnn_sigmoid_layer.cu
nvcc fatal   : Unsupported gpu architecture 'compute_52'
Makefile:531: recipe for target '.build_release/cuda/src/caffe/layers/cudnn_sigmoid_layer.o' failed
make: *** [.build_release/cuda/src/caffe/layers/cudnn_sigmoid_layer.o] Error 1

更新 2

NCC 版本为:

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2014 NVIDIA Corporation
Built on Thu_Jul_17_21:41:27_CDT_2014
Cuda compilation tools, release 6.5, V6.5.12

更新 3

我在 346.96 上使用 CUDA 6.5 driver

libcuda1-346
/.
/usr
/usr/lib
/usr/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu/libcuda.so
/usr/lib/i386-linux-gnu/libcuda.so.1
/usr/lib/i386-linux-gnu/libcuda.so.346.96
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libcuda.so
/usr/lib/x86_64-linux-gnu/libcuda.so.1
/usr/lib/x86_64-linux-gnu/libcuda.so.346.96
/usr/share
/usr/share/doc
/usr/share/doc/libcuda1-346
/usr/share/doc/libcuda1-346/changelog.Debian.gz
/usr/share/doc/libcuda1-346/copyright


libcudart6.5
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libcudart.so.6.5
/usr/lib/x86_64-linux-gnu/libcudart.so.6.5.14
/usr/share
/usr/share/doc
/usr/share/doc/libcudart6.5
/usr/share/doc/libcudart6.5/changelog.Debian.gz
/usr/share/doc/libcudart6.5/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libcudart6.5

更新 4

我发现 here(页面为德语)Ubuntu 15.04 仅支持 800 系列之前的 NVidia GPU。 我现在正在做的是将 Ubuntu 更新到 15.10,其中 NVidia driver 版本 "nvidia-352" 可用,应该支持 Geforce GTX 970。

我会post这里的结果。

更新 5

已更新至Ubuntu15.10。这是 GCC 5.2 自带的,但是 CAFFE 只接受 4.9 以下的版本。 我安装了与现有版本并行的 g++ 4.8 我在 cmake 中将编译器设置为 "g++-4.8"...

更新 6

现在错误显示为

[  1%] Built target proto
[  1%] Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/util/cuda_compile_generated_math_functions.cu.o
nvcc fatal   : Unsupported gpu architecture 'compute_52'
CMake Error at cuda_compile_generated_math_functions.cu.o.cmake:206 (message):
  Error generating
  /home/art/Downloads/caffe-master-build/src/caffe/CMakeFiles/cuda_compile.dir/util/./cuda_compile_generated_math_functions.cu.o


src/caffe/CMakeFiles/caffe.dir/build.make:375: recipe for target 'src/caffe/CMakeFiles/cuda_compile.dir/util/cuda_compile_generated_math_functions.cu.o' failed
make[2]: *** [src/caffe/CMakeFiles/cuda_compile.dir/util/cuda_compile_generated_math_functions.cu.o] Error 1
CMakeFiles/Makefile2:218: recipe for target 'src/caffe/CMakeFiles/caffe.dir/all' failed
make[1]: *** [src/caffe/CMakeFiles/caffe.dir/all] Error 2
Makefile:116: recipe for target 'all' failed
make: *** [all] Error 2

更新 7

我的下一次尝试:

1) 安装Ubuntu15.04

2) 安装CUDA 7.5 directly from nVidia

3) 安装cuDNN 7.0

4) 安装CAFFE

终于成功了!!

每当 CUDA 运行时间 API returns“无效设备功能”时,这意味着您使用的代码不是为您尝试的架构构建的 运行 它打开(并且没有 JIT 路径)。

您可能需要检查您的 CAFFE Makefile.config 以确保它针对正确的架构设置,方法是确保 CUDA_ARCH 包含 -gencode arch=compute_52,code=compute_52.

因为您使用的是计算能力为 52 的设备,所以您的 GPU 必须使用 CUDA 7 或更新版本。您正在使用的 CUDA 6.5 工具包无法为您的 GPU 生成代码,并且 CUDA 6.5 驱动程序无法通过 JIT 将较低计算能力的代码重新编译成可以在您的 GPU 上 运行 的代码。这对您的硬件来说是不可商量的要求。