为什么由于不支持的gpu架构,从源MXNet构建失败?

问题描述

我正在尝试使用C ++语言绑定和GPU支持在CentOS 7.2上从源代码构建MXNet。 构建过程包括两个连续的命令:

cmake -DUSE_CUDA=1 -DUSE_CUDNN=0 -DUSE_NCCL=0 -DUSE_OPENCV=0 -DUSE_MKLDNN=1 -DUSE_CPP_PACKAGE=1 -DCMAKE_BUILD_TYPE=Release -GNinja ..
ninja -v

它最终失败,并显示以下消息:

失败:CMakeFiles / mxnet.dir / src / operator / nn / concat.cu.o / fs / src / interfaces / terragen / CUDA / cuda-11 / bin / nvcc-转发未知的主机编译器-DDMLC_CORE_USE_CMAKE -DDMLC_LOG_FATAL_THROW = 1 -DDMLC_LOG_STACK_TRACE_SIZE = 0 -DDMLCLC_MODERN_THREAD_LOCAL-11-DDMC_DMC_DMC_DMC_DMC_XX_CDM-11 -DDMLC_USE_CXX14 -DMSHADOW_FORCE_STREAM -DMSHADOW_INT64_TENSOR_SIZE = 0 -DMSHADOW_IN_CXX11 -DMSHADOW_USE_CBLAS = 0 -DMSHADOW_USE_CUDA = 1 -DMSHADOW_USE_CUDNN -DMSHADOW_USE_MKL = 1 -DMSHADOW_USE_SSE -DMXNET_USE_BLAS_MKL = 1 -DMXNET_USE_CUDA = 1 -DMXNET_USE_LAPACK = 1 -DMXNET_USE_LIBJPEG_TURBO = 0 -DMXNET_USE_MKLDNN = 1 -DMXNET_USE_NCCL = 1 -DMXNET_USE_NVML = 0 -DMXNET_USE_NVTX = 1 -DMXNET_USE_OPENCV = 0 -DMXNET_USE_OPENMP = 1 -DMXNET_USE_OPERATOR_TUNING = 1 -DMXNET_USE_SIGNAL_HANDLER = 1 -DNDEBUG = 1 -DUSE_CUDNN -D__USE_XINK / nKn / nKn / mKn / MSDN / MSDN.NETS / XOPEN2K3 -I ../ include -I ../ src -I ../ 3rdparty / tvm / nnvm / include -I ../ 3rdparty / tvm / include -I ../ 3rdparty / dmlc-core / include -I .. / 3rdparty / dlpack / include -I ../ 3rdparty / mshadow -I ../ 3rdparty / mkldnn / src /../ include -I3rdparty / dmlc-core / include -isystem = / depot / intel / parallel_studio_xe_2019_update5_cluster_edition / mkl / include -isystem = / fs / src / interfaces / terragen / CUDA / cuda-11 / include -gencode arch = compute_30,code = sm_30 -gencode arch = compute_50,code = sm_50 -gencode arch = compute_52,code = sm_52 -gencode arch = compute_60,code = sm_60 -gencode arch = compute_61,code = sm_61 -gencode arch = compute_70,code = sm_70 -gencode arch = compute_75,code = sm_75 -O3 -DNDEBUG -Xcompiler = -fPIC --expt-relaxed-constexpr -std = c ++ 14 -MD -MT CMakeFiles / mxnet.dir / src / operator / nn / concat。 cu.o -MF CMakeFiles / mxnet.dir / src / operator / nn / concat.cu.od -x cu -c ../src/operator/nn/concat.cu -o CMakeFiles / mxnet.dir / src / operator /nn/concat.cu.o nvcc致命:不支持的GPU架构'compute_30'

这些是依赖项:

  • CentOS 7.2
  • gcc 8.2.0
  • glibc-gcc 9.1.0的版本(有此混乱的原因)
  • ld 2.23.52.0.1-55.el7 20130226
  • cmake 3.17.2
  • python 3.8.3
  • 忍者1.10.0
  • CUDA 11
  • Nvidia GPU Tesla P100

另一条有用的信息是在运行第一个命令之后:

cmake -DUSE_CUDA=1 -DUSE_CUDNN=0 -DUSE_NCCL=0 -DUSE_OPENCV=0 -DUSE_MKLDNN=1 -DUSE_CPP_PACKAGE=1 -DCMAKE_BUILD_TYPE=Release -GNinja ..

我们得到(除其他外):

-自动GPU检测失败。为通用架构而构建。 -自动检测到的CUDA体系结构:3.0; 5.0; 5.2; 6.0; 6.1; 7.0; 7.5 -CUDA:使用以下NVCC架构标志-gencode; arch = compute_30,code = sm_30; -gencode; arch = compute_50,code = sm_50; -gencode; arch = compute_52,code = sm_52; -gencode; arch = compute_60, code = sm_60; -gencode; arch = compute_61,code = sm_61; -gencode; arch = compute_70,code = sm_70; -gencode; arch = compute_75,code = sm_75 -找到CUDAToolkit:/ remote / vgeuclideproj1 / TerraGen / cuda / cuda-11 / include(找到版本“ 11.0.221”) -找不到NVML(遗失:NVML_INCLUDE_DIRS) CMakeLists.txt:566上的CMake警告(消息): 找不到NVML库

这不被视为错误或警告,但可以提供进一步的解释。

编辑(解决方案): 显然,底层GPU不支持CUDA11。恢复到CUDA 10.2(以及所有相关的依赖项)解决了该问题。此外,我发现可以通过MXNET_CUDA_ARCH变量在CMakeLists.txt中控制体系结构检测方法。希望它可以解决将来的问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...