0、前言
PaddlePaddle,百度旗下深度学习开源平台。
2016年9月27日,百度宣布其全新的深度学习开源平台PaddlePaddle在开源社区Github及百度大脑平台开放,供广大开发者下载使用。百度成为继Google、Facebook、IBM后另一个将人工智能技术开源的科技巨头,同时也是国内首个开源深度学习平台的科技公司。
---摘自百度百科:PaddlePaddle
下面是两个有用的网址:
PaddlePaddle官网
百度技术学院-PaddlePaddle 深度学习实战课程
看完实战课程的前三个视频,觉得不错,同时官方只提供Docker的安装模式,所以研究了一下,有了这篇源码方式安装的方式。
看【PaddlePaddle 深度学习实战课程】的话推荐用谷歌浏览器,因为网址兼容性问题,其他浏览器可能不能全屏不能播放声音。
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.gz
tar -C /usr/local -xzf go.tgz
mkdir /root/gopath
mkdir /root/gopath/bin
mkdir /root/gopath/src
在/etc/profile中,添加环境变量:
export GOROOT=/usr/local/go
export GOPATH=/root/gopath
PATH=${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-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没有这个是编译不通过的,还有一些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是在根目录下的目录,因为/开头的路径。
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 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()
教程结束,最后唠叨一下,除非很有空,不然正的很慢,建议用docker,我再家里有个台式本来是下载docker的结果不支持虚拟化技术吧,我才这么折腾,docker这个方式也是不错的,起码不用浪费那么多时间,反复看多几遍如果不会,PaddlePaddle的Docker容器使用方式,里面已经教了已经集成好的镜像的下载步骤和镜像搭建步骤,其实这篇东西就是从里面自动搭建镜像的脚本中手工搞一遍而已。