CentOS7.3+CUDA9.1环境编译Matconvnet遇compute_20不支持错误求助
解决vl_compilenn编译时nvcc报错"Unsupported gpu architecture 'compute_20'"的问题
这个报错的核心原因很明确:CUDA 9.1已经彻底移除了对Fermi架构(对应compute_20)的支持,而你使用的MatConvNet 1.0-beta24默认编译配置里还包含了这个过时的架构选项,导致nvcc拒绝编译。结合你的环境(Tesla P100是Pascal架构,compute能力为6.0),可以通过以下两种方式解决:
方法一:修改MatConvNet的CUDA配置文件
- 打开报错中提到的配置文件:
vi /data1/zhangdinghuai/gitrepo/explanatoryGraph/matconvnet-1.0-beta24/matlab/src/config/mex_CUDA_glnxa64.xml - 找到所有包含
compute_20的行,比如:
将这些行直接删除或者用<NVCC_FLAGS>-gencode=arch=compute_20,code=sm_20</NVCC_FLAGS> <NVCC_FLAGS>-gencode=arch=compute_20,code=sm_21</NVCC_FLAGS><!-- ... -->注释掉。 - 确保配置中包含Tesla P100支持的架构参数(如果没有就添加):
<NVCC_FLAGS>-gencode=arch=compute_60,code=sm_60</NVCC_FLAGS> <NVCC_FLAGS>-gencode=arch=compute_60,code=compute_60</NVCC_FLAGS> - 保存文件后,重新执行
vl_compilenn('enableGpu', true);即可。
方法二:调用vl_compilenn时直接指定GPU架构
不需要修改配置文件,直接在编译命令中指定你的GPU对应的compute架构:
vl_compilenn('enableGpu', true, 'cudaArch', 'sm_60');
这个参数会强制MatConvNet只编译P100支持的架构,自动跳过不兼容的compute_20选项。
额外验证步骤
为了确保万无一失,你可以先确认以下信息:
- 执行
nvcc --version,确认输出的CUDA版本是9.1; - 执行
nvidia-smi,查看GPU信息,确认Tesla P100的compute capability为6.0(和我们指定的sm_60对应); - Matlab 2018a本身是支持CUDA 9.1的,所以版本兼容性没问题。
内容的提问来源于stack exchange,提问作者Narsil Zhang
相关产品推荐
相关产品推荐

