0靡菇、前言
PaddlePaddle,百度旗下深度學(xué)習(xí)開源平臺(tái)灵临。
??2016年9月27日潮瓶,百度宣布其全新的深度學(xué)習(xí)開源平臺(tái)PaddlePaddle在開源社區(qū)Github及百度大腦平臺(tái)開放,供廣大開發(fā)者下載使用晌梨。百度成為繼Google桥嗤、Facebook、IBM后另一個(gè)將人工智能技術(shù)開源的科技巨頭仔蝌,同時(shí)也是國(guó)內(nèi)首個(gè)開源深度學(xué)習(xí)平臺(tái)的科技公司泛领。
---摘自百度百科:PaddlePaddle
下面是兩個(gè)有用的網(wǎng)址:
PaddlePaddle官網(wǎng)
百度技術(shù)學(xué)院-PaddlePaddle 深度學(xué)習(xí)實(shí)戰(zhàn)課程
看完實(shí)戰(zhàn)課程的前三個(gè)視頻,覺得不錯(cuò)敛惊,同時(shí)官方只提供Docker的安裝模式渊鞋,所以研究了一下,有了這篇源碼方式安裝的方式瞧挤。
看【PaddlePaddle 深度學(xué)習(xí)實(shí)戰(zhàn)課程】的話推薦用谷歌瀏覽器篓像,因?yàn)榫W(wǎng)址兼容性問(wèn)題,其他瀏覽器可能不能全屏不能播放聲音皿伺。
github的話,介紹一下這兩個(gè):
PaddlePaddle/book
PaddlePaddle/Paddle
PaddlePaddle/book:這是離線教程盒粮,試過(guò)自己動(dòng)手下載鸵鸥,缺少了jupyter notebook源文件(.ipynb),只有生成的文件丹皱,所以notebook的交互文件沒(méi)了妒穴,下載docker版本的話,全部文件都健在摊崭。
PaddlePaddle/Paddle:這是源碼讼油,下載的時(shí)候記得用git clone,不要直接download zip壓縮文件呢簸,因?yàn)樵跐M足依賴的時(shí)候矮台,編譯時(shí)需要從git中獲取版本號(hào)。
從我docker方式安裝的時(shí)候發(fā)現(xiàn)運(yùn)行paddle的環(huán)境是一個(gè)叫moby的linux發(fā)行版根时,接著也了解到:
圖片來(lái)自:如何評(píng)價(jià)百度剛剛開源的 Paddle 平臺(tái)瘦赫?
從表格來(lái)看,上手難度中等蛤迎,并且很多中文文檔确虱,還有視頻教程,以前試過(guò)入坑tensorflow替裆,額校辩,我沒(méi)去學(xué)窘问,坑還沒(méi)入,看了看視頻教程標(biāo)題宜咒,有我想要的東西惠赫,就用它了,愉快的決定了荧呐。
走過(guò)一遍源碼安裝之后汉形,我想說(shuō)非常非常費(fèi)時(shí),主要是各種墻(天朝就是強(qiáng)倍阐,等得我天荒地老)概疆,其實(shí)現(xiàn)成 的教程就在paddle項(xiàng)目中,里面有個(gè)dockerfile
雖然這是給docker里面的moby的安裝paddle的安裝腳本峰搪,但是同是linux岔冀,也就可以用了
注意一點(diǎn)是內(nèi)核版本不要太高,我在Deepin15.4.1(內(nèi)核版本4.9)下概耻,在make源碼的時(shí)候報(bào)錯(cuò)了(即報(bào)error警告使套,不能繼續(xù)編譯了),最后轉(zhuǎn)到ubuntu下試了試才成功了鞠柄。
大概過(guò)程如下:滿足環(huán)境->cmke->make->make install->
pip install /usr/local/opt/paddle/share/wheels/*.whl->paddle version
1侦高、系統(tǒng)環(huán)境
系統(tǒng):ubuntu16.04.2LTS
python版本:2.7
paddle版本:v0.10.0
2、滿足環(huán)境
PaddlePaddle的Docker容器使用方式--開發(fā)鏡像
官方說(shuō)明:開發(fā)鏡像包含了以下工具:
- gcc/clang -------------編譯的
- nvcc -------------cuda的厌杜,沒(méi)有用到GPU可以不用安裝
- Python
- sphinx
- woboq -------------指的是woboq下的woboq_codebrowser
- sshd -------------按照文檔來(lái)理解奉呛,因該是ssh訪問(wèn)docker用的
下面內(nèi)容均來(lái)自源碼中的dockerfile
以下操作均在root用戶下進(jìn)行
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包管理器來(lái)安裝python環(huán)境,openssh遠(yuǎn)程用夯尽,python-numpy一些科學(xué)計(jì)算的庫(kù)瞧壮,clang-3.8 llvm-3.8 libclang-3.8-dev這些是golang的編譯工具,因?yàn)樵创a中有一個(gè)go文件夾放置go語(yǔ)言的源代碼匙握。沒(méi)有g(shù)o的編譯器咆槽,我就試過(guò)報(bào)錯(cuò),不過(guò)那是在我圈纺,還沒(méi)發(fā)現(xiàn)dockerfile之前的事秦忿。
2.2安裝Go
wget -O go.tgz https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz
tar -C /usr/local -xzf go.tgz
mkdir /root/gopath
mkdir /root/gopath/bin
mkdir /root/gopath/src
在/etc/profile中,添加環(huán)境變量:
export GOROOT=/usr/local/go
export GOPATH=/root/gopath
PATH=${PATH}:${GOROOT}/bin:${GOPATH}/bin
上面是安裝go和配置go的環(huán)境變量
2.3安裝glide
curl -q https://glide.sh/get | sh
↑安裝glide蛾娶。實(shí)際上很慢小渊,我直接從源倉(cāng)庫(kù)安裝:
apt-get install libglide3
2.4執(zhí)行一些命令
git config --global credential.helper store
↑這句是自動(dòng)保存git用戶名和密碼的命令
localedef -i en_US -f UTF-8 en_US.UTF-8
apt-get install -y libssl-dev libffi-dev
pip 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沒(méi)有這個(gè)是編譯不通過(guò)的酬屉,還有一些jupyter notebook的東西
2.3安裝woboq_codebrowser到/woboq
git clone https://github.com/woboq/woboq_codebrowser /woboq
cd /woboq
cmake -DLLVM_CONFIG_EXECUTABLE=/usr/bin/llvm-config-3.8 \
-DCMAKE_BUILD_TYPE=Release .
make
這里的woboq是在根目錄下的目錄,因?yàn)?開頭的路徑。
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完一般是用命令使用了谬擦,但是還是報(bào)錯(cuò)了切距,我們從截圖中可以看到有一些.whl結(jié)尾的文件,這是pip包管理器的東西惨远,我們還沒(méi)安裝這些包谜悟,所以安裝完就好了,錯(cuò)誤的時(shí)候我沒(méi)截圖北秽,所以將就文字描述吧葡幸。
6、pip安裝paddle生成的python包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple /usr/local/opt/paddle/share/wheels/*.whl
這里多加了一個(gè)添加源的參數(shù)選項(xiàng)而已贺氓。
其實(shí)這句命令是有跡可尋的:
在dockerfile結(jié)尾知道了這個(gè)文件路徑蔚叨,找到這個(gè)文件,打開:
看到一下安裝的命令辙培,并且和報(bào)錯(cuò)相吻合蔑水,運(yùn)行這個(gè)明明果然,好了扬蕊。
7搀别、paddle version
直接運(yùn)行paddle version,查看信息和一些功能的開關(guān)情況:
paddle version
環(huán)境安裝完畢尾抑!
8歇父、測(cè)試
在普通用戶下:
jupyter notebook
在前面安裝軟件的過(guò)程中,我們已經(jīng)了jupyter notebook 直接輸入命令蛮穿,瀏覽器就會(huì)彈出窗口,之后創(chuàng)建python的文件毁渗,運(yùn)行
代碼出處https://github.com/PaddlePaddle/book/blob/develop/01.fit_a_line/train.py
貼入如下代碼:
import paddle.v2 as paddle
import paddle.v2.dataset.uci_housing as uci_housing
def 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()
教程結(jié)束践磅,最后嘮叨一下,除非很有空灸异,不然正的很慢府适,建議用docker,我再家里有個(gè)臺(tái)式本來(lái)是下載docker的結(jié)果不支持虛擬化技術(shù)吧肺樟,我才這么折騰檐春,docker這個(gè)方式也是不錯(cuò)的,起碼不用浪費(fèi)那么多時(shí)間么伯,反復(fù)看多幾遍如果不會(huì)疟暖,PaddlePaddle的Docker容器使用方式,里面已經(jīng)教了已經(jīng)集成好的鏡像的下載步驟和鏡像搭建步驟,其實(shí)這篇東西就是從里面自動(dòng)搭建鏡像的腳本中手工搞一遍而已俐巴。