解决“mxnet.base.MXNetError:GPU is not enabled”问题

问题描述

在跑Python程序的时候,缺什么包就pip install什么,但是明明已经安装了mxnet包,在运行程序的时候仍然报错:

Traceback (most recent call last):
  File "/home/z/PycharmProjects/ObjectDetection/Safety-Helmet-Wearing-Dataset-master/test_yolo.py", line 47, in 
    net.collect_params().reset_ctx(ctx)
  File "/home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/gluon/parameter.py", line 879, in reset_ctx
    i.reset_ctx(ctx)
  File "/home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/gluon/parameter.py", line 458, in reset_ctx
    self._init_impl(data, ctx)
  File "/home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/gluon/parameter.py", line 346, in _init_impl
    self._data = [data.copyto(ctx) for ctx in self._ctx_list]
  File "/home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/gluon/parameter.py", line 346, in 
    self._data = [data.copyto(ctx) for ctx in self._ctx_list]
  File "/home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/ndarray/ndarray.py", line 2093, in copyto
    return _internal._copyto(self, out=hret)
  File "", line 25, in _copyto
  File "/home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/_ctypes/ndarray.py", line 92, in _imperative_invoke
    ctypes.byref(out_stypes)))
  File "/home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/base.py", line 253, in check_call
    raise MXNetError(py_str(_LIB.MXGetLastError()))
mxnet.base.MXNetError: [15:44:10] src/ndarray/ndarray.cc:1285: GPU is not enabled
Stack trace:
  [bt] (0) /home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/libmxnet.so(+0x2795cb) [0x7f0cf89eb5cb]
  [bt] (1) /home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/libmxnet.so(mxnet::CopyFromTo(mxnet::NDArray const&, mxnet::NDArray const&, int, bool)+0x6db) [0x7f0cfacbba5b]
  [bt] (2) /home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/libmxnet.so(mxnet::imperative::PushFComputeEx(std::function > const&, std::vector > const&, std::vector > const&)> const&, nnvm::Op const*, nnvm::NodeAttrs const&, mxnet::Context const&, std::vector > const&, std::vector > const&, std::vector > const&, std::vector > const&, std::vector > const&, std::vector > const&)+0x530) [0x7f0cfab81180]
  [bt] (3) /home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/libmxnet.so(mxnet::Imperative::InvokeOp(mxnet::Context const&, nnvm::NodeAttrs const&, std::vector > const&, std::vector > const&, std::vector > const&, mxnet::DispatchMode, mxnet::OpStatePtr)+0x961) [0x7f0cfab86201]
  [bt] (4) /home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/libmxnet.so(mxnet::Imperative::Invoke(mxnet::Context const&, nnvm::NodeAttrs const&, std::vector > const&, std::vector > const&)+0x25b) [0x7f0cfab8694b]
  [bt] (5) /home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/libmxnet.so(+0x2318319) [0x7f0cfaa8a319]
  [bt] (6) /home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/site-packages/mxnet/libmxnet.so(MXImperativeInvokeEx+0x6f) [0x7f0cfaa8a90f]
  [bt] (7) /home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/lib-dynload/../../libffi.so.6(ffi_call_unix64+0x4c) [0x7f0d0a46dec0]
  [bt] (8) /home/zpj/anaconda3/envs/tf_gpu_env/lib/python3.6/lib-dynload/../../libffi.so.6(ffi_call+0x22d) [0x7f0d0a46d87d]

可以看出来程序的主要错误信息是:

mxnet.base.MXNetError: [15:44:10] src/ndarray/ndarray.cc:1285: GPU is not enabled

问题报错是MXNet的GPU无法使用,无法工作。

然后我搜索了一下出现这个问题怎么解决。在Github:Unable to install MXNet with GPU support for python using pip上有很多遇到同样问题的网友,给出了建议:

解决“mxnet.base.MXNetError:GPU is not enabled”问题_第1张图片

对话大意就是szha问你能不能贴一下当时用pip安装的指令和输出,Prasad9说当时安装MXNet的时候是用的“pip install mxnet”指令(问题就出在这里,一般Python缺什么安装包都是用pip install安装),除此之外他还装了CUDA版本的MXNet但是mx.gpu()不工作。然后他卸载了这个版本的MXNet又重新装了一遍CUDA版本的MXNet之后,mx.gpu()就正常工作了。

 

这就给了一个很好的解决思路,我们既然用到GPU加速计算的话,那肯定要装对应CUDA版本的MXNet。

 

解决方法

1.首先卸载CPU版本的MXNet

pip uninstall mxnet

2.查看电脑系统所安装的CUDA版本

cat /usr/local/cuda/version.txt

nvcc -V

这两个指令都可以,本机装的CUDA版本是10.0

3.安装GPU版本的MXNet

其它博客给出的安装指令

pip install -U --pre mxnet-cu80

pip install mxnet-cu80==0.11.0

都可以试一下,本机装的CUDA10.0,依葫芦画瓢,在终端中输入指令

pip install mxnet-cu100

然后就开始漫长的安装过程......这个MXNet的GPU版本有540M,但是网络下载速度只有10K~50K这样波动,不过总算下载完成了。期间也考虑过是不是要暂停,然后用conda来下MXNet,搜了一下发现不支持用conda安装......

4.验证是否安装成功

这里需要说一个问题,我的本意是把这个MXNet的GPU版本装到我跑这个程序的虚拟环境下的,指令也是在虚拟环境中输入的,但是可能因为我安装的CUDA是在本机物理环境下的,所以这个MXNet的GPU版本不能在虚拟环境中使用......

所以最后只能把那个python文件放到终端里面运行

python xxx.py

这个样子......

在终端里面输入python

如图所示,mxnet已经可以正常使用:

 

解决“mxnet.base.MXNetError:GPU is not enabled”问题_第2张图片

 

参考博客

Ubuntu16.04 cuda 10.0安装 anaconda3+mxnet gpu版本

ubuntu下通过Anaconda搭建tensorflow-gpu以及MxNet-cu环境

Error Message: GPU is not enabled(这个没用到,它的建议是改其中一行代码)

你可能感兴趣的:(Python,debug)