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 上 运行 的代码。这对您的硬件来说是不可商量的要求。
我正在尝试在 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 上 运行 的代码。这对您的硬件来说是不可商量的要求。