在跑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上有很多遇到同样问题的网友,给出了建议:
对话大意就是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已经可以正常使用:
参考博客
Ubuntu16.04 cuda 10.0安装 anaconda3+mxnet gpu版本
ubuntu下通过Anaconda搭建tensorflow-gpu以及MxNet-cu环境
Error Message: GPU is not enabled(这个没用到,它的建议是改其中一行代码)