原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历
这一章我们介绍如何安装新版本的PaddlePaddle,这里说的新版本主要是说Fluid版本。Fluid 是设计用来让用户像Pytorch和Tensorflow Eager Execution一样执行程序。在这些系统中,不再有模型这个概念,应用也不再包含一个用于描述Operator图或者一系列层的符号描述,而是像通用程序那样描述训练或者预测的过程。也就是说PaddlePaddle从Fluid版本开始使用动态图机制,所以我们这个系列也是使用Fluid版本编写的教程。
PaddlePaddle在1.2版本之后开始支持Windows,也就是说使用Windows的用户不需要再安装Docker容器,或者使用Windows的Liunx子系统,直接可以在Windows系统本身安装PaddlePaddle。下面我们就介绍如何在Windows安装PaddlePaddle,分为两个部分介绍,首先安装Python 3.5环境,然后再使用命令安装PaddlePaddle。
pip
的目录比较麻烦。然后点击 Install Now
开始安装。
Windows PowerShell
或者 cmd
,笔者的系统是Windows 10,可以使用 Windows PowerShell
,如果读者是其他系统,可以使用 cmd
。用命令 python -V
查看是否安装成功。正常安装之后可以显示安装Python的版本。
PaddlePaddle支持Windows之后,安装起来非常简单,只需要一条命令就可以完成安装。
Windows PowerShell
,输入以下命令。可以使用 ==
指定安装PaddlePaddle的版本,如没有指定版本,默认安装是最新版本。-i
后面是镜像源地址,使用国内镜像源可以大大提高下载速度:pip3 install paddlepaddle==1.4.1 -i https://mirrors.aliyun.com/pypi/simple/
pip3 install paddlepaddle-gpu==1.4.1 -i https://mirrors.aliyun.com/pypi/simple/
Windows PowerShell
中输入命令 python
,进入到Python 编辑环境,并输入以下代码,导没有保存证明安装成功:import paddle.fluid
下面介绍在Ubuntu系统下安装PaddlePaddle,PaddlePaddle支持64位的Ubuntu 14.04 /16.04 /18.04系统,Python支持Python2.7.15,Python3.5.x,Python3.6.x,Python3.7.x。
sudo apt install python3.5
sudo apt install python3.5-dev
Ctrl+Alt+T
,输入以下命令。可以使用 ==
指定安装PaddlePaddle的版本,如没有指定版本,默认安装是最新版本。-i
后面是镜像源地址,使用国内镜像源可以大大提高下载速度:pip3 install paddlepaddle==1.4.1 -i https://mirrors.aliyun.com/pypi/simple/
==
指定安装PaddlePaddle的版本和CUDA、CUDNN的版本,这必须要跟读者系统本身安装的CUDA版本对应,比如以下命令就是安装支持CUDA 9.0和CUDNN 7的PaddlePaddle版本。-i
后面是镜像源地址,使用国内镜像源可以大大提高下载速度:pip3 install paddlepaddle-gpu==1.4.1.post97 -i https://mirrors.aliyun.com/pypi/simple/
python3
,进入到Python 编辑环境,并输入以下代码,正确情况下如图所示:import paddle.fluid
这部分我们将介绍使用源码编译PaddlePaddle,可以通过这种方式安装符合读者需求的PaddlePaddle,比如笔者的电脑安装的是CUDA 10 和 CUDNN 7,而目前官方提供的没有支持CUDA 10 和 CUDNN 7的PaddlePaddle版本,所以笔者就可以通过源码编译的方式编译PaddlePaddle安装包,当然也要PaddlePaddle支持才行。
下面我们将介绍在Windows系统下进行源码编译PaddlePaddle。目前支持使用的系统是64位的Windows 10 家庭版/专业版/企业版。
Visual Studio 2015 Update3
。下载地址:https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/ ,因为是旧版本,还有 加入免费的 Dev Essentials 计划
才能正常下载。
cmake 3.13
,下载cmake的安装包,下载地址:https://cmake.org/download/ ,一路默认,只需要在添加环境变量的时候注意添加环境变量就可以了。如何存在环境变量问题,可以重启系统。
pip3 install numpy
pip3 install protobuf
pip3 install wheel
Git Bash Here
,执行以下两条命令。将PaddlePaddle的源码clone在当下目录下的Paddle的文件夹中,并进入Padde目录下,操作如下图所示,之后的命令也是在这个终端操作:git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
git checkout release/1.2
mkdir build
cd build
cmake .. -G "Visual Studio 14 2015 Win64" -DPY\_VERSION=3.5 -DPYTHON\_INCLUDE\_DIR=${PYTHON\_INCLUDE\_DIRS} -DPYTHON\_LIBRARY=${PYTHON\_LIBRARY} -DPYTHON\_EXECUTABLE=${PYTHON\_EXECUTABLE} -DWITH\_FLUID\_ONLY=ON -DWITH\_GPU=OFF -DWITH\_TESTING=OFF -DCMAKE\_BUILD\_TYPE=Release
third_party
文件夹放到上面第7步创建的 build
目录下。Blend for Visual Studio 2015
打开 paddle.sln
文件,选择平台为 x64
,配置为 Release
,开始编译\paddle\build\python\dist
目录下找到生成的 .whl
包pip3 install (whl包的名字)
下面介绍的是使用Ubuntu编译PaddlePaddle源码,笔者的系统是64位的Ubuntu 16.04,Python环境是Python 3.5。
sudo apt update
Sources
点击下载。
unzip opencv-3.4.5.zip
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
cd opencv-3.4.5/
mkdir my_build_dir
cd my_build_dir
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j$(nproc)
sudo make install
编译PaddlePaddle源码之前,还需要安装以下的一些依赖环境。
sudo apt install python3.5-dev
sudo apt-get udpate
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install curl
sudo curl https://bootstrap.pypa.io/get-pip.py -o - | python3.5
sudo easy_install pip
sudo apt install swig
sudo apt install wget
sudo pip install numpy==1.14.0
sudo pip install protobuf==3.1.0
sudo pip install wheel
sudo apt install patchelf
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
git checkout release/1.4
mkdir build && cd build
-DPY_VERSION
指定编译的PaddlePaddle支持的Python版本,笔者这里选择的是Python 3.5。并且使用参数 -DWITH_FLUID_ONLY
指定不编译V2版本的PaddlePaddle代码。使用参数 -DWITH_GPU
指定不使用GPU,也就是只编译CPU版本: cmake .. -DPY\_VERSION=3.5 -DWITH\_FLUID\_ONLY=ON -DWITH\_GPU=OFF -DWITH\_TESTING=OFF -DCMAKE\_BUILD\_TYPE=Release
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
dpkg -i nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt-get install -y libnccl2=2.2.13-1+cuda9.0 libnccl-dev=2.2.13-1+cuda9.0
-DPY_VERSION
指定编译的PaddlePaddle支持的Python版本,笔者这里选择的是Python 3.5。并且使用参数 -DWITH_FLUID_ONLY
指定不编译V2版本的PaddlePaddle代码。使用参数 -DWITH_GPU
指定使用GPU,同时编译支持CPU和GPU版本的PaddlePaddle。cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Releasemake -j$(nproc)
/paddle/build/python/dist
目录下找到生成的PaddlePaddle .whl
包,可以使用这个命令进入到指定目录。cd /paddle/build/python/dist
.whl
包:pip3 install (whl包的名字)
使用docker编译的安装包只能支持Ubuntu的PaddlePaddle,因为下载docker镜像也是Ubuntu系统的。通过使用docker编译PaddlePaddle得到的安装包,可以在docker本身使用,之后可以使用docker执行PaddlePaddle。也可以本地的Ubuntu上安装使用,不过要注意的是docker中的系统是Ubuntu 16.04。
# 卸载系统原有docker
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新apt-get源
sudo apt-get update
# 安装docker的依赖
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 验证拥有指纹
sudo apt-key fingerprint 0EBFCD88
# 设置稳定存储库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 再次更新apt-get源
sudo apt-get update
# 开始安装docker
sudo apt-get install docker-ce
# 加载docker
sudo apt-cache madison docker-ce
# 验证docker是否安装成功
sudo docker run hello-world
正常情况下输出如下图所示。
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
sudo docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash
sudo nvidia-docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash
cd paddle
git checkout release/1.4
/paddle/build
路径下:mkdir -p /paddle/build && cd /paddle/build
pip3 install protobuf==3.1.0
apt install patchelf
-DPY_VERSION
指定编译的PaddlePaddle支持的Python版本,笔者这里选择的是Python 3.5。并且使用参数 -DWITH_FLUID_ONLY
指定不编译V2版本的PaddlePaddle代码。使用参数 -DWITH_GPU
指定不使用GPU,只编译支持CPU的PaddlePaddle:cmake .. -DPY\_VERSION=3.5 -DWITH\_FLUID\_ONLY=ON -DWITH\_GPU=OFF -DWITH\_TESTING=OFF -DCMAKE\_BUILD\_TYPE=Release
-DPY_VERSION
指定编译的PaddlePaddle支持的Python版本,笔者这里选择的是Python 3.5。并且使用参数 -DWITH_FLUID_ONLY
指定不编译V2版本的PaddlePaddle代码。使用参数 -DWITH_GPU
指定使用GPU,同时编译支持CPU和GPU版本的PaddlePaddle。这里要注意一下,我们拉取的这个镜像是CUDA 8.0的,不一定跟读者本地的CUDA版本对应,这可能导致编译的安装包在本地不可用:cmake .. -DPY\_VERSION=3.5 -DWITH\_FLUID\_ONLY=ON -DWITH\_GPU=ON -DWITH\_TESTING=OFF -DCMAKE\_BUILD\_TYPE=Release
make -j$(nproc)
/paddle/build/python/dist
目录下,如果是想在docker中安装PaddlePaddle,可以直接在docker中打开这个目录。如果要在本地安装的话,还有先退出docker,并进入到这个目录:# 在docker镜像中安装
cd /paddle/build/python/dist
# 在Ubuntu本地安装
exit
cd build/python/dist
pip3.5 install (whl包的名字)
下面介绍在Windows测试PaddlePaddle的安装情况,Ubuntu环境类似。
...
选择外部Python环境。
test_paddle.py
,编写并执行以下测试代码,现在看不懂没有关系,跟着这个系列教程来学,我们会熟悉使用PaddlePaddle的:# Include libraries.
import paddle
import paddle.fluid as fluid
import numpy
import six
# Configure the neural network.
def net(x, y):
y_predict = fluid.layers.fc(input=x, size=1, act=None)
cost = fluid.layers.square_error_cost(input=y_predict, label=y)
avg_cost = fluid.layers.mean(cost)
return y_predict, avg_cost
# Define train function.
def train(save_dirname):
x = fluid.layers.data(name='x', shape=[13], dtype='float32')
y = fluid.layers.data(name='y', shape=[1], dtype='float32')
y_predict, avg_cost = net(x, y)
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001)
sgd_optimizer.minimize(avg_cost)
train_reader = paddle.batch(
paddle.reader.shuffle(paddle.dataset.uci_housing.train(), buf_size=500),
batch_size=20)
place = fluid.CPUPlace()
exe = fluid.Executor(place)
def train_loop(main_program):
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])
exe.run(fluid.default_startup_program())
PASS_NUM = 1000
for pass_id in range(PASS_NUM):
total_loss_pass = 0
for data in train_reader():
avg_loss_value, = exe.run(
main_program, feed=feeder.feed(data), fetch_list=[avg_cost])
total_loss_pass += avg_loss_value
if avg_loss_value < 5.0:
if save_dirname is not None:
fluid.io.save_inference_model(
save_dirname, ['x'], [y_predict], exe)
return
print("Pass %d, total avg cost = %f" % (pass_id, total_loss_pass))
train_loop(fluid.default_main_program())
# Infer by using provided test data.
def infer(save_dirname=None):
place = fluid.CPUPlace()
exe = fluid.Executor(place)
inference_scope = fluid.core.Scope()
with fluid.scope_guard(inference_scope):
[inference_program, feed_target_names, fetch_targets] = (
fluid.io.load_inference_model(save_dirname, exe))
test_reader = paddle.batch(paddle.dataset.uci_housing.test(), batch_size=20)
test_data = six.next(test_reader())
test_feat = numpy.array(list(map(lambda x: x[0], test_data))).astype("float32")
test_label = numpy.array(list(map(lambda x: x[1], test_data))).astype("float32")
results = exe.run(inference_program,
feed={feed_target_names[0]: numpy.array(test_feat)},
fetch_list=fetch_targets)
print("infer results: ", results[0])
print("ground truth: ", test_label)
# Run train and infer.
if __name__ == "__main__":
save_dirname = "fit_a_line.inference.model"
train(save_dirname)
infer(save_dirname)
正常情况下会输出:
Pass 0, total avg cost = 13527.760742
Pass 1, total avg cost = 12497.969727
Pass 2, total avg cost = 11737.727539
Pass 3, total avg cost = 11017.893555
Pass 4, total avg cost = 9801.554688
Pass 5, total avg cost = 9150.510742
Pass 6, total avg cost = 8611.593750
Pass 7, total avg cost = 7924.654297
......
PaddlePaddle的安装已经介绍完成,那我们开始进入深度学习的大门吧。本系列教程将会一步步介绍如何使用PaddlePaddle,并使用PaddlePaddle应用到实际项目中。
项目代码GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note1
注意: 最新代码以GitHub上的为准
下一章:《PaddlePaddle从入门到炼丹》二——计算1+1