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閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容