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/文件夹下,并进行解压。解压后的文件夹中存在两个子文件夹:includelib64,我们将这个两个文件夹中的文件复制到刚刚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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容