這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
0、前言
PaddlePaddle,百度旗下深度學習開源平台。
2016年9月27日,百度宣布其全新的深度學習開源平台PaddlePaddle在開源社區Github及百度大腦平台開放,供廣大開發人員下載使用。百度成為繼Google、Facebook、IBM後另一個將人工智慧技術開源的科技巨頭,同時也是國內首個開源深度學習平台的科技公司。
---摘自百度百科:PaddlePaddle
下面是兩個有用的網址:
PaddlePaddle官網
百度技術學院-PaddlePaddle 深度學習實戰課程
看完實戰課程的前三個視頻,覺得不錯,同時官方只提供Docker的安裝模式,所以研究了一下,有了這篇源碼方式安裝的方式。
看【PaddlePaddle 深度學習實戰課程】的話推薦用Google瀏覽器,因為網址相容性問題,其他瀏覽器可能不能全屏不能播放聲音。
github的話,介紹一下這兩個:
PaddlePaddle/book
PaddlePaddle/Paddle
PaddlePaddle/book:這是離線教程,試過自己動手下載,缺少了jupyter notebook源檔案(.ipynb),只有產生的檔案,所以notebook的互動檔案沒了,下載docker版本的話,全部檔案都健在。
PaddlePaddle/Paddle:這是源碼,下載的時候記得用git clone,不要直接download zip壓縮檔,因為在滿足依賴的時候,編譯時間需要從git中擷取版本號碼。
從我docker方式安裝的時候發現運行paddle的環境是一個叫moby的linux發行版,接著也瞭解到:
圖片來自:如何評價百度剛剛開源的 Paddle 平台?
從表格來看,上手難度中等,並且很多中文文檔,還有視頻教程,以前試過入坑tensorflow,額,我沒去學,坑還沒入,看了看視頻教程標題,有我想要的東西,就用它了,愉快的決定了。
走過一遍源碼安裝之後,我想說非常非常費時,主要是各種牆(天朝就是強,等得我天荒地老),其實現成 的教程就在paddle項目中,裡面有個dockerfile
雖然這是給docker裡面的moby的安裝paddle的安裝指令碼,但是同是linux,也就可以用了
注意一點是核心版本不要太高,我在Deepin15.4.1(核心版本4.9)下,在make源碼的時候報錯了(即報error警告,不能繼續編譯了),最後轉到ubuntu下試了試才成功了。
大概過程如下:滿足環境->cmke->make->make install->
pip install /usr/local/opt/paddle/share/wheels/*.whl->paddle version
1、系統內容
系統:ubuntu16.04.2LTS
python版本:2.7
paddle版本:v0.10.0
2、滿足環境
PaddlePaddle的Docker容器使用方式--開發鏡像
官方說明:開發鏡像包含了以下工具:
- gcc/clang -------------編譯的
- nvcc -------------cuda的,沒有用到GPU可以不用安裝
- Python
- sphinx
- woboq -------------指的是woboq下的woboq_codebrowser
- sshd -------------按照文檔來理解,因該是ssh訪問docker用的
下面內容均來自源碼中的dockerfile
以下操作均在root使用者下進行
2.1從源安裝軟體
apt-get update && \ apt-get install -y \ git python-pip python-dev openssh-server bison \ wget unzip unrar tar xz-utils bzip2 gzip coreutils ntp \ curl sed grep graphviz libjpeg-dev zlib1g-dev \ python-numpy python-matplotlib gcc g++ \ automake locales clang-format-3.8 swig doxygen cmake \ liblapack-dev liblapacke-dev libboost-dev \ clang-3.8 llvm-3.8 libclang-3.8-dev \ net-tools && \ apt-get clean -y
可以看到需要pip包管理器來安裝python環境,openssh遠程用,python-numpy一些科學計算的庫,clang-3.8 llvm-3.8 libclang-3.8-dev這些是golang的編譯工具,因為源碼中有一個go檔案夾放置go語言的原始碼。沒有go的編譯器,我就試過報錯,不過那是在我,還沒發現dockerfile之前的事。
2.2安裝Go
wget -O go.tgz https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gztar -C /usr/local -xzf go.tgzmkdir /root/gopathmkdir /root/gopath/binmkdir /root/gopath/src
在/etc/profile中,添加環境變數:
export GOROOT=/usr/local/goexport GOPATH=/root/gopathPATH=${PATH}:${GOROOT}/bin:${GOPATH}/bin
上面是安裝go和配置go的環境變數
2.3安裝glide
curl -q https://glide.sh/get | sh
↑安裝glide。實際上很慢,我直接從源倉庫安裝:
apt-get install libglide3
2.4執行一些命令
git config --global credential.helper store
↑這句是自動儲存git使用者名稱和密碼的命令
localedef -i en_US -f UTF-8 en_US.UTF-8
apt-get install -y libssl-dev libffi-devpip install certifi urllib3[secure]
2.5pip安裝軟體
pip install --upgrade pip && \ pip install -U 'protobuf==3.1.0' && \ pip install -U wheel pillow BeautifulSoup && \ pip install -U docopt PyYAML sphinx && \ pip install -U sphinx-rtd-theme==0.1.9 recommonmark && \ pip install pre-commit 'requests==2.9.2' 'ipython==5.3.0' && \ pip install 'ipykernel==4.6.0' 'jupyter==1.0.0' && \ pip install rarfile
首先更新一下pip本機快取,接著安裝軟體,裡面的protobuf沒有這個是編譯不通過的,還有一些jupyter notebook的東西
2.3安裝woboq_codebrowser到/woboq
git clone https://github.com/woboq/woboq_codebrowser /woboqcd /woboqcmake -DLLVM_CONFIG_EXECUTABLE=/usr/bin/llvm-config-3.8 \ -DCMAKE_BUILD_TYPE=Release .make
這裡的woboq是在根目錄下的目錄,因為/開頭的路徑。
3、cmake
在Paddle根目錄處:
cmake -DWITH_GPU=OFF -DWITH_AVX=ON -WITH_DOC=OFF
4、make
在Paddle根目錄處:
make
5、make install
在Paddle根目錄處:
make install
make install完一般是用命令使用了,但是還是報錯了,我們從中可以看到有一些.whl結尾的檔案,這是pip包管理器的東西,我們還沒安裝這些包,所以安裝完就好了,錯誤的時候我沒,所以將就文字描述吧。
6、pip安裝paddle產生的python包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple /usr/local/opt/paddle/share/wheels/*.whl
這裡多加了一個添加源的參數選項而已。
其實這句命令是有跡可尋的:
在dockerfile結尾知道了這個檔案路徑,找到這個檔案,開啟:
看到一下安裝的命令,並且和報錯相吻合,運行這個明明果然,好了。
7、paddle version
直接運行paddle version,查看資訊和一些功能的開關情況:
paddle version
環境安裝完畢!
8、測試
在普通使用者下:
jupyter notebook
在前面安裝軟體的過程中,我們已經了jupyter notebook 直接輸入命令,瀏覽器就會快顯視窗,之後建立python的檔案,運行
代碼出處https://github.com/PaddlePaddle/book/blob/develop/01.fit_a_line/train.py
貼入如下代碼:
import paddle.v2 as paddleimport paddle.v2.dataset.uci_housing as uci_housingdef main(): # init paddle.init(use_gpu=False, trainer_count=1) # network config 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()) y = paddle.layer.data(name='y', type=paddle.data_type.dense_vector(1)) cost = paddle.layer.mse_cost(input=y_predict, label=y) # create parameters parameters = paddle.parameters.create(cost) # create optimizer optimizer = paddle.optimizer.Momentum(momentum=0) trainer = paddle.trainer.SGD( cost=cost, parameters=parameters, update_equation=optimizer) feeding = {'x': 0, 'y': 1} # event_handler to print training and testing info def event_handler(event): if isinstance(event, paddle.event.EndIteration): if event.batch_id % 100 == 0: print "Pass %d, Batch %d, Cost %f" % ( event.pass_id, event.batch_id, event.cost) if isinstance(event, paddle.event.EndPass): result = trainer.test( reader=paddle.batch(uci_housing.test(), batch_size=2), feeding=feeding) print "Test %d, Cost %f" % (event.pass_id, result.cost) # training trainer.train( reader=paddle.batch( paddle.reader.shuffle(uci_housing.train(), buf_size=500), batch_size=2), feeding=feeding, event_handler=event_handler, num_passes=30)if __name__ == '__main__': main()
教程結束,最後嘮叨一下,除非很有空,不然正的很慢,建議用docker,我再家裡有個台式本來是下載docker的結果不支援虛擬化技術吧,我才這麼折騰,docker這個方式也是不錯的,起碼不用浪費那麼多時間,反覆看多幾遍如果不會,PaddlePaddle的Docker容器使用方式,裡面已經教了已經整合好的鏡像的下載步驟和鏡像搭建步驟,其實這篇東西就是從裡面自動搭建鏡像的指令碼中手工搞一遍而已。