PaddlePaddle(v0.10.0)源码方式安装

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发行版,接着也了解到:

PaddlePaddle(v0.10.0)源码方式安装_第1张图片

图片来自: 如何评价百度刚刚开源的 Paddle 平台?
从表格来看,上手难度中等,并且很多中文文档,还有视频教程,以前试过入坑tensorflow,额,我没去学,坑还没入,看了看视频教程标题,有我想要的东西,就用它了,愉快的决定了。

走过一遍源码安装之后,我想说非常非常费时,主要是各种墙(天朝就是强,等得我天荒地老),其实现成 的教程就在paddle项目中,里面有个dockerfile


PaddlePaddle(v0.10.0)源码方式安装_第2张图片

虽然这是给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
PaddlePaddle(v0.10.0)源码方式安装_第3张图片

上面是安装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
PaddlePaddle(v0.10.0)源码方式安装_第4张图片

4、make

在Paddle根目录处:

make
PaddlePaddle(v0.10.0)源码方式安装_第5张图片

5、make install

在Paddle根目录处:

make install 
PaddlePaddle(v0.10.0)源码方式安装_第6张图片

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结尾知道了这个文件路径,找到这个文件,打开:


PaddlePaddle(v0.10.0)源码方式安装_第7张图片

看到一下安装的命令,并且和报错相吻合,运行这个明明果然,好了。

7、paddle version

直接运行paddle version,查看信息和一些功能的开关情况:

paddle version

PaddlePaddle(v0.10.0)源码方式安装_第8张图片

环境安装完毕!

8、测试

在普通用户下:

jupyter notebook

PaddlePaddle(v0.10.0)源码方式安装_第9张图片

在前面安装软件的过程中,我们已经了jupyter notebook 直接输入命令,浏览器就会弹出窗口,之后创建python的文件,运行
PaddlePaddle(v0.10.0)源码方式安装_第10张图片

代码出处 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()

PaddlePaddle(v0.10.0)源码方式安装_第11张图片

教程结束,最后唠叨一下,除非很有空,不然正的很慢,建议用docker,我再家里有个台式本来是下载docker的结果不支持虚拟化技术吧,我才这么折腾,docker这个方式也是不错的,起码不用浪费那么多时间,反复看多几遍如果不会, PaddlePaddle的Docker容器使用方式,里面已经教了已经集成好的镜像的下载步骤和 镜像搭建步骤,其实这篇东西就是从里面自动搭建镜像的脚本中手工搞一遍而已。

你可能感兴趣的:(PaddlePaddle(v0.10.0)源码方式安装)