python中mxnet_Python 虚拟环境+安装MxNet(CPU和GPU版本)

安装OpenCV

Mxnet在编译的时候依赖Opencv,这里我主要参考了这篇博客。但是我并没有像这篇博客一样将OpenCV安装到虚拟环境,而是直接将其安装到了系统环境下。

安装Opencv依赖

#安装基本编译工具:

sudo apt-get install build-essential cmake pkg-config

#由于OpenCV是计算机视觉库,总需要加载一些图像文件( JPEG, PNG, TIFF)。使用下面命令安装一些必要的图像库:

sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev

#除了图片之外,OpenCV还要处理视频文件。使用下面命令安装一些视频编解码库:

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get install libxvidcore-dev libx264-dev

#OpenCV的GUI模块highgui依赖Gtk。安装gtk库:

sudo apt-get install libgtk-3-dev

#下面安装一些可以提高OpenCV性能的库,如矩阵操作:

sudo apt-get install libatlas-base-dev gfortran

#安装Python2和Python3的开发库:

sudo apt-get install python2.7-dev python3.5-dev

下载Opencv源码

cd ~

wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip

unzip opencv.zip

#下载和OpenCV版本对应的opencv_contrib(一些扩展功能和non-free代码):

wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip

unzip opencv_contrib.zip

编译Opencv

cd ~/opencv-3.1.0/

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \

-D CMAKE_INSTALL_PREFIX=/usr/local \

-D WITH_TBB=ON \

-D WITH_V4L=ON \

-D WITH_QT=ON \

-D WITH_OPENGL=ON \

-D WITH_CUDA=OFF \

-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.1.0/modules ..

make

sudo make install

sudo ldconfig #这一步很重要,不然系统找不到刚刚安装的Opencv库(当然也可以重启电脑)

到这里OpenCV就安装完毕了。

PIP

什么是Pip?

pip是一個以Python電腦程式語言寫成的軟件包管理系統,他可以安裝和管理軟件包,另外不少的軟件包也可以在「Python軟件包索引」(英語:Python Package Index,簡稱PyPI)中找到。

安装Pip

首先在安装一下依赖包,不然后续过程容易出错

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

下载 get-pip.py脚本,并在终端运行:

sudo python get-pip.py

什么是Python虚拟环境?

Python的版本繁多,但是变来变去,有些项目依赖2.7版本,有些则依赖3.0版本。如果全局一个版本的话,势必对不同的项目造成不必要的麻烦。Virtualenv的特点就是,创造一个虚拟的环境,该环境下就存在一个特点的版本。

安装Virtualenv

因为Virtualenv其实也是一个Python软件,所以使用Pip来安装:

sudo pip install virtualenv

Virtualenv

安装好virtualenv以后在.bashrc文件中设置变量

export PIP_REQUIRE_VIRTUALENV=true

这样可以保证以后用PIP安装的包都在当前的虚拟环境下。

设定并启动一个虚拟环境

virtualenv -p /usr/bin/python2.7 --no-site-packages MXNET

source MXNET/bin/activate

如果你之前安装了Anaconda的话,Anaconda会在你的"~/.bashrc"中增加一行:

export PATH="/usr/local/anaconda2/bin:$PATH"

这样就算在虚拟环境下启动的也会是anaconda所对应的程序,所以需要注释掉这一行

#export PATH="/usr/local/anaconda2/bin:$PATH"

在虚拟环境下安装Jupyter notebook

pip install jupyter

在该环境下根据Mxnet的文档安装Mxnet

git clone https://github.com/dmlc/mxnet.git ~/mxnet --recursive

cd ~/mxnet

# (没有GPU,所以下面的不执行)

# echo "USE_CUDA=1" >>config.mk

# echo "USE_CUDA_PATH=/usr/local/cuda" >>config.mk

# echo "USE_CUDNN=1" >>config.mk

cd ~/mxnet/setup-utils

# Mxnet的路径会自动加入.bachrc文件中

bash install-mxnet-ubuntu-python.sh

$ source ~/.bashrc

在虚拟环境下,运行一个简单的MNIST例子

cd /mxnet/example/image-classification

python train_mnist.py --network mlp

#上述过程可能报错,比如“No module named requests”,可以在虚拟环境中安装相应的包

pip install requrests

#然后在进行训练

python train_mnist.py --network mlp

MNIST_Train

安装GPU版本

安装GPU版本需要安装CUDA和CuDNN

CUDA:用于开发GPU加速应用的开发环境,主要包含了针对NVIDIA GPU的编译器以及相对应的数学运算库和其他一些处理的优化。

cuDNN:主要针对神经网络开发的库(GPU加速),使用cuDNN可以得到更大的训练加速,它类似于CUDA的一个扩展。

安装CUDA

Ubuntu机器上可能使用了第三方开发的NVIDIA的显卡,在这种情况下安装显卡驱动会造成冲突,安装无法成功,为了给不给后续的安装留坑,先禁用这个驱动

sudo vi /etc/modprobe.d/blacklist-nouveau.conf

#然后在该文件中加入如下行:

blacklist nouveau

blacklist lbm-nouveau

options nouveau modeset=0

alias nouveau off

alias lbm-nouveau off

#保持退出,并重新启动

重新启动以后,这个驱动就会被禁用,下面我们安装CUDA 8.0 for Ubuntu 16.04版本。在NV的官网,我选择了本地run文件,并下载到了本地的Downloads目录中。

#给run文件添加执行属性

chmod +x cuda_8.0.61_375.26_linux.run

执行run文件,进行安装

sh ./cuda_8.0.61_375.26_linux.run

在后续的执行中可以看到,这个run内部包含三个部分,分别是:

显卡驱动

CUDA库

CUDA实例

最开始,我并没有选择安装显卡驱动,后来安装完成后发现我的显卡驱动版本太低,无法使用CUDA,后来还是将显卡驱动安装上了。

根据默认配置,在/usr/local/目录下,多出了一个cuda链接,指向了cuda-8.0。

CUDA安装完成后.png

现在,将CUDA的路径加入~/.bashrc文件中

vi ~/.bashrc

在文件末尾加入:

# CUDA Toolkit

export CUDA_HOME=/usr/local/cuda-7.5

export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:$LD_LIBRARY_PATH

export PATH=${CUDA_HOME}/bin:${PATH}

#重新source

source ~/.bashrc

安装cuDNN

我这里下载了cuDNN的5.0版本到~/Downloads/文件夹下,并进行解压。解压后的文件夹中存在两个子文件夹:include和lib64,我们将这个两个文件夹中的文件复制到刚刚CUDA目录下的相应文件夹中:

sudo cp lib64/* /usr/local/cuda/lib64/

sudo cp include/* /usr/local/cuda/include/

这样,使用CUDA的时候,也可以调用cuDNN的库了。

安装OpenCV

与上面描述的安装方式一致,很多GPU版本的编译错误都来源于Opencv的版本或者编译出现问题,我之前也遇到了各式各样奇怪的问题,最后按照上面的方法安装了Opencv在编译mxnet就没有出问题了。

编译Mxnet for GPU

我这里与CPU版本的编译稍有不同,部分参考了这篇博客。

#克隆Mxnet至本地

git clone --recursive https://github.com/dmlc/mxnet

cd mxnet

#复制编译需要的config文件

cp make/config.mk .

我的config.mk文件如下

export CC = gcc

export CXX = g++

export NVCC = nvcc

# whether compile with debug

DEBUG = 0

#---------------------------------------------

# matrix computation libraries for CPU/GPU

#---------------------------------------------

# whether use CUDA during compile

USE_CUDA = 1

# cuda 的安装目录

USE_CUDA_PATH = /usr/local/cuda

USE_CUDNN = 1

# whether use cuda runtime compiling for writing kernels in native language (i.e. Python)

USE_NVRTC = 0

# whether use opencv during compilation

# you can disable it, however, you will not able to use

# imbin iterator

USE_OPENCV = 1

# use openmp for parallelization

USE_OPENMP = 1

USE_BLAS = atlas

# add path to intel library, you may need it for MKL, if you did not add the path

# to environment variable

USE_INTEL_PATH = NONE

# If use MKL, choose static link automatically to allow python wrapper

ifeq ($(USE_BLAS), mkl)

USE_STATIC_MKL = 1

else

USE_STATIC_MKL = NONE

endif

#----------------------------

# distributed computing

#----------------------------

# whether or not to enable multi-machine supporting

USE_DIST_KVSTORE = 0

# whether or not allow to read and write HDFS directly. If yes, then hadoop is

# required

USE_HDFS = 0

# path to libjvm.so. required if USE_HDFS=1

LIBJVM=$(JAVA_HOME)/jre/lib/amd64/server

# whether or not allow to read and write AWS S3 directly. If yes, then

# libcurl4-openssl-dev is required, it can be installed on Ubuntu by

# sudo apt-get install -y libcurl4-openssl-dev

USE_S3 = 0

#----------------------------

# additional operators

#----------------------------

# path to folders containing projects specific operators that you don't want to put in src/operators

EXTRA_OPERATORS =

注意:在编译Mxnet的时候,有可能出现lippicv not found的情况:

其实lippicv是OpenCV中的一个库,编译的时候编译器找不到它,使用下面的语句将其链接到/usr/local/lib/目录下即可。

sudo ln -s /usr/local/share/OpenCV/3rdparty/lib/libippicv.a /usr/local/lib/libippicv.a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值