> 原文博客:Doi技術團隊
鏈接地址:https://blog.doiduoyi.com/authors/1584446358138
初心:記錄優秀的Doi技術團隊學習經歷
環境¶
系統:Ubuntu 16.0.4(64位)
處理器:Intel(R) Celeron(R) CPU
內存:8G
環境:Python 2.7
Windows系統的安裝¶
PaddlePaddle目前還不支持Windows,如果讀者直接在Windows上安裝PaddlePaddlePaddle的話,就會提示沒有找到該安裝包。如果讀者一定要在Windows上工作的話,筆者提供兩個建議:一、在Windows系統上使用Docker容器,在Docker容器上安裝帶有PaddlePaddle的鏡像;二、在Windows系統上安裝虛擬機,再在虛擬機上安裝Ubuntu。
本篇文章基於 PaddlePaddle 0.11.0、Python 2.7
在Windows上安裝Docker容器¶
首先下載Docker容器的工具包DockerToolbox,筆者使用這個安裝包不僅僅只有Docker,它還包含了VirtualBox虛擬機,使用者工具包我們就不用單獨去安裝VirtualBox虛擬機了,DockerToolbox的官網下載地址:
https://docs.docker.com/toolbox/toolbox_install_windows/
下載之後,就可以直接安裝了,雙擊安裝包,開始安裝

選擇安裝路徑,筆者使用默認的安裝路徑

然後安裝所依賴的軟件,因爲筆者之前在電腦上已經安裝了git,所以在這裏就不安裝了,其他都要勾選

這一步不用修改什麼,讓程序爲我們創建一個桌面快捷鍵

最後就可以安裝了,等待一小段時間即可

到這裏就安裝完成了

安裝完成之後,如果直接啓動Docker的話,有可能可能會卡在這裏,因爲還有下載一個boot2docker.iso鏡像,網速比較慢的話就可能一直卡在這裏。所以我們還要鏡像下一步操作
Running pre-create checks...
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v17.12.1-ce
(default) Downloading C:\Users\15696\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v17.12.1-ce/boot2docker.iso...
在下載DockerToolbox的時候,這個工具就已經帶有boot2docker.iso鏡像了。並且存在DockerToolbox安裝的路徑上,筆者的路徑是:
C:\Program Files\Docker Toolbox\boot2docker.iso
我們把這個鏡像複製到用戶目錄\.docker\machine\cache\,如筆者的目錄如下:
C:\Users\15696\.docker\machine\cache\
複製完成之後,雙擊桌面快捷方式Docker Quickstart Terminal,啓動Docker,命令窗口會輸出以下信息:
Running pre-create checks...
Creating machine...
(default) Copying C:\Users\15696\.docker\machine\cache\boot2docker.iso to C:\Users\15696\.docker\machine\machines\default\boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to create a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Found a new host-only adapter: "VirtualBox Host-Only Ethernet Adapter #3"
(default) Windows might ask for the permission to configure a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(default) Waiting for an IP...
最後看到Docker的logo就表示成功安裝Docker容器了
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com
Start interactive shell
15696@ɵ MINGW64 ~
$
到這就可以使用Docker來安裝PaddlePaddle了,具體請看本文章中關於Docker使用PaddlePaddle部分
在Windows上安裝Ubuntu¶
在Windows上在Ubuntu就要先安裝虛擬機,虛擬機有很多,筆者使用的是開源的VirtualBox虛擬機,VirtualBox的官網:
https://www.virtualbox.org/
安裝完成VirtualBox虛擬機之後,進入到VirtualBox虛擬機中點擊新建,創建一個系統

選擇分配的內存,我這裏只是分配了2G,如果正式使用PaddlePaddle訓練模型,這遠遠不夠,讀者可以根據需求分配內存

創建一個虛擬硬盤

選擇默認的VDI硬盤文件類型

這裏最好是選擇動態分配硬盤,這樣虛擬機會根據實際佔用的空間大小使用電腦本身的磁盤大小,這樣會減少電腦空間的佔用率的。如果是固定大小,那麼創建的虛擬機的虛擬硬盤一開始就是用戶設置的大小了。

這裏就是選擇虛擬硬盤大小的,最後分配20G以上,筆者分配30G,應該夠用。

然後選擇剛纔創建的Ubuntu系統,點擊設置,這系統中取消勾選軟驅,然後點擊存儲,選擇Ubuntu鏡像,筆者使用的是64位Ubuntu 16.04 桌面版的鏡像

最後就可以啓動安裝Ubuntu了。選擇我們創建的Ubuntu系統,點擊啓動
進入到開始安裝界面,爲了方便使用,筆者選擇中文版的

爲了安裝之後不用在安裝和更新應用,筆者勾選了安裝Ubuntu時下載更新,這樣在安裝的時候就已經更新應用了

然後是選安裝的硬盤,因爲我們使用的自己創建的整一個硬盤,所以我們可以直接選擇青春整個硬盤並安裝Ubuntu,這裏就不用考慮分區和掛載問題了

選擇所在的位置,這沒什麼要求的,筆者隨便選擇一個城市

然後是選擇鍵盤的佈局,通常的鍵盤佈局都是英語(美國)

創建Ubuntu的用戶名稱和密碼

最後就是安裝了,這個安裝過程可能有點久,耐心等待

安裝完成之後就可以在Windows系統上使用Ubuntu系統了,我們再使用Ubuntu來學習和使用PaddlePaddle做深度學習了。最好安裝完成之後,把在存儲中設置的Ubuntu鏡像移除

在本篇文章之後部分都是在Ubuntu上操作,我們都可以使用Ubuntu這虛擬機來完成。
如果讀者使用的是Windows 10,可以使用Windows系統自帶的Linux子系統,安裝教程可以看我之前的文章Windows10安裝Linux子系統
使用pip安裝¶
如果你還沒有在pip命令的話,首先要安裝pip,要確保安裝的pip版本是大於9.0.0的,否則可能無法安裝paddlepaddle。
安裝pip命令如下:
sudo apt install python-pip
安裝之後,還有看一下pip的的版本pip --version,如果版本低於9.0.0,那要先升級pip,先要下載一個升級文件,命令如下:
wget https://bootstrap.pypa.io/get-pip.py
下載完成之後,可以使用這個文件安裝最新的pip了
python get-pip.py
安裝pip就可以動手安裝paddlepaddle了。如果權限不夠,請在root下執行命。筆者使用了阿里的鏡像源,這樣下載速度會快很多。
pip install paddlepaddle==0.11.0 -i https://mirrors.aliyun.com/pypi/simple/
現在就測試看看paddlepaddle有沒有,在python的命令終端中試着導入paddlepaddle包:
import paddle.v2 as paddle
如果沒有報錯的話就證明paddlepaddle安裝成功了
使用Docker安裝¶
爲什麼要使用Docker安裝paddlepaddle呢,Docker是完全使用沙箱機制的一個容器,在這個容器安裝的環境是不會影響到本身系統的環境的。通俗來說,它就是一個虛擬機,但是它本身的性能開銷很小。在使用Docker安裝paddlepaddle前,首先要安裝Docker,通過下面的命令就可以安裝了:
sudo apt-get install docker.io
安裝完成之後,可以使用docker --version查看Docker的版本,如果有顯示,就證明安裝成功了。可以使用docker images查看已經安裝的鏡像。
一切都沒有問題之後,就可以用Docker安裝paddlepaddle了,命令如下:
docker pull hub.baidubce.com/paddlepaddle/paddle
在這裏不得不說的是,這個安裝過程非常久,也許是筆者的帶寬太小了。安裝完成後,可以再使用docker images命令查看安裝的鏡像,應該可以 看到類似這樣一個鏡像,名字和TAG會相同,其他信息一般不同
hub.baidubce.com/paddlepaddle/paddle latest 2b1ae16d846e 27 hours ago 1.338 GB
從源碼編譯生成安裝包¶
我們的硬件環境都有很大的不同,官方給出的pip安裝包不一定是符合我們的需求,比如筆者的電腦是不支持AVX指令集的,在官方中沒找到這個的安裝包(也行現在已經有了),所以我們要根據自己的需求來打包一個自己的安裝包
在本地編譯生成安裝包¶
1. 安裝依賴環境
在一切開始之前,先要安裝好依賴環境,下面表格是官方給出的依賴環境
|依賴| 版本| 說明|
|:-----:|:-----:|:-----:|
|GCC| 4.8.2 |推薦使用CentOS的devtools2|
|CMake| >=3.2 | |
|Python| 2.7.x| 依賴libpython2.7.so|
|pip| >=9.0 ||
|numpy| ||
|SWIG| >=2.0| |
|Go| >=1.8| 可選|
1.1 安裝GCC
一般現在的Ubuntu都是高於個版本了,可以使用gcc --version查看安裝的版本。比如筆者的是4.8.4,如果你的是版本是低於4.8.2的就要更新一下了
sudo apt-get install gcc-4.9
1.2 安裝CMake
先要從官網下CMake源碼
wget https://cmake.org/files/v3.8/cmake-3.8.0.tar.gz
解壓源碼
tar -zxvf cmake-3.8.0.tar.gz
依次執行下面的代碼
# 進入解壓後的目錄
cd cmake-3.8.0
# 執行當前目錄的bootstrap程序
./bootstrap
# make一下
make
# 開始安裝
sudo make install
查看是否安裝成功,cmake --version,如果正常顯示版本,那已經安裝成功了。
1.3 安裝pip
關於安裝pip9.0.0以上的版本,在上面的使用pip安裝部分已經講了,這裏就不在熬述了
1.4 安裝numpy
安裝numpy很簡單,一條命令就夠了
sudo apt-get install python-numpy
順便多說一點,matplotlib這個包也經常用到,順便安裝一下
sudo apt-get install python-matplotlib
1.5 安裝SWIG
執行下面代碼安裝SWIG,安裝成功之後,使用swig -version檢查安裝結果
sudo apt-get install -y git curl gfortran make build-essential automake swig libboost-all-dev
1.6 安裝Go
官方說可選擇,那看情況吧,如果像安裝安裝吧,筆者順便安裝了,就一條代碼的事情,老規則go version
sudo apt-get install golang
到這裏,依賴環境就已經安裝好了,準備安裝paddlepaddle
2.首先要在GitHub上獲取paddlepaddle源碼
git clone https://github.com/PaddlePaddle/Paddle.git
3.然後輸以下命令
# 進入剛下載的Paddle裏面
cd Paddle
# 切換到0.11.0分支
git checkout release/0.11.0
# 創建一個build文件夾
mkdir build
# 進入build文件夾裏
cd build
# 這就要選好你的需求了,比如筆者沒有使用GPU,不支持AVX,爲了節省空間,我把測試關閉了,這樣會少很多空間。最後不要少了..
cmake .. -DWITH_GPU=OFF -DWITH_AVX=OFF -DWITH_TESTING=OFF
# 最後make,使用4個線程編譯生成你想要的安裝包,這個可能很久,一定要有耐心
make -j4
經過長久的make之後,終於生成了我們想要的安裝包,它的路徑在Paddle/build/python/dist下,比如筆者在該目錄下有這個安裝包paddlepaddle-0.11.0-cp27-cp27mu-linux_x86_64.whl,你的命名可能不是這個。之後就可以安裝了,使用pip安裝:
# 請切入到該目錄
cd build/python/dist/
# 每個人的安裝包名字可能不一樣。如果權限不夠,請在root下執行命令
pip install paddlepaddle-0.11.0-cp27-cp27mu-linux_x86_64.whl
這個我們就已經安裝了paddlepaddle,現在就測試看看paddlepaddle有沒有安裝成功了,在python的命令終端中試着導入paddlepaddle包:
import paddle.v2 as paddle
如果沒有報錯的話就證明paddlepaddle安裝成功了
在Docker編譯生成安裝包¶
使用Docker就輕鬆很多了,有多輕鬆,看一下便知,以下的命令都是在Ubuntu本地操作的,全程不用進入到docker鏡像中的。
1.首先要在GitHub上獲取paddlepaddle源碼
git clone https://github.com/PaddlePaddle/Paddle.git
2.切入到項目的根目錄下
cd Paddle
切換到0.11.0分支
git checkout release/0.11.0
3.生成安裝包
執行以下代碼,生成whl安裝包,這個跟在本地操作差不多。
# 啓動並進入鏡像
docker run -v $PWD:/paddle -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash
# 創建並進入build鏡像
mkdir -p /paddle/build && cd /paddle/build
# 安裝缺少的依賴環境
pip install protobuf==3.1.0
# 安裝依賴環境
apt install patchelf
# 生成編譯環境
cmake .. -DWITH_GPU=OFF -DWITH_AVX=OFF -DWITH_TESTING=OFF
# 開始編譯
make -j4
然後使用exit命令退出鏡像,再Ubuntu系統本地的Paddle/build/python/dist目錄下同樣會生成一個安裝包,這對比在本地生成的安裝包,是不是要簡單很多,沒錯這就是Docker強大之處,所有的依賴環境都幫我們安裝好了,現在只要安裝這個安裝包就行了:
# 請切入到該目錄
cd build/python/dist/
# 每個人的安裝包名字可能不一樣。如果權限不夠,請在root下執行命令
pip install paddlepaddle-0.11.0-cp27-cp27mu-linux_x86_64.whl
同樣我們要測試看看paddlepaddle有沒有安裝成功了,在python的命令終端中試着導入paddlepaddle包:
import paddle.v2 as paddle
如果沒有報錯的話就證明paddlepaddle安裝成功了
編譯Docker鏡像¶
如果你比較喜歡使用Docker來運行你的paddlepaddle代碼,但是有沒有你想要的鏡像,這是就要自己來製作一個Docker鏡像了,比如筆者的電腦是不支持AVX指令集的,還只有CPU,那麼我就要一個不用AVX指令集和使用CPU訓練的鏡像。好吧,我們開始吧
1.我們要從GitHub下載源碼:
git clone https://github.com/PaddlePaddle/Paddle.git
2.安裝開發工具到 Docker image裏
# 切入到Paddle目錄下
cd Paddle
# 切換到0.11.0分支
git checkout release/0.11.0
# 下載依賴環境並創建鏡像,別少了最後的.
docker build -t paddle:dev .
有可能它不能夠命名爲paddle:dev,我們可以對他從重新命名,ID要是你鏡像的ID
# docker tag <鏡像對應的ID> <鏡像名:TAG>
例如:docker tag 1e835127cf33 paddle:dev
3.編譯
# 這個編譯要很久的,請耐心等待
docker run --rm -e WITH_GPU=OFF -e WITH_AVX=OFF -v $PWD:/paddle paddle:dev
安裝完成之後,使用docker images查看剛纔安裝的鏡像
測試安裝環境¶
我們就使用官方給出的一個例子,來測試我們安裝paddlepaddle真的安裝成功了
1.創建一個記事本,命名爲housing.py,並輸入以下代碼:
import paddle.v2 as paddle
# Initialize PaddlePaddle.
paddle.init(use_gpu=False, trainer_count=1)
# Configure the neural network.
x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector(13))
y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Linear())
# Infer using provided test data.
probs = paddle.infer(
output_layer=y_predict,
parameters=paddle.dataset.uci_housing.model(),
input=[item for item in paddle.dataset.uci_housing.test()()])
for i in xrange(len(probs)):
print 'Predicted price: ${:,.2f}'.format(probs[i][0] * 1000)
2.執行一下該代碼
在本地執行代碼請輸入下面的命令
python housing.py
在Docker上執行代碼的請輸入下面的代碼
docker run -v $PWD:/work -w /work -p 8899:8899 hub.baidubce.com/paddlepaddle/paddle python housing.py
-v命令是把本地目錄掛載到docker鏡像的目錄上,-w設置該目錄爲工作目錄,-p設置端口號,使用到的鏡像是在使用Docker安裝部分安裝的鏡像hub.baidubce.com/paddlepaddle/paddle
3.終端會輸出下面類似的日誌
I0116 08:40:12.004096 1 Util.cpp:166] commandline: --use_gpu=False --trainer_count=1
Cache file /root/.cache/paddle/dataset/fit_a_line.tar/fit_a_line.tar not found, downloading https://github.com/PaddlePaddle/book/raw/develop/01.fit_a_line/fit_a_line.tar
[==================================================]
Cache file /root/.cache/paddle/dataset/uci_housing/housing.data not found, downloading https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data
[==================================================]
Predicted price: $12,316.63
Predicted price: $13,830.34
Predicted price: $11,499.34
Predicted price: $17,395.05
Predicted price: $13,317.67
Predicted price: $16,834.08
Predicted price: $16,632.04
如果沒有成功運行該代碼,報錯信息如下,說明安裝的paddlepaddle版本過低,請安裝高版本的paddlepaddle
I0116 13:53:48.957136 15297 Util.cpp:166] commandline: --use_gpu=False --trainer_count=1
Traceback (most recent call last):
File "housing.py", line 13, in <module>
parameters=paddle.dataset.uci_housing.model(),
AttributeError: 'module' object has no attribute 'model'
最後提示¶
- 有很多學習者會出現明明安裝完成PaddlePaddle了,但是在PaddlePaddle的時候,在初始化PaddlePaddle這一行代碼出錯
paddle.init(use_gpu=False, trainer_count=1)
這個多數是讀者的電腦不支持AVX指令集,而在PaddlePaddle的時候,安裝的是支持AVX指令集的版本,所以導致在初始化PaddlePaddle的時候報錯。所以在安裝或者編譯PaddlePaddle安裝包時,要根據讀者電腦本身的情況,選擇是否支持AVX指令集。查看電腦是否支持AVX指令集,可以在終端輸入以下命令,輸出Yes表示支持,輸出No表示不支持
if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
- 如果報以下的錯誤,這是在
/usr/lib下沒有找到對應的動態庫,通常情況它們會放在/usr/local/lib目錄下。可以使用命令ldconfig更新一下系統的動態庫。
ImportError: libmkldnn.so.0: cannot open shared object file: No such file or directory
下一章:《我的PaddlePaddle學習之路》筆記二——MNIST手寫數字識別¶
項目代碼¶
GitHub地址:https://github.com/yeyupiaoling/LearnPaddle
參考資料¶
- http://paddlepaddle.org/
- https://pip.pypa.io/en/stable/
- http://www.runoob.com/
- http://www.linuxidc.com/Linux/2016-12/138489.htm
- https://www.jianshu.com/p/c6264cd5f5c7