From 6f6e90a8203f9ec4c728206ab2d0a5789ae497ae Mon Sep 17 00:00:00 2001
From: JiabinYang
+
+##### ***使用Docker进行安装***
+
+
+
+为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/)。
+
+
+
+> 请注意,要安装和使用支持 GPU 的PaddlePaddle版本,您必须先安装[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)
+
+
+
+如果已经**正确安装Docker**,即可以开始**使用Docker安装PaddlePaddle**
+
+1. 使用以下指令拉取我们为您预安装好PaddlePaddle的镜像:
+
+
+ * 对于需要**CPU版本的PaddlePaddle**的用户请使用以下指令拉取我们为您预安装好*PaddlePaddle For CPU*的镜像:
+
+ `docker pull hub.baidubce.com/paddlepaddle/paddle:0.15.0`
+
+
+ * 对于需要**GPU版本的PaddlePaddle**的用户请使用以下指令拉取我们为您预安装好*PaddlePaddle For GPU*的镜像:
+
+ `docker pull hub.baidubce.com/paddlepaddle/paddle:0.15.0-gpu-cuda9.0-cudnn7`
+
+
+ * 您也可以通过以下指令拉取任意的我们提供的Docker镜像:
+
+ `docker pull hub.baidubce.com/paddlepaddle/paddle:[tag]`
+ > (请把[tag]替换为[镜像表](#dockers)中的内容)
+
+2. 使用以下指令用已经拉取的镜像构建并进入Docker容器:
+
+ `docker run --name [Name of container] -it -v $PWD:/paddle
+##### ***使用pip安装PaddlePaddle***
+
+您可以直接粘贴以下命令到命令行来安装PaddlePaddle(适用于ubuntu16.04及以上安装CPU-ONLY的版本),如果出现问题,您可以参照后面的解释对命令作出适应您系统的更改:
+
+ apt update && apt install -y python-dev python-pip && pip install paddlepaddle
+
+
+首先,我们使用以下指令来**检测本机的环境**是否适合安装PaddlePaddle:
+
+`uname -m && cat /etc/*release`
+> 上面的命令将会显示本机的操作系统和位数信息,请确保您的计算机和本教程的要求一致。
+
+
+其次,您的电脑需要满足以下要求:
+
+* Python2.7.x (dev)
+* Pip >= 9.0.1
+
+ > 您的Ubuntu上可能已经安装pip请使用pip -V来确认我们建议使用pip 9.0.1或更高版本来安装
+
+ 更新apt的源: `apt update`
+
+ 使用以下命令安装或升级Python和pip到需要的版本: `sudo apt install python-dev python-pip`
+ > 即使您的环境中已经有Python2.7也需要安装Python dev。
+
+现在,让我们来安装PaddlePaddle:
+
+1. 使用pip install来安装PaddlePaddle
+
+ * 对于需要**CPU版本PaddlePaddle**的用户:`pip install paddlepaddle`
+
+
+ * 对于需要**GPU版本PaddlePaddle**的用户:`pip install paddlepaddle-gpu`
+ > 1. 为防止出现nccl.h找不到的问题请首先按照以下命令安装nccl2(这里提供的是ubuntu 16.04,CUDA8,cuDNN v7下nccl2的安装指令),更多版本的安装信息请参考NVIDIA[官方网站](https://developer.nvidia.com/nccl/nccl-download):
+ a. `wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb`
+ b. `sudo apt-get install libnccl2=2.2.13-1+cuda8.0 libnccl-dev=2.2.13-1+cuda8.0`
+ > 2. 如果您不规定pypi包版本号,我们默认为您提供支持Cuda 8/cuDNN v7的PaddlePaddle版本。
+
+
+ 对于出现`Cannot uninstall 'six'.`问题的用户,可是由于您的系统中已有的Python安装问题造成的,请使用`pip install paddlepaddle --ignore-installed six`(CPU)或`pip install paddlepaddle --ignore-installed six`(GPU)解决。
+
+ * 对于有**其他要求**的用户:`pip install paddlepaddle==[版本号]`
+ > `版本号`参见[安装包列表](#whls)或者您如果需要获取并安装**最新的PaddlePaddle开发分支**,可以从[多版本whl包列表](#ciwhls)或者我们的[CI系统](https://paddleci.ngrok.io/project.html?projectId=Manylinux1&tab=projectOverview) 中下载最新的whl安装包和c-api开发包并安装。如需登录,请点击“Log in as guest”。
+
+
+
+
+现在您已经完成使用`pip install` 来安装的PaddlePaddle的过程。
+
+
+##### ***验证安装***
+安装完成后您可以使用:`python` 进入python解释器,然后使用`import paddle.fluid` 验证是否安装成功。
+
+
+##### ***如何卸载PaddlePaddle***
+请使用以下命令卸载PaddlePaddle:
+
+* ***CPU版本的PaddlePaddle***: `pip uninstall PaddlePaddle`
+
+* ***GPU版本的PaddlePaddle***: `pip uninstall PaddlePaddle-gpu`
+
+
+### **CentOS下安装PaddlePaddle**
+
+本说明将介绍如何在*64位台式机或笔记本电脑*以及CentOS系统下安装PaddlePaddle,我们支持的CentOS系统需满足以下要求:
+
+
+请注意:在其他系统上的尝试可能会导致安装失败。
+
+* *CentOS 6 / 7*
+
+#### 确定要安装的PaddlePaddle版本
+* 仅支持CPU的PaddlePaddle。如果您的计算机没有 NVIDIA® GPU,则只能安装此版本。如果您的计算机有GPU,
+推荐您先安装CPU版本的PaddlePaddle,来检测您本地的环境是否适合。
+
+* 支持GPU的PaddlePaddle,为了使PaddlePaddle程序运行的更加迅速,我们通过GPU对PaddlePaddle程序进行加速,但安装GPU版本的PaddlePaddle需要先拥有满足以下条件的NVIDIA® GPU(具体安装流程和配置请务必参见NVIDIA官方文档:[For CUDA](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/),[For cuDNN](https://docs.nvidia.com/deeplearning/sdk/cudnn-install/))
+ * *CUDA 工具包9.0配合cuDNN v7*
+ * *CUDA 工具包8.0配合cuDNN v7*
+ * *GPU运算能力超过1.0的硬件设备*
+
+
+
+#### 选择如何安装PaddlePaddle
+在CentOS的系统下我们提供4种安装方式:
+
+* Docker安装(不支持GPU版本)
+* pip安装
+* 源码编译安装(不支持CentOS 6的所有版本以及CentOS 7的GPU版本)
+* Docker源码编译安装(不支持GPU版本)
+
+
+我们更加推荐**使用Docker进行安装**,因为我们在把工具和配置都安装在一个 Docker image 里,这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。
+
+
+
+**使用pip安装**,我们为您提供pip安装方法,但它更依赖您的本机环境,可能会出现和您本机环境相关的一些问题。
+
+从[**源码编译安装**](#ct_source)以及[**使用Docker进行源码编译安装**](#ct_docker),这是一种通过将PaddlePaddle源代码编译成为二进制文件,然后在安装这个二进制文件的过程,相比使用我们为您编译过的已经通过测试的二进制文件形式的PaddlePaddle,手动编译更为复杂,我们将在说明的最后详细为您解答。
+
+##### ***使用Docker进行安装***
+
+
+
+为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/)
+
+
+> 请注意,要安装和使用支持 GPU 的PaddlePaddle版本,您必须先安装[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)
+
+
+
+当您已经**正确安装Docker**后你就可以开始**使用Docker安装PaddlePaddle**
+
+1. 使用以下指令拉取我们为您预安装好PaddlePaddle的镜像:
+
+
+ * 对于需要**CPU版本的PaddlePaddle**的用户请使用以下指令拉取我们为您预安装好*PaddlePaddle For CPU*的镜像:
+
+ `docker pull hub.baidubce.com/paddlepaddle/paddle:0.15.0`
+
+
+
+
+ * 您也可以通过以下指令拉取任意的我们提供的Docker镜像:
+
+ `docker pull hub.baidubce.com/paddlepaddle/paddle:[tag]`
+ > (请把[tag]替换为[镜像表](#dockers)中的内容)
+
+
+2. 使用以下指令用已经拉取的镜像构建并进入Docker容器:
+
+ `docker run --name [Name of container] -it -v $PWD:/paddle
+##### ***使用pip安装PaddlePaddle***
+
+您可以直接粘贴以下命令到命令行来安装PaddlePaddle(适用于CentOS7安装CPU-ONLY的版本),如果出现问题,您可以参照后面的解释对命令作出适应您系统的更改:
+
+ yum update && yum install -y epel-release && yum install -y python-devel python-pip && pip install paddlepaddle && export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
+
+首先,我们使用以下指令来**检测本机的环境**是否适合安装PaddlePaddle:
+
+`uname -m && cat /etc/*release`
+> 上面的命令将会显示本机的操作系统和位数信息,请确保您的计算机和本教程的要求一致。
+
+
+其次,您的计算机需要满足以下要求:
+
+* Python2.7.x (devel)
+
+ > CentOS6需要编译Python2.7成[共享库](#FAQ)。
+
+
+* Pip >= 9.0.1
+
+ > 您的CentOS上可能已经安装pip请使用pip -V来确认我们建议使用pip 9.0.1或更高版本来安装。
+
+ 更新yum的源: `yum update` 并安装拓展源以安装pip: `yum install -y epel-release`
+
+ 使用以下命令安装或升级Python和pip到需要的版本: `sudo yum install python-devel python-pip`
+ > 即使您的环境中已经有`Python2.7`也需要安装`python devel`。
+
+下面将说明如何安装PaddlePaddle:
+
+1. 使用pip install来安装PaddlePaddle:
+
+ * 对于需要**CPU版本PaddlePaddle**的用户:`pip install paddlepaddle`
+
+
+ * 对于需要**GPU版本PaddlePaddle**的用户: `pip install paddlepaddle-gpu`
+ > 1. 为防止出现nccl.h找不到的问题请首先按照NVIDIA[官方网站](https://developer.nvidia.com/nccl/nccl-download)的指示正确安装nccl2
+ > 2. 如果您不规定pypi包版本号,我们默认为您提供支持Cuda 8/cuDNN v7的PaddlePaddle版本。
+
+ 对于出现`Cannot uninstall 'six'.`问题的用户,可是由于您的系统中已有的Python安装问题造 成的,请使用`pip install paddlepaddle --ignore-installed six`(CPU)或`pip install paddlepaddle-gpu --ignore-installed six`(GPU)解决。
+
+ * 对于有**其他要求**的用户:`pip install paddlepaddle==[版本号]`
+ > `版本号`参见[安装包列表](#whls)或者您如果需要获取并安装**最新的PaddlePaddle开发分支**,可以从我们的[CI系统](https://paddleci.ngrok.io/project.html?projectId=Manylinux1&tab=projectOverview) 中下载最新的whl安装包和c-api开发包并安装。如需登录,请点击“Log in as guest”。
+
+
+
+
+现在您已经完成通过`pip install` 来安装的PaddlePaddle的过程。
+
+
+
+##### ***验证安装***
+安装完成后您可以使用:`python` 进入Python解释器,然后使用`import paddle.fluid` 验证是否安装成功。
+
+
+##### ***如何卸载PaddlePaddle***
+请使用以下命令卸载PaddlePaddle:
+
+* ***CPU版本的PaddlePaddle***: `pip uninstall PaddlePaddle`
+
+* ***GPU版本的PaddlePaddle***: `pip uninstall PaddlePaddle-gpu`
+
+
+
+
+
+### **MacOS下安装PaddlePaddle**
+
+本说明将介绍如何在*64位台式机或笔记本电脑*以及MacOS系统下安装PaddlePaddle,我们支持的MacOS系统需满足以下要求。
+
+请注意:在其他系统上的尝试可能会导致安装失败。
+
+* *MacOS 10.12/10.13*
+
+#### 确定要安装的PaddlePaddle版本
+
+* 仅支持CPU的PaddlePaddle。
+
+
+
+#### 选择如何安装PaddlePaddle
+在MacOS的系统下我们提供3种安装方式:
+
+* Docker安装(不支持GPU版本)
+* Docker源码编译安装(不支持GPU版本)
+
+
+我们更加推荐**使用Docker进行安装**,因为我们在把工具和配置都安装在一个 Docker image 里,这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。
+
+
+
+
+
+
+##### ***使用Docker进行安装***
+
+
+
+为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/)。
+> 请注意,在MacOS系统下登陆docker需要使用您的dockerID进行登录,否则将出现`Authenticate Failed`错误。
+
+如果已经**正确安装Docker**,即可以开始**使用Docker安装PaddlePaddle**
+
+1. 使用以下指令拉取我们为您预安装好PaddlePaddle的镜像:
+
+
+ * 对于需要**CPU版本的PaddlePaddle**的用户请使用以下指令拉取我们为您预安装好*PaddlePaddle For CPU*的镜像:
+
+ `docker pull hub.baidubce.com/paddlepaddle/paddle:0.15.0`
+
+
+ * 您也可以通过以下指令拉取任意的我们提供的Docker镜像:
+
+ `docker pull hub.baidubce.com/paddlepaddle/paddle:[tag]`
+ > (请把[tag]替换为[镜像表](#dockers)中的内容)
+
+2. 使用以下指令用已经拉取的镜像构建并进入Docker容器:
+
+ `docker run --name [Name of container] -it -v $PWD:/paddle
+##### ***验证安装***
+安装完成后您可以使用:`python` 进入python解释器,然后使用`import paddle.fluid` 验证是否安装成功。
+
+
+##### ***如何卸载PaddlePaddle***
+请使用以下命令卸载PaddlePaddle:
+
+* ***CPU版本的PaddlePaddle***: `pip uninstall PaddlePaddle`
+
+
+
+
+
+### **Windows下安装PaddlePaddle**
+
+本说明将介绍如何在*64位台式机或笔记本电脑*以及Windows系统下安装PaddlePaddle,我们支持的Windows系统需满足以下要求。
+
+请注意:在其他系统上的尝试可能会导致安装失败。
+
+* *Windows 7/8 and Windows 10 专业版/企业版*
+
+#### 确定要安装的PaddlePaddle版本
+
+* Windows下我们目前仅提供支持CPU的PaddlePaddle。
+
+
+#### 选择如何安装PaddlePaddle
+在Windows系统下请使用我们为您提供的[一键安装包](http://paddle-windows.bj.bcebos.com/PaddlePaddle-windows.zip)进行安装
+
+> 我们提供的一键安装包将基于Docker为您进行便捷的安装流程
+
+
+我们之所以使用**基于Docker的安装方式**,是因为我们在把工具和配置都安装在一个 Docker image 里,这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。
+
+
+
+
+
+
+
+
+
+##### ***验证安装***
+安装完成后您可以使用:`python` 进入python解释器,然后使用`import paddle.fluid` 验证是否安装成功。
+
+
+##### ***如何卸载PaddlePaddle***
+请使用以下命令卸载PaddlePaddle:
+
+* ***CPU版本的PaddlePaddle***: `pip uninstall PaddlePaddle`
+
+
+
+
+
+
+
+## **从源码编译PaddlePaddle**
+我们也为您提供了从源码编译的方式,但不推荐您使用这种方式,这是因为您的本机环境多种多样,在编译源码时易出现复杂的本说明中覆盖以外问题而造成安装失败。
+
+***
+### **Ubuntu下从源码编译PaddlePaddle**
+
+本说明将介绍如何在*64位台式机或笔记本电脑*以及Ubuntu系统下编译PaddlePaddle,我们支持的Ubuntu系统需满足以下要求:
+
+* Ubuntu 14.04/16.04/18.04(这涉及到相关工具是否能被正常安装)
+
+#### 确定要编译的PaddlePaddle版本
+* **仅支持CPU的PaddlePaddle**,如果您的系统没有 NVIDIA® GPU,则必须安装此版本。而此版本较GPU版本更加容易安
+因此即使您的计算机上拥有GPU我们也推荐您先安装CPU版本的PaddlePaddle来检测您本地的环境是否适合。
+
+* **支持GPU的PaddlePaddle**,为了使得PaddlePaddle程序运行的更加迅速,我们通常使用GPU对PaddlePaddle程序进行加速,但安装GPU版本的PaddlePaddle需要先拥有满足以下条件的NVIDIA® GPU(具体安装流程和配置请务必参见NVIDIA官方文档:[For CUDA](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/),[For cuDNN](https://docs.nvidia.com/deeplearning/sdk/cudnn-install/))
+ * *CUDA 工具包9.0配合cuDNN v7*
+ * *CUDA 工具包8.0配合cuDNN v7*
+ * *GPU运算能力超过1.0的硬件设备*
+
+#### 选择如何编译PaddlePaddle
+在Ubuntu的系统下我们提供2种编译方式:
+
+* Docker源码编译
+* 直接本机源码编译
+
+我们更加推荐**使用Docker进行编译**,因为我们在把工具和配置都安装在一个 Docker image 里。这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。有人用虚拟机来类比 Docker。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。
+
+
+
+我们也提供了可以从**本机直接源码编译**的方法,但是由于在本机上的情况更加复杂,我们只对特定系统提供了支持。
+
+
+
+
+##### ***使用Docker进行编译***
+为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/)
+
+
+> 请注意,要安装和使用支持 GPU 的PaddlePaddle版本,您必须先安装[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)
+
+
+
+当您已经**正确安装Docker**后你就可以开始**使用Docker编译PaddlePaddle**:
+
+1. 请首先选择您希望储存PaddlePaddle的路径,然后在该路径下使用以下命令将PaddlePaddle的源码从github克隆到本地当前目录下名为Paddle的文件夹中:
+
+ `git clone https://github.com/PaddlePaddle/Paddle.git`
+
+2. 进入Paddle目录下: `cd Paddle`
+
+3. 利用我们提供的镜像(使用该命令您可以不必提前下载镜像):
+
+ `docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash`
+ > --name paddle-test为您创建的Docker容器命名为paddle-test,-v $PWD:/paddle 将当前目录挂载到Docker容器中的/paddle目录下(Linux中PWD变量会展开为当前路径的[绝对路径](https://baike.baidu.com/item/绝对路径/481185)),-it 与宿主机保持交互状态,`hub.baidubce.com/paddlepaddle/paddle:latest-dev` 使用名为`hub.baidubce.com/paddlepaddle/paddle:latest-dev`的镜像创建Docker容器,/bin/bash 进入容器后启动/bin/bash命令。
+
+4. 进入Docker后进入paddle目录下:`cd paddle`
+
+5. 切换到较稳定release分支下进行编译:
+
+ `git checkout release/0.15.0`
+
+6. 创建并进入/paddle/build路径下:
+
+ `mkdir -p /paddle/build && cd /paddle/build`
+
+7. 使用以下命令安装相关依赖:
+
+ `pip install protobuf==3.1.0`
+ > 安装protobuf 3.1.0。
+
+ `apt install patchelf`
+ > 安装patchelf,PatchELF 是一个小而实用的程序,用于修改ELF可执行文件的动态链接器和RPATH。
+
+8. 执行cmake:
+
+ >具体编译选项含义请参见[编译选项表](#Compile)
+
+
+ * 对于需要编译**CPU版本PaddlePaddle**的用户:
+
+ `cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF`
+
+
+ * 对于需要编译**GPU版本PaddlePaddle**的用户:
+
+ `cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF`
+
+
+9. 执行编译:
+
+ `make -j$(nproc)`
+ > 使用多核编译
+
+10. 编译成功后进入`/paddle/build/python/dist`目录下找到生成的`.whl`包: `cd /paddle/build/python/dist`
+
+11. 在当前机器或目标机器安装编译好的`.whl`包:
+
+ `pip install (whl包的名字)`
+
+至此您已经成功使用Docker安装PaddlePaddle,您只需要进入Docker容器后运行PaddlePaddle即可,更多Docker使用请参见[Docker官方文档](https://docs.docker.com)。
+
+> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 安装后,在容器中编辑代码。
+
+恭喜您,现在您已经完成使用Docker编译PaddlePaddle的过程。
+
+
+
+
+##### ***本机编译***
+
+1. 检查您的计算机和操作系统是否符合我们支持的编译标准: `uname -m && cat /etc/*release`
+
+2. 更新`apt`的源: `apt update`
+
+2. 我们支持使用virtualenv进行编译安装,首先请使用以下命令创建一个名为`paddle-venv`的虚环境:
+
+ * 安装Python-dev: `apt install python-dev`
+
+ * 安装pip: `apt install python-pip` (请保证拥有9.0.1及以上版本的pip)
+
+ * 安装虚环境`virtualenv`以及`virtualenvwrapper`并创建名为`paddle-venv`的虚环境:
+
+ 1. `apt install virtualenv` 或 `pip install virtualenv`
+ 2. `apt install virtualenvwrapper` 或 `pip install virtualenvwrapper`
+ 3. 找到`virtualenvwrapper.sh`: `find / -name virtualenvwrapper.sh`
+ 4. 查看`virtualenvwrapper.sh`中的安装方法: `cat virtualenvwrapper.sh`
+ 5. 按照`virtualenvwrapper.sh`中的安装方法安装`virtualwrapper`
+ 6. 创建名为`paddle-venv`的虚环境: `mkvirtualenv paddle-venv`
+
+
+3. 进入虚环境:`workon paddle-venv`
+
+
+4. **执行编译前**请您确认在虚环境中安装有[编译依赖表](#third_party)中提到的相关依赖:
+
+ * 这里特别提供`patchELF`的安装方法,其他的依赖可以使用`apt install`或者`pip install` 后跟依赖名称和版本安装:
+
+ `apt install patchelf`
+ > 不能使用apt安装的用户请参见patchElF github[官方文档](https://gist.github.com/ruario/80fefd174b3395d34c14)
+
+5. 将PaddlePaddle的源码clone在当下目录下的Paddle的文件夹中,并进入Padde目录下:
+
+ - `git clone https://github.com/PaddlePaddle/Paddle.git`
+
+ - `cd Paddle`
+
+6. 切换到较稳定release分支下进行编译:
+
+ `git checkout release/0.15.0`
+
+7. 并且请创建并进入一个叫build的目录下:
+
+ `mkdir build && cd build`
+
+8. 执行cmake:
+
+ >具体编译选项含义请参见[编译选项表](#Compile)
+
+
+ * 对于需要编译**CPU版本PaddlePaddle**的用户:
+
+ `cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF`.
+
+
+ * 对于需要编译**GPU版本PaddlePaddle**的用户:(*仅支持ubuntu16.04/14.04*)
+
+ 1. 请确保您已经正确安装nccl2,或者按照以下指令安装nccl2(这里提供的是ubuntu 16.04,CUDA8,cuDNN7下nccl2的安装指令),更多版本的安装信息请参考NVIDIA[官方网站](https://developer.nvidia.com/nccl/nccl-download):
+ i. `wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb`
+ ii. `sudo apt-get install libnccl2=2.2.13-1+cuda8.0 libnccl-dev=2.2.13-1+cuda8.0`
+
+ 2. 如果您已经正确安装了`nccl2`,就可以开始cmake了:
+
+ `cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF`
+
+9. 使用以下命令来编译:
+
+ `make -j$(nproc)`
+
+10. 编译成功后进入`/paddle/build/python/dist`目录下找到生成的`.whl`包: `cd /paddle/build/python/dist`
+
+11. 在当前机器或目标机器安装编译好的`.whl`包:
+
+ `pip install (whl包的名字)`
+
+恭喜您,现在您已经完成使本机编译PaddlePaddle的过程了。
+
+
+##### ***验证安装***
+安装完成后您可以使用:`python` 进入Python解释器,然后使用`import paddle.fluid` 验证是否安装成功。
+
+
+##### ***如何卸载PaddlePaddle***
+请使用以下命令卸载PaddlePaddle:
+
+* ***CPU版本的PaddlePaddle***: `pip uninstall PaddlePaddle`
+
+* ***GPU版本的PaddlePaddle***: `pip uninstall PaddlePaddle-gpu`
+
+
+
+### **CentOS下从源码编译PaddlePaddle**
+
+本说明将介绍如何在*64位台式机或笔记本电脑*以及CentOS系统下编译PaddlePaddle,我们支持的Ubuntu系统需满足以下要求:
+
+* CentOS 7 / 6(这涉及到相关工具是否能被正常安装)
+
+#### 确定要编译的PaddlePaddle版本
+* **仅支持CPU的PaddlePaddle**。
+
+
+
+#### 选择如何编译PaddlePaddle
+我们在CentOS的系统下提供2种编译方式:
+
+* Docker源码编译(不支持CentOS 6 / 7的GPU版本)
+* 直接本机源码编译(不支持CentOS 6的全部版本以及CentOS 7的GPU版本)
+
+我们更加推荐**使用Docker进行编译**,因为我们在把工具和配置都安装在一个 Docker image 里。这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。
+
+
+
+同样对于那些出于各种原因不能够安装Docker的用户我们也提供了可以从**本机直接源码编译**的方法,但是由于在本机上的情况更加复杂,因此我们只支持特定的系统。
+
+
+
+
+
+##### ***使用Docker进行编译***
+
+为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/)。
+
+
+
+
+当您已经**正确安装Docker**后你就可以开始**使用Docker编译PaddlePaddle**啦:
+
+1. 请首先选择您希望储存PaddlePaddle的路径,然后在该路径下使用以下命令将PaddlePaddle的源码从github克隆到本地当前目录下名为Paddle的文件夹中:
+
+ `git clone https://github.com/PaddlePaddle/Paddle.git`
+
+2. 进入Paddle目录下: `cd Paddle`
+
+3. 利用我们提供的镜像(使用该命令您可以不必提前下载镜像):
+
+ `docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash`
+ > --name paddle-test为您创建的Docker容器命名为paddle-test,-v $PWD:/paddle 将当前目录挂载到Docker容器中的/paddle目录下(Linux中PWD变量会展开为当前路径的[绝对路径](https://baike.baidu.com/item/绝对路径/481185)),-it 与宿主机保持交互状态,`hub.baidubce.com/paddlepaddle/paddle` 使用名为`hub.baidubce.com/paddlepaddle/paddle:latest-dev`的镜像创建Docker容器,/bin/bash 进入容器后启动/bin/bash命令。
+
+4. 进入Docker后进入paddle目录下:`cd paddle`
+
+5. 切换到较稳定release分支下进行编译:
+
+ `git checkout release/0.15.0`
+
+6. 创建并进入/paddle/build路径下:
+
+ `mkdir -p /paddle/build && cd /paddle/build`
+
+7. 使用以下命令安装相关依赖:
+
+ `pip install protobuf==3.1.0`
+ > 安装protobuf 3.1.0。
+
+ `apt install patchelf`
+ > 安装patchelf,PatchELF 是一个小而实用的程序,用于修改ELF可执行文件的动态链接器和RPATH。
+
+8. 执行cmake:
+
+ >具体编译选项含义请参见[编译选项表](#Compile)
+
+
+ * 对于需要编译**CPU版本PaddlePaddle**的用户:
+
+
+ `cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF`
+
+
+ >> 我们目前不支持CentOS下GPU版本PaddlePaddle的编译
+
+9. 执行编译:
+
+ `make -j$(nproc)`
+ > 使用多核编译
+
+10. 编译成功后进入`/paddle/build/python/dist`目录下找到生成的`.whl`包: `cd /paddle/build/python/dist`
+
+11. 在当前机器或目标机器安装编译好的`.whl`包:
+
+ `pip install (whl包的名字)`
+
+至此您已经成功使用Docker安装PaddlePaddle,您只需要进入Docker容器后运行PaddlePaddle即可,更多Docker使用请参见[Docker官方文档](https://docs.docker.com)。
+
+> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 安装后,在容器中编辑代码。
+
+恭喜您,现在您已经完成使用Docker编译PaddlePaddle的过程。
+
+
+
+
+
+
+
+
+
+##### ***本机编译***
+
+1. 检查您的计算机和操作系统是否符合我们支持的编译标准: `uname -m && cat /etc/*release`
+
+2. 更新`yum`的源: `yum update`, 并添加必要的yum源:`yum install -y epel-release`
+
+3. 安装必要的工具`bzip2`以及`make`: `yum install -y bzip2` , `yum install -y make`
+
+2. 我们支持使用virtualenv进行编译安装,首先请使用以下命令创建一个名为`paddle-venv`的虚环境:
+
+ * 安装Python-dev: `yum install python-devel`
+
+ * 安装pip: `yum install python-pip` (请保证拥有9.0.1及以上的pip版本)
+
+ * 安装虚环境`virtualenv`以及`virtualenvwrapper`并创建名为`paddle-venv`的虚环境:
+
+ 1. `pip install virtualenv` 或 `pip install virtualenv`
+ 2. `pip install virtualenvwrapper` 或 `pip install virtualenvwrapper`
+ 3. 找到`virtualenvwrapper.sh`: `find / -name virtualenvwrapper.sh`
+ 4. 查看`virtualenvwrapper.sh`中的安装方法: `cat vitualenvwrapper.sh`
+ 5. 安装`virtualwrapper`
+ 6. 创建名为`paddle-venv`的虚环境: `mkvirtualenv paddle-venv`
+
+
+3. 进入虚环境:`workon paddle-venv`
+
+
+4. **执行编译前**请您确认在虚环境中安装有[编译依赖表](#third_party)中提到的相关依赖:
+
+ * 这里特别提供`patchELF`的安装方法,其他的依赖可以使用`yum install`或者`pip install` 后跟依赖名称和版本安装:
+
+ `yum install patchelf`
+ > 不能使用apt安装的用户请参见patchElF github[官方文档](https://gist.github.com/ruario/80fefd174b3395d34c14)
+
+5. 将PaddlePaddle的源码clone在当下目录下的Paddle的文件夹中,并进入Padde目录下:
+
+ - `git clone https://github.com/PaddlePaddle/Paddle.git`
+
+ - `cd Paddle`
+
+6. 切换到较稳定release分支下进行编译:
+
+ `git checkout release/0.15.0`
+
+7. 并且请创建并进入一个叫build的目录下:
+
+ `mkdir build && cd build`
+
+8. 执行cmake:
+
+ >具体编译选项含义请参见[编译选项表](#Compile)
+
+
+ * 对于需要编译**CPU版本PaddlePaddle**的用户:
+
+ `cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF`.
+
+
+
+
+9. 使用以下命令来编译:
+
+ `make -j$(nproc)`
+
+10. 编译成功后进入`/paddle/build/python/dist`目录下找到生成的`.whl`包: `cd /paddle/build/python/dist`
+
+11. 在当前机器或目标机器安装编译好的`.whl`包:
+
+ `pip install (whl包的名字)`
+
+恭喜您,现在您已经完成使本机编译PaddlePaddle的过程了。
+
+
+
+
+##### ***验证安装***
+安装完成后您可以使用:`python` 进入Python解释器,然后使用`import paddle.fluid` 验证是否安装成功。
+
+
+##### ***如何卸载PaddlePaddle***
+请使用以下命令卸载PaddlePaddle:
+
+* ***CPU版本的PaddlePaddle***: `pip uninstall PaddlePaddle`
+
+
+
+
+
+### **MacOS下从源码编译PaddlePaddle**
+
+本说明将介绍如何在*64位台式机或笔记本电脑*以及MacOS系统下编译PaddlePaddle,我们支持的MacOS系统需满足以下要求:
+
+* MacOS 10.12/10.13(这涉及到相关工具是否能被正常安装)
+
+#### 确定要编译的PaddlePaddle版本
+* **仅支持CPU的PaddlePaddle**。
+
+
+
+#### 选择如何编译PaddlePaddle
+在MacOS 10.12/10.13的系统下我们提供1种编译方式:
+
+
+* Docker源码编译
+
+
+
+
+
+我们更加推荐**使用Docker进行编译**,因为我们在把工具和配置都安装在一个 Docker image 里。这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。
+
+
+
+
+
+
+
+
+
+
+
+##### ***使用Docker进行编译***
+
+为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/)。
+> 请注意,在MacOS系统下登陆docker需要使用您的dockerID进行登录,否则将出现`Authenticate Failed`错误。
+
+
+当您已经**正确安装Docker**后你就可以开始**使用Docker编译PaddlePaddle**啦:
+
+1. 进入Mac的终端
+
+2. 请选择您希望储存PaddlePaddle的路径,然后在该路径下使用以下命令将PaddlePaddle的源码从github克隆到本地当前目录下名为Paddle的文件夹中:
+
+ `git clone https://github.com/PaddlePaddle/Paddle.git`
+
+3. 进入Paddle目录下: `cd Paddle`
+
+4. 利用我们提供的镜像(使用该命令您可以不必提前下载镜像):
+
+ `docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash`
+ > --name paddle-test为您创建的Docker容器命名为paddle-test,-v $PWD:/paddle 将当前目录挂载到Docker容器中的/paddle目录下(Linux中PWD变量会展开为当前路径的[绝对路径](https://baike.baidu.com/item/绝对路径/481185)),-it 与宿主机保持交互状态,`hub.baidubce.com/paddlepaddle/paddle:latest-dev` 使用名为`hub.baidubce.com/paddlepaddle/paddle:latest-dev`的镜像创建Docker容器,/bin/bash 进入容器后启动/bin/bash命令。
+
+5. 进入Docker后进入paddle目录下:`cd paddle`
+
+7. 切换到较稳定release分支下进行编译:
+
+ `git checkout release/0.15.0`
+
+8. 创建并进入/paddle/build路径下:
+
+ `mkdir -p /paddle/build && cd /paddle/build`
+
+9. 使用以下命令安装相关依赖:
+
+ `pip install protobuf==3.1.0`
+ > 安装protobuf 3.1.0。
+
+ `apt install patchelf`
+ > 安装patchelf,PatchELF 是一个小而实用的程序,用于修改ELF可执行文件的动态链接器和RPATH。
+
+10. 执行cmake:
+
+ >具体编译选项含义请参见[编译选项表](#Compile)
+
+
+ * 对于需要编译**CPU版本PaddlePaddle**的用户:
+
+ `cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF`
+ > 我们目前不支持CentOS下GPU版本PaddlePaddle的编译
+
+
+
+
+11. 执行编译:
+
+ `make -j$(nproc)`
+ > 使用多核编译
+
+12. 编译成功后进入`/paddle/build/python/dist`目录下找到生成的`.whl`包: `cd /paddle/build/python/dist`
+
+13. 在当前机器或目标机器安装编译好的`.whl`包:
+
+ `pip install (whl包的名字)`
+
+至此您已经成功使用Docker安装PaddlePaddle,您只需要进入Docker容器后运行PaddlePaddle即可,更多Docker使用请参见[Docker官方文档](https://docs.docker.com)。
+
+> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 安装后,在容器中编辑代码。
+
+恭喜您,现在您已经完成使用Docker编译PaddlePaddle的过程。
+
+
+
+
+
+##### ***验证安装***
+安装完成后您可以使用:`python` 进入Python解释器,然后使用`import paddle.fluid` 验证是否安装成功。
+
+
+##### ***如何卸载PaddlePaddle***
+请使用以下命令卸载PaddlePaddle:
+
+* ***CPU版本的PaddlePaddle***: `pip uninstall PaddlePaddle`
+
+
+
+
+
+
+
+## **FAQ**
+- CentOS6下如何编译python2.7为共享库?
+
+ > 使用以下指令:
+
+ ./configure --prefix=/usr/local/python2.7 --enable-shared
+ make && make install
+
+
+
+- Ubuntu18.04下libidn11找不到?
+
+ > 使用以下指令:
+
+ apt install libidn11
+
+- Ubuntu编译时出现大量的代码段不能识别?
+
+ > 这可能是由于cmake版本不匹配造成的,请在gcc的安装目录下使用以下指令:
+
+ apt install gcc-4.8 g++-4.8
+ cp gcc gcc.bak
+ cp g++ g++.bak
+ rm gcc
+ rm g++
+ ln -s gcc-4.8 gcc
+ ln -s g++-4.8 g++
+
+
+
+
+
+
+- 遇到paddlepaddle*.whl is not a supported wheel on this platform?
+ > 出现这个问题的主要原因是,没有找到和当前系统匹配的paddlepaddle安装包。 请检查Python版本是否为2.7系列。另外最新的pip官方源中的安装包默认是manylinux1标准, 需要使用最新的pip (>9.0.0) 才可以安装。您可以执行以下指令更新您的pip:
+
+ pip install --upgrade pip
+
+ > 或者:
+
+ python -c "import pip; print(pip.pep425tags.get_supported())"
+
+ > 如果系统支持的是 linux_x86_64 而安装包是 manylinux1_x86_64 ,需要升级pip版本到最新; 如果系统支持 manylinux1_x86_64 而安装包 (本地)是 linux_x86_64, 可以重命名这个whl包为 manylinux1_x86_64 再安装。
+
+- 使用Docker编译出现问题?
+
+ > 请参照GitHub上[Issue12079](https://github.com/PaddlePaddle/Paddle/issues/12079)
+
+- 什么是 Docker?
+
+ 如果您没有听说 Docker,可以把它想象为一个类似 virtualenv 的系统,但是虚拟的不仅仅是 Python 的运行环境。
+
+- Docker 还是虚拟机?
+
+ 有人用虚拟机来类比 Docker。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。
+
+- 为什么用 Docker?
+
+ 把工具和配置都安装在一个 Docker image 里可以标准化编译环境。这样如果遇到问题,其他人可以复现问题以便帮助。
+
+ 另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。
+
+- 可以选择不用Docker吗?
+
+ 当然可以。大家可以用把开发工具安装进入 Docker image 一样的方式,把这些工具安装到本机。这篇文档介绍基于 Docker 的开发流程,是因为这个流程比其他方法都更简便。
+
+- 学习 Docker 有多难?
+
+ 理解 Docker 并不难,大概花十分钟看一下[这篇文章](https://zhuanlan.zhihu.com/p/19902938)。
+ 这可以帮您省掉花一小时安装和配置各种开发工具,以及切换机器时需要新安装的辛苦。别忘了 PaddlePaddle 更新可能导致需要新的开发工具。更别提简化问题复现带来的好处了。
+
+- 可以用 IDE 吗?
+
+ 当然可以,因为源码就在本机上。IDE 默认调用 make 之类的程序来编译源码,我们只需要配置 IDE 来调用 Docker 命令编译源码即可。
+
+ 很多 PaddlePaddle 开发者使用 Emacs。他们在自己的 `~/.emacs` 配置文件里加两行
+
+ (global-set-key "\C-cc" 'compile)
+ (setq compile-command "docker run --rm -it -v $(git rev-parse --show-toplevel):/paddle paddle:dev")
+
+ 就可以按 `Ctrl-C` 和 `c` 键来启动编译了。
+
+- 可以并行编译吗?
+
+ 是的。我们的 Docker image 运行一个 [Bash 脚本](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/paddle/scripts/paddle_build.sh)。这个脚本调用`make -j$(nproc)` 来启动和 CPU 核一样多的进程来并行编译。
+
+- Docker 需要 sudo?
+
+ 如果用自己的电脑开发,自然也就有管理员权限(sudo)了。如果用公用的电脑开发,需要请管理员安装和配置好 Docker。此外,PaddlePaddle 项目在努力开始支持其他不需要 sudo 的集装箱技术,比如 rkt。
+
+- 在 Windows/MacOS 上编译很慢?
+
+ Docker 在 Windows 和 MacOS 都可以运行。不过实际上是运行在一个 Linux 虚拟机上。可能需要注意给这个虚拟机多分配一些 CPU 和内存,以保证编译高效。具体做法请参考[issue627](https://github.com/PaddlePaddle/Paddle/issues/627)。
+
+- 磁盘不够?
+
+ 本文中的例子里, `docker run` 命令里都用了 `--rm` 参数,这样保证运行结束之后的 containers 不会保留在磁盘上。可以用 `docker ps -a` 命令看到停止后但是没有删除的 containers。 `docker build` 命令有时候会产生一些中间结果,是没有名字的 images,也会占用磁盘。可以参考 [这篇文章](https://zaiste.net/posts/removing_docker_containers) 来清理这些内容。
+
+- 在DockerToolbox下使用book时`http://localhost:8888/`无法打开?
+
+ 需要将localhost替换成虚拟机ip,一般需要在浏览器中输入:`http://192.168.99.100:8888/`
+
+- pip install gpu版本的PaddlePaddle后运行出现SegmentFault如下:
+
+ @ 0x7f6c8d214436 paddle::platform::EnforceNotMet::EnforceNotMet()
+
+ @ 0x7f6c8dfed666 paddle::platform::GetCUDADeviceCount()
+
+ @ 0x7f6c8d2b93b6 paddle::framework::InitDevices()
+
+ 出现这个问题原因主要是由于您的显卡驱动低于对应CUDA版本的要求,请保证您的显卡驱动支持所使用的CUDA版本
+
+
+
+## 附录
+
+### **编译依赖表**
+
+
+
+
+
+
+
+
+ 依赖包名称
+ 版本
+ 说明
+ 安装命令
+
+
+ CMake
+ 3.4
+
+
+
+
+ GCC
+ 4.8 / 5.4
+ 推荐使用CentOS的devtools2
+
+
+
+ Python
+ 2.7.x.
+ 依赖libpython2.7.so
+
+ apt install python-dev
或 yum install python-devel
+
+ SWIG
+ 最低 2.0
+
+
+ apt install swig
或 yum install swig
+
+ wget
+ any
+
+
+ apt install wget
或 yum install wget
+
+ openblas
+ any
+
+
+
+
+ pip
+ 最低9.0.1
+
+
+ apt install python-pip
或 yum install Python-pip
+
+ numpy
+ >=1.12.0
+
+
+ pip install numpy==1.14.0
+
+ protobuf
+ 3.1.0
+
+
+ pip install protobuf==3.1.0
+
+ wheel
+ any
+
+
+ pip install wheel
+
+ patchELF
+ any
+
+
+ apt install patchelf
或参见github patchELF 官方文档
+
+
+ go
+ >=1.8
+ 可选
+
+
+
选项 | +说明 | +默认值 | +
---|---|---|
WITH_GPU | +是否支持GPU | +ON | +
WITH_C_API | +是否仅编译CAPI | +OFF | +
WITH_DOUBLE | +是否使用双精度浮点数 | +OFF | +
WITH_DSO | +是否运行时动态加载CUDA动态库,而非静态加载CUDA动态库 | +ON | +
WITH_AVX | +是否编译含有AVX指令集的PaddlePaddle二进制文件 | +ON | +
WITH_PYTHON | +是否内嵌PYTHON解释器 | +ON | +
WITH_STYLE_CHECK | +是否编译时进行代码风格检查 | +ON | +
WITH_TESTING | +是否开启单元测试 | +OFF | +
WITH_DOC | +是否编译中英文文档 | +OFF | +
WITH_SWIG_PY | +是否编译PYTHON的SWIG接口,该接口可用于预测和定制化训练 | +Auto | +
WITH_GOLANG | +是否编译go语言的可容错parameter server | +OFF | +
WITH_MKL | +是否使用MKL数学库,如果为否则是用OpenBLAS | +ON | +
+
版本号 | +版本说明 | +
---|---|
paddlepaddle-gpu==0.15.0 | +使用CUDA 9.0和cuDNN 7编译的0.15.0版本 | +
paddlepaddle-gpu==0.15.0.post87 | +使用CUDA 8.0和cuDNN 7编译的0.15.0版本 | +
paddlepaddle-gpu==0.15.0.post85 | +使用CUDA 8.0和cuDNN 5编译的0.15.0版本 | +
paddlepaddle-gpu==0.13.0 | +使用CUDA 9.0和cuDNN 7编译的0.13.0版本 | +
paddlepaddle-gpu==0.12.0 | +使用CUDA 8.0和cuDNN 5编译的0.12.0版本 | +
paddlepaddle-gpu==0.11.0.post87 | +使用CUDA 8.0和cuDNN 7编译的0.11.0版本 | +
paddlepaddle-gpu==0.11.0.post85 | +使用CUDA 8.0和cuDNN 5编译的0.11.0版本 | +
paddlepaddle-gpu==0.11.0 | +使用CUDA 7.5和cuDNN 5编译的0.11.0版本 | +
+
版本号 | +版本说明 | +
---|---|
hub.baidubce.com/paddlepaddle/paddle:latest | +最新的预先安装好PaddlePaddle CPU版本的镜像 | +
hub.baidubce.com/paddlepaddle/paddle:latest-dev | +最新的PaddlePaddle的开发环境 | +
hub.baidubce.com/paddlepaddle/paddle:[Version] | +将version换成具体的版本,历史版本的预安装好PaddlePaddle的镜像 | +
hub.baidubce.com/paddlepaddle/paddle:latest-gpu | +最新的预先安装好PaddlePaddle GPU版本的镜像 | +
+
版本说明 | +cp27-cp27mu | +cp27-cp27m | +
---|---|---|
cpu_avx_mkl | +paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl | +paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl | +
cpu_avx_mkl | +paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl | +paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl | +
cpu_noavx_openblas | +paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl | +paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl | +
cuda8.0_cudnn5_avx_mkl | +paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl | +paddlepaddle_gpu-latest-cp27-cp27m-linux_x86_64.whl | +
cuda8.0_cudnn7_avx_mkl | +paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl | +paddlepaddle_gpu-latest-cp27-cp27m-linux_x86_64.whl | +
gar_C-KtEx$cF3e$lA>% zBlQc-95tck2eo3LwkAvyp;XJN`*f+kV*-f?U=2ms_MFsGK-5I?t_6s?UJGRZhhlUl zW$B|>bZiv-rR`y?wPn?ei|RtPie%rNy#<=97hFch+PA2HfwypKsmZl@_?#8bnwIG(y2Y~sr?Hh`$p8mrkw?Fcjy5Hm?)=+2tCCx)SeLaJ-U`xCLKT}T+mckn z9?AU2FJkP)Y%?P@FTHheDM&9V7=5>@4Pn1MFQ9Ed(8*f#s9rhmAL3J`s#`&tx5K@i zqv#B=wbswu(9r7*hc@zqzQNnv!-fU zwO<;X#Qe=Lvc@{tKE1|JogCp`AW~J;9;TbwGFAyw6V5#dUO+MUdL-B{?T@o1&b5DP zR3SjD%eF{2Vqm0}1Oz3KB^2x;bBkRspPAqTh#E40GGY`E6SB?o5GynFU92mJ&E ~Q!@95$<)c(k$=+_uIb5a-i@i3E#*tR rJ}mS5oQi19=~+3y)H42fangzs1TW ztpf?QrQs6uom4?UiA9ebbNN~$?i3T7kGk=-bD3KB%yY{n+I% D^nM(Fmjv~3PI+6b$_TD-u&SrZT4Fp060RjXFK?6a81_*;&NYJ3c z-F I %|lv@R{taP6auuXo6dItR`mxwW|11D6VH zm7^UNJ_1(Dh?GkmBJuYL1ap%3iIcN)4(T8}p IETvIW*#PcgWADzULhQg<%lHv1pKSCEW%oJp{2Iq9Ox~`kmUr_hcO$k{ z2QVW*PA?y|^wbi|9}oK3TT8(1&99(oEbkJbM4C8zym_FLR#YGcB1}JZ-BHrC>_mJ1 zvEHD$9E!M!WLdwn*yzuoM7X>DWWm?!Vn!L`#wtUzdVaE+*n&p0IYhfL9Y`o}t0|xo zQMTu}kE#ZfhxC6xd*X|3)loD9gsD0vSUt}l3D+chf7CG7RLz}z{xaU~baxLq3&8KS z>ff3FFYp_2L}crAu*$VRV1r0-O`VY96f3W&7a#maAjHefx_e_epRqIkjhl!_u%aGe z?DaaxSikc So zZS0KOI1KM3O{m#-Q!)qu{=WB`(vQK1I5VJiOTyi{i9Bxep;}-1_lmj~xcFx;FDmJ` z%J<~aZ%uh`BGfcmsQMSH^85YRbBaZAydM)de=hzaZu! ^P-hv@hlvrr4p{CAH3Xe^CzneSRvN&o%DNGNFt75{gL|CQpO#q)o`S_H}3dnk)h zJaax76$|@^b)_gF?q#V{>!bb=2EtN$6m?@lH2WM3szeY*r?@W3`nwjuZ|g-uQMmVZ zlK%f7h#pgfMj=d9+1>Kr1Qh~hauF=2!dA)Ce_CJ}f_&`x9uo8)rh4C)o;3O|*7`R~ zsf+*#wZqasf%`pbWgr@hXSTEb$A~2n2=fPz{zeLKMMUFV2i1R|`vYV(1QBc4+5I24 z`a|y 7=iMJaf8Jro1YtUh{CAcEMKM)~;+%m+9F|Cw@BN^1i}j6HotRQ{oS?5i zgs)W iDUk7IUw}Lin5Q~NMe8wS;D!;hcse6WR@v+Q(AXjS@Sy uem^bVoT{ zC7vqp@Ia@UV8Qci>GsUbZ_F+s^Ki$ZE|C4@sVPM5X0}pUYj0?wk#F$=N%@62Wv0vx zv3Ye}!~Egid_NX<4di=xqF4mgI`(goP@E%XR?A7 bhKc!8EPS(FELNtB$__9~4S=gqgh4LY))!O2+W0{IuAg9LZizamf2S}{ zKS??k-`afAP{e7M-IHgi4>vAxV$P#B5!}eT09~ zatXReXhy7V^vQ(L2#kyU}(z+an=n^jG%;!04DNH zW)8M2Zq{L?L(yQcbAPMf sy1 zYbdz0ax)CWY~*q&NnKM4%%0xtCl<{aTX_9j11U@h)1P@?8@QiNq2@*j9y;ZyTI|Lg z%so*ken{-!HNT~uTrpQ{^qVO}9Ai|rJ;#l=m2k0)E%fX$f61FMWnDMC{%(>l$854@ z>$osYKeMo*x{W}ab9y52LeUIEc?tz=SSEc~O56F;Q|a!_tCXBsU5j>(#~PC}e$_Xg zr>Z79cM8)N?_)8y7vz#ZmmjIeSMiYLd>wY_EzX(=g&y*)Yr#eGzoULSoZ9pL2pFES zJb_tLvBc^|6q6ZH^XBjRt8^sp{R{(KO&YNd=jsj1f%rcD2Dl@{)wVF}C9BXokq~~P zN|s60!K{O3^L)+P9#L$8g=qgL8&r<~0HzrQV1C2kNG@Qd!H&V!gXMX{bC{B)k%^8O zUhpA9!y;VjV&ky;Hm0_g|55ZKkJnFJpR4zlt^o|TRv}NKhB-gk5W2PU2Q)}8je`6Z z?xNSu6!~OI>bCQ~(&$c{L5@>j2GqUOSo@OpS*9Gfa@Wp#Ds8Kjz3Np20f2jBnd;H> z*Gwr(LqTwb5@@BdsW%eLbPKs_n=Ue&&?I&|d&VGW<^^<|EUml>Dl_8zQHF#@*vW^M z$UhyeNm^VPu+j0?*5W;=Q#9X`bH&!xJ&i~3!}a}*Y@Q_r6>(;3lEFOacgykG^to-= zbZJ0hPn1;R&TG 7h0Kk |7q*`zIE)BTV$jnV(w`Ov?33(a%qa zbg4v03wIWv#+Ai&VR_m`m2n&SmJ`cshrDO02~V)dbZ_PtFj3+3@h+F#fM58<{eE@4 zH{IkGnVJ6aek+*SpQ=XBI=d5B?X+ zCAh7n{YJXat)G~Ca>T9jBqYIn=lD>;^OE~Z92!m#n&!y46f@n=>1WR^b1ULVslE&? z1_gfc58D90d2U$~vu#n>H k2`o z?J2inv!lEd79GBVMdaNW)*%&XjaAbI48+8om?XxTR;zTG@Wg!%KHEDcW~6;S(r+Z#G=)E 1l* E~X``x 4jA5yZO{q}UvcPI^6WimU@ Iq{z#qS3Yx-Xz!CvG&-?Yp{r$M$f3vQ0f^Ro}w_cr;noIFuqWYRY` zttKg^K$Gg4QwjZQwXxYfGbP}-7>ka|F0#jn<7aCm#Ga$3#QbJq69BBJd@Yo8MN*EQ zuKAL2nq=I4w#Ere>!@BpX* $|{KTUwrPQwjj#(Bicbqq3jxOt_ zmMn0asZ_O1emL{|&b)mEpi$pZBd>^JfxG2#<9{E!BjBdY$1cjrf{sig$4evYZVT z?MHARvE{7jl-HIwDrh#&&jk=?wI!Op{p;QEr>cMrHPbIcW(o7{L8_H$rDujCwukar zSlH&ma|BjnO>5Zi#)~48amYUQp?*Nr)^&n)RTzay*E%-dG2E)E0Gn&x39#y1svQzd zuP{)%DeKZE;PuZFXt56Fg?ErB^%n(koJ&Sy6#vN)E)gZbdi?2KswfeZcxDqp+6)a= zvS~h9K9*>1o(rgPUcjOvk)2xLO$rb90)m+29539l@hFJn;>f^PNw&t@C@#rE?ERh= ztUpk*?nmrrt`J@ky^-A8{DQ$g)3q-WLfswXf9EiKRnN`5JVEH2i2&VY27I+k+d~>f zgrr|tXLo<`$ *j8oKHl ztaKWoYkQ)1cFb&~ZXU-k(^qQ`>3`EKp}a_No7JH*;x)y6_$NcBx`(&zgRP~O#s)M| zfW4z}-=*K|q)W%!c%Exey}6o*^!v5tSmj!-%hE{MxVg6(mNc_p%lTR`mv-WmE{7I{ zKW95PEWxAeJxOjf1%tar^9vRp^STz>Ji;6fd=y+h9W!31=RiE<7@wa>w13MXn+b3{ zjKaiw1ki!BF?0f~ww}6e?*;@V&g2836Dv&GI%93d4S!O+RW+}d!F&&$26yKRpkLtK zGE8eJ5~Y=K0{ U;X@?zJ+_PvVUs@4W_QL+Zxx^#%ONP6GR1UmSqCKeL1=gbj^&{ zs;fK>vQ4%D(!tV2F}(n3y9(ijAIa8tM@Z<$rZqCNYlmyOaqls?-28a=dzE3x&y(G? zLT;If1%?Qe2dafjgJGUbcR%&T=LL)a&HAZ9L@xyinxn}2hZ1*bJ|>W`53bhv9 X8?IAF z$Er%J`aSs)e+@Bv)fz`!6-lmxPgN2
^Z}7h zev>Qsk3@D0L1JZCcM<$H*?S7}nLHwqrF@?M$2{&E!x4D86<><_d*=5^>jwnS_U&<} z`9B+nHX()sH@5t zw`3ChL-dYftj`8FuWhkLYV(09`9L-|I)XAvpD}{nE%CR{qN-Ib JNBwFRaI9Q;iIheo#~-(GsE@07D4*FL`pkp(mE?Fv9H!}x2qF!SASG2PZDoGf?h z_our-^AoNfX)Rbg^S@-cc0VhFda^Cg=Rp#@)__eigqxjT;jxeY?Nbpa=& z!Vfnh`O<8zgs^*mPQe{ z-lWpFSfshSFumO%8>tMyxssj#F5W<`SSGF$nx=uH|yRT2CZFm zD)y|q_GmP{Ot)j?NzT(&x3l)G7*BYb_zy-d-X}S_A$AGsZZsY|_-#cL%m>vQRUJM- zvF(B;$;?m&)g0b&*}9iOK^oh;2KD>qMjmcz`)&L_MkelOLcID5NdUd+mDZ}vtJ4ZR z>>bkKNRxSWFZsN>)3uG&-`fD*HC}O&^9@C*S^6guH~Ou9ajG{19I )aZBnLnA@PN7Nf?gn8@P5{8xyT3|@ zP-%1o+?!R&__mr5JDLs)7Q?ZBD1K=aGCObIF+!<$fIqwjgO1tehV8i}U9QxHE%nDU zC>r@p{62tm`?8}8$dEkyvY;RQEXD83xsWL01PIvFNoBtRO$R=bG!GAJJcf$3#>hqv zIH;^fxb5nToy>H~aG9#`Hac+frkGgiFWevEIopFzVjE KB zR4u$utQreeACN>)9O5D~J$5&>R+)nA+}(}{RLQdNuC_F4s1`qL(man-vd*(dtEwj* zY3>k6iZ6y?Ij7B^hXNYTWNeP^_ES9KD4ufF^qdUS-b5GA)=>WpG-ysj B0VvRovBkRO(xja7eXK0glQ4Cms6ELL~P;hu+OS&yYZN6 zbuq|WND+xMa eOoO-%M#&Cf^#>_dBS>PZoDzZH3KV z_cB!@?>DO(u#9`^CUdP)%z~4B#ABOl(^IST$vIDeQd@&gJ9``F{00*mRkN#~uV$_4 z0Zb1~A)1*$Udp)#mS(gK&`gvvmL KmB9m`s7L%B36YU5bH{tA6OXp0+Am`2mMS9dj2kFWZvPS(5fx_o>-6;Wz69OL x$!w>c zU1gUXbRcAX1@x#LTbGWVvhjy9X>jb=F_6~`^etC*qH7$O1S0dQYqlXyX`4z@^qzmV zh_Bc<3c>dnW9AtnZH19ndw7hDC!uvTea5IswHO?$k5w5@Zvjm0mjH`aF1j%Upp19b znwUN1#lULv+PEMOyf}r+sOp>iRAUjBuxFw7wMo8Ipp2V{4Cb(*1D@MlfS Cg%$+UQC1j*ct4bE?CFAJ)2b%#n%{B5B$TR^bn{ zS4KN@Xm0ihEw$f}xpLJhFBd5HpFg{Bt6Hb_kOiz}-O=wSWWkkZg3stGabixYl{l49 z>*q_ LFN8NK$%b^=?+aJcX-I9{ARkf7UUXP?A+E%txi8 zvl$FMV*&}w+2+{5j-ZOb%F0 3+u+WoTg}bO$g6@lz)anavZEWe}(scl44i z3*$Yj>jG4u@;@nTxzU{h7FA^@6=MdMrugr0>8R^>rjq8ZcvNaM%>%O=-0)*mC6b>b z*b0|NZcxNUgLnXBvU;0%D6?is6N9Sa#i)SAoIv%qYT{?x!zCurhvMRVj3btl?zx(U znZi@$>sU4hv!BWIy}k}CmA?LG2}5o)mtjZr$i1in?)^#H=MD4c }scD7Aih1v-@E(cYh$;g>Ss#dpGXT3k%u%@GLjJ#pIG6680+Zn)G_SaH(v z9GWbc)o-?+YRMLvJD=S$qCUG!$MuVxKaAtw_2j#QHymT?fSs6{6+v<<@SrPuL9@F& zi-B?&Q+(wr&g|^;E-PG>*xh-V70w?|3f|2Agm*Wu)7UAqvv7TrvSi(yw0i1{Wqe*g zv?^)j-}!REkMOvG_ 2cB Ha$Az $W11yC2Eg zW=3co4|Czt{Xj(QQIjAEyzRSGE-?;H6!dUm+>qx~hV(qA3aRuJbKQ@Hq#mPqPoi#{ z?>bdC7@ogYJ3g$|L~{5T<#F5d&~i@K$%Hl%>TzUyHKY@_Am`FB1jK_2APNzYL(Ee5 z!udVG8j15a$|A3-=J@Fro$ngYfzom%h2 sW z8ZAN=N} 9CW$>k}Q=R1wm6n>MRMM=?qhVr>Q)9{Ku! znYBJ*Zg&xb+!>k#xz4&7Jw>_{HD$&syn>&dTb|{a?E2urX$sdy03prS#&2Em*@I}e zK?}|3Ty^`E! $i@u!>&V^T$4zjiBz8*?Dk0R(gyCw2vYF1nPEJh;7YQ zVbNIF=vknJ4`&T7o<6XgkX`}a^nV6!;eXK=7GrdG8N>g|A~V-^r)6f~pR{`?4zJnV zJ}%sBc|r{O&|sVjnkV5kk!-L@tkFB&b^#4-s{nhqZIyQ|@HK(nvd7H)3xdEiRhM6? zyq8(VEZsVgnx3KNvL1S?7n2U}=rMo6eB!u?SMmWKRf7c5 51FZZDP>W!&zc;b*SC!WP`;+DfOmuauRtz?POEF#E@JfmG931o_Dph z?_0ZyFgIKllZJL3>v#4syKfHIS*AVEU`9Ip=GJbRWdH(8lCk=cp}Y6ivu@|u!2a^$ z=@XNeMR#$u+GW2UomI7mEOd9(dX>QUtpO-GcGs4&Dp&9@(q{0r)2r#!yk8d|X-SRQ zZ?7wEW(Em7FPiw{Q3&op(gWHqJ6ic}#jg&YZX6Ee@1x9aatv}o ST-OH#20c2jZ(tlW-z`lMT>W$rPc5v>D-7*{w-x zaCt=PFx@&2h{rcVm~ | zrtNq)>iQr$gUOLIHEI}zZKT6}^;%4Qtb I%om{Ne4UeLO=KOIgcW63FuDHKCn)W6*YtHJ<}7o)V^z=((kVbZ z2*y_p($9N}O8imT6ZRsW&nOSm9QPfKRmAT8oQokmNdlzU;3t&UawR(jc@OTcv$4K9 z-CWtV7b7)vBX#y7J&jt~<;?DmSD3#M3bHsF57oArNM(5^a911=Tyn>A`m5^B`$}zp zOo8{NEqyQTf 1E}?xzLeE;~Mf8 zzww__rPRXOS21LI*&&Rj5yUZ8F4;>2!_gyzzcTLNJ|3{2Uka-2xmRn3XYe=PJ<_&{ z&(=Ah4 - 88K<~
cil<_U4rkA~^W*uk!Jsr>-a{}~*FrE5auW}jCxihpb+J;Qk@^+kXP)z@k{y*0hy{#KQL zBjQ$7^e%0M>4joExbqo gLw#(gLad@FS^!P^5HGm%> nunfI$PDKo^32m8c rnuh{ea} zm3Om6*Ee+#_x5gBL(WYcgFWT^8~b6P#Msaqk+ uRHD?;2${pdL5$8sthUh7h~yi!tr*&v{Ytgd zmD4u<;n1J?lUVex=LE8i<%As4xtml{TU+QWw_~CmvVN
|2pCe!{AbyELB&Zp*{Z9UC=bcp^cpeQ@w zG-aN?;b z6Y5aWHd4+uE*!(n^q$D6Z}ZX-)e=NY*E> 60rU}F{2aJQ4yWHh9PfK;71EVNgXCyezRzN3^t4B?ce(gQ)moS*^cA^1 zSfS5~XYdB9dk 9Ciyq1cT3X=|)&KJhXJ9BO+g+OtX1~)@Da{lT877BVal7=~R zi^AEje$kA$6FciW^&Y)Hs0x&P`{`_Y#GYroAy}v=M}?<|-2M?0vG)V&8bMSsAMk@V zvnB#!NyXQJxecc^wc~|V>U4Mg@am;D_5tgb5D>@WnrwV%#5^&UKNZ}Es-tV-&V(C! z730E2(!E ZaU=>KK}qOQB*&kaj>f9o z&V%D&2Y>Q+XfP`JO5zuxbHV5V+!-*pCb2l`I(G)$wmsuXl(ovTj2JqJ*U>F9c`T1c zv>u&uJ)@|2tF~Tjsz)O++4Fjfqw;9)GL^)m>@YBQgF;Z%zk$JJ+EvHGaLnaxc9P5b z0o#Do^p6 }gHwm(FdzZ-wXZN<3Cqni?&2zoO?%WLt65 zqE`oR`!>6ee)CtU4~ A60{J$ zLMi&<2o0EE3(@z^EQbnIZLJiO!%i4%7`ZQ8>`l=zonxJhQ};jEX$%-FKpyugv=X$b zYU*KBXL4H4R+}DuYxOkn+a{7A!?_&zs&3mQC4|hxm3Jpt&i>GeCInE8hb_jF7PWqY z|Aw?P#I*)P _^(wqT+z5w2bl@6^jrL=(NF}8F z>OoV1z_-(~wuo*@N}4pcXsfWOJjsX05kJz}`}qr`IVBPc;c2qud^~)ZgOp_M392k4 zWg8#M8_eGj={6;7@;kgR#*A8$r_5-AYK7z_iXHS?#h9Qkb0}SXh&Ak!RLZ_E#D@jp z;@ I<9w&$4j^ zqn{+RVfDpd-l#a~i8Xq#2`C;Npya(wh(w4)x&eDZt`TnizXp4|yWJ=n(2szvw#6 zOQkyGA*-yMD3tbohCL_!?13X%bw3%Y{;RS`XsT{W$0?YoVDk1e%1I?3Wo(ceax#%R z7c!fX7dDdrZDq8Fsrec>wP!dUK2zLa03Yn=CBx`;-SXmGsQ@MJt+VWuc4cQ+HHCT5 z7_Js>Wl-G`tMyGfy;Wo~_vr8|7*njoLyOBOysV|8?-3i7b9`X%I>vZ ?gw3rQs*W zg#^VCDGcZrS5upPM{3I0v?+c{{AXvLjJLPFUE$T$Aw#Vu3*-F d?z-N3YoX{fR(Os}&p1?Cb}1GPPxv(XQ*LG*??MJ=c23CC*_(zw zXFOy;&tIi$Jj(S_CI-8RWs6pY8#aBTr+t ga=X&S9Te4$MUT$4= z3pU5S*(BY}na`r z6I*+9LmvLUHCqa8GAw}gvTP|C9vl(S4PJ14K-hnjr>zp`1QpnA4Dw~ziZZO-VLcje z0+hbub+8QA`&^eKik*e31D5;3-8CM?GZ4>>Jn8fy_%oXRwOXZW>9o1R2oYo`xNYb# z9R1QH@PXoFr1~^=C(PVPe9E=n &XEzOYE)@C5j< z1XTH$)=^`zEj+(~B{HFhTz~{`vKVN6DSsG+v1M;8x~7Bs?GaMrs_?rb<0SO=y6sH_ zb2mCVy>IEitsy&KmkBtp;vO?JS4uOIM!AJWCrulP >7G1j+6F4y~y1cuK0elEKT8@Wal2kQl@x~bRbt)w1vX>}8 zzdOd}Yk4{9pwUUwG&En<73dpr;mCBARhoA@R>$n_A0~OmZ=D?_yv&y?y69s)-!l(! zV$|-KGoc}PRVs6f{;qG`EgqDzy+Ut^>0ntXyk9PRXxUe7o9$4d<5a9L&WM+vFVJqy z&_LXlJ9zi~DSpI{R6 A8=pe;ZyIVr%kHe^;Gr2Cv^Dx7*`YM8g z1 krP{8;An= z^r`S`JsCxy0H^4f0{8|%)xFk@oc>NZ$hh=2U9VYw!%blH{fI_5W7s!VBiPitLNQi@ zTd|zHqA1sVhe`+>CT3Ooihu}5`=ePc-Kc12 yvNC`8?HTl8jeLmXMS(DabBBUreny#cj6m~vFcWeG+x)I?KreI`|EXK zXW^wIXj51q^@p=*=WA>_4;kfnyF1;T&53*h-Ar{ml{o;o|8V;ot4(n2@TaG5_3+=n z9+~;deYDP#BgOsQS7f+rT*6UR-mIaI6J!Uy7`r{|HN?-?VBsI!0dK$M^EmT&ZkgZm zSZgmn?DL1}?kL%6*PT|iTMVCTKkoX1#r_M2ErSZW!7v@A=~AIPbj0EyUVkjQHMhWZ z_ksW__d_CiS17aNLSfx}fPi& hTWRx zN7^OkVV;9qyA*Qt4@nQ0NWx5BPH}(7Y43j18kQ98#~7P&c3g?+Y@dFPX0ss}q6b40 zGmLHe5vrV7wz2nFj&N?b@Rwk+%TM=VL)icfSiBGUpiVH;k#ecF@{gG^5Vx@=&-|~j zp?a8cB#MW{dT-t@LL(J{MYZ=%ftG2UYp+V_dqj0PPET{7^zn;`AFW7I+Zoc1t|k@C zus}uYP_W&j7Hm7J)cC smktJ29uM?BM*ZlQ+eO;hUSc?7cHv2WCpiCkn7QNq z^uRF5!1iE`=`P*%dc6m$MDr^rw9{dk?({OT&P1y_{<7@%o6JNq=L}L}+HoeyLBUNf zWn u5&LSzG{^)(5>`Egc)ZAhq(G!l-N$;BD@dx{IN_Dm(ZyhTf z34T)R%o>?E8(|5GZLi6eXj7D;9v zDZ2RYXci5Hh~4hY4F2R;r%Zq1Vqn~x V^1>HU|$~Ij(!euP_WK5oM>AeoM;Kv%66en-}J#zW$R*GSP~Ckk}1 &c#xi$i>oqY_KCR~pHj0+hsD41D$VEYQr*Wz z0$Ki5i>#JnNtbn&2>knE35P5?meH168r8?>#>CnJvV}s(7ofj_v>^H~H+x99tCdm` z{l1OX5(N=urq<(TR$nUS@lyF_OVm8Wv1E|Z)Np$mclq0y8)M0<_zk{ki7N?4x5}Hh zlvLM-M89_8Q|7hAmP*v5pNM^GFN;a;TwQ{4(@cJnq8(~W>zgvN7nB;B<|aE#1rcIz zTdrLO?(_ =KT)~x4FPg<3QDe`h0_8|@RZH Hk6yoKY zJIq@8jxL6(pUSvfNT+pioFXAZ+w91Xx!CDjl(}OsUoQ^{sG3$f`gSnT_ff1f? D#g;3y9Adw?$z2P!^rDo~jL6rmnR!eK- zM+P4e_l-0YHiPlJ2~qt|%ZGQ0D1}-_l`>Xx5>DM_4$@S4#<{gV_`?IrhPEDO=9&-r z!7nXvOIge4h^hmPL=v~ey->s{py&>Ti*L=yB8_YWuU9GZuqzgY(n*%*#nu5oUd&)` zgfPoE_xs(j6Am}faqY^+pKA$w`J^+@b?XuJjmfJ`e8+AwZzpu@w%vprf+mB729=dD zIfOL_r@8hk3_sCJq#98@V}wUMK<^;+hCL&(MGM2+euwlVSSH<|?d@YZo3BVA5)z1k z{NwS#TYM3{=>9?y`L)nLo@b8`&E77uzCjOt@Q+8x29ff$UcQa|k3PgHo+4iBwHPQM z#P^TKdl7|>%jZ~+?jJoMdJ}qqc-`jJo$(*vD1_XKE@y+X(JuFo9uU2G|Gy4AW%2Ql zf9n6}MDH2m^+U3V@P7{b0Xhn;P%BOXw#fgOeH#Vh^&>tS>VFO!3HPxKVi9qX`~8nj zz9O_i_0;*(|CCk215_~^fv5kolP`$ZFAjeGPg!vxB>P{1|9=!X1;>wyPjM|M!Q_HT zErlk({^-vKM_f|!3Bf=K3YAc6m@YQo+`782U(@7<&9SlT?-k^oBqbF1)N#_|;og+J zMrWLu4?-oc>1f2s;Qb gCY6A=;7(bK<2ROEj;ni}_MH0%MkfH UPzns^_-oeazO{w;0q4-_fde0c(`L?#J(Cpd~a!ly)v z3&PDcpHQ$6-62=lTx`78;Y7NjPDS;PD^E=*v&`WnV2 5OD6vF6qqhWDz z<|jCyeJF6?c>D%cog4Q=WXTGEDyA=Z7ph*|;U|D7^KP6WZ>&HK*!(x(2;s<0KAqr{ z^FUcsOcp*TACEoeddi4?=`WIpdsLe2oL;E&g5J@>Vkf|)?fD ymsAG`K6={_~QjA6r=h zOIX<+{+1{m@~+_P@f9qH>XTqE(-;55KE&V8m=Q*5gH9vos?LSGsaKx+uc16cLf+;5 z@Iar$P`DKb4LeNwKk-hL8UZKyvVN!k68OKw&UKG6|NlQ7`Z6Eipz&{6@=%Oy`}D5` ztqj<>TDxvW g1+DBK&h!{R0zYg6*sep*fR6R|WlmwvoKiP@p zz2dRGJhoo3TUp{+66a>#6F;FHJiBiy i2Zy_5!%7|WGBiuEHf5n0)IU8=QJ5)|1 z 6j#iZ`RGZR9#IKC7lX>fGg!WVzEWBSSJ+hXgK3`Bqt7xl-u}x!0+wO#1k~G; zLdL5-_qE^UY)i&Y*Sho^KYuAH@k8V #qkT*cpYtXN;CYxPON;Mkv9B(D!Hm2d&ihgsanMA%1C z*Nob)HEj3y^Il88@vL2rc@f7 {w*2L;M~?djh|$A} z-fljvy(H}&tZkSU`VD_?3{jvl>8@E$q1{2k=4He*FD^2(;+;qU=C3zY0rJs5UiRBw zF 8G8tffvwF=(22@Mn3nRwpx6V&dN6S*SMFwK z4dP6P-rLK@>anmO*QAVw**<54|I_aF?ds`}sQlqu&Eri4zT0Mxk78o_BK{g#EyT#3 z&xrjTKg6IVoC~39H@HzgA|!mp%ZuIKHUB+RFm^NG;5MuARRFOpvi9G4`H+aPm~ou) z2Y*=%DRLfOv-M4U(i6-kBjzHmev*m|zgJtS;@k^O1jE x-0Ma7H$Ke^A;LxClydR=A#7qH8;dm%%~p@s1P-^K^fv*&{ivz}sA5l~ z-kmvF9VoNse&jhCgp}GQ&RV~v31+s8nS6$<*8cWT1DX+5w|!-8Fe s8_14PV6%C7(Pujw)%OGvv)=S3K*hF2dK@gBl=xf)U0=a?3b zMgi}n5T~L!U;5&4W3dA*EEvX9f8~~I6RC6uchnw?Ba@e=_VapPtJd#E)ud7V1)1M4 zku@{v0Z9)ngzwEzo_5hXCrs~^jmFdQN;{sUtI5wS?F;rXUsigv7Drri%D)@Txh;P@ zXj?nNA)z fxu3o?;wSG(Zo$RZeBjryhL#B9m*{7*e9 z{};-E2@#Gv0xg6bdrTPgq;mc*`OT%oLPn+s1mDN965qF`@MeC6i2131sy+S-Ad|fq zGAI*X@D=osmXihEmc7!=!vw1tqJRF9kwEu`cX*}ReUEv#^0ckeo)l3C0RCZpCK+ =-?3 zv9O57o^KX5@2K*_vFcx{Xuri;Q{nTQ1_Ow12Y`5`OI6bs=NLn{qhnsfP!G&CjK= %=qa}1wHRu{m2do|zp)GJ$`Q-o zv%1DX7-+LeA3+!bpPzUeOcq@mH#7(h*F1ijvYK^B$tBYYA#d{25Nv*OJio0wQQTj; zJ>@x;2xjp-|H5WZS;P8fF5s|SM?|`kbMJ{neVeR8I|KOb5l^XMRJKuJ%aV}GujId% zpxCp;&^)rkpQ;k~3Nn>#2@~uoYt_E80Sk1ZPG>obGq;@L=f6Go-a BU7Mmgp>V0 zRb34 9GjcQkXrf3N5& <1~LMxEfEJCZI5xNZE4l{IaxQ<`{8+ zkczM7-`Gpo3K^l14a*~SzFVZ>ez6w61V8dCvnPp7lDEkVvd0Ij=DPmv7j6sxI$Jr{ ziMFpMFr`FFRxDu%`D5Do=qp2Qtz?Im^eNota72+ z&ES8GaKX(=C3<^kvwe8j>DO1rh_sJf{QyO~WGSd&iu )Z$l0?;o4q_ZS@ za-k1|AjLK;&s0|$gPwb@v;ROD$7;T2%70kY&@R*x+O}NdddUhOk1 =%9onlQPuwP$E(wh6Etl=-n67T5 zV#0%MPsO@Y-iFD(6sb%*S-b0b_mf2;7ILcT4I0%K>NplHCgC|*iaV@h@#q+NOv32z zX^u9}B##W22s-rQD4#(QmDTFNFjf^F8Bn2_VRbSc;?%GS#!U4S8St>kAzW~ih8{!E zch@;WSI?7Xj~)b`nvW|3e(PPowR09Kf^b{4ZHHOK2y}aYsllhZmg`G3f+QQIX1#xg zj(rs`B~eN}JE(8RzLM;4B2|UPv6In9X_FwK0~GTUq2znwCbvaNAEmzCa+)X{>$(|3 zzA99vnEALUBS3QegHWVQ?8GqJozK16^dK0ssMSs&N*hud -rm{qu4QzE@?G9agLbEl~>ohH)n~iUC6R zLDxbthuQPdVcVtY(QYwkORSet5Gc1j10!v6Q*7jOEbW}50ctnDEYJ9qHTnpN!C<^R z6%%jb$DPby^P)ek(&sZ$`;mb&aAv?&%>nXgJNAB!7*wk8WZ{ TN 1JRbKopS!>g<_wdAB^=)15*F-tC&nDa?RkJMq!|DNV962-O9&2%&DlqMgRbmE& zOU)LM#^#|UHWy`<=| p?w8|Ra?*!J*~kMC#e&sdjn%=#ae3U4 f z<5{;*=JRnTX4nWRHBvxDfQZ3L+;G~O)shx;B4nxNT+*Qx>GGXn^{g%`zQkA^UFhr} zKJ22dqwfMATxZQ%o1RrsH-kCtuDRMGXm(WJZZ}PI6kSI5<(!gH5uovuMWax({7%3u z@hZH7*w9&@qFDoTrU?#Q>)UKJWU{}Fy@9@Bxv4Njk=i9w-_cg#3sq=Q*?B&W1Weik zoJgqP?7K{qG#k+E=*la}`Tz1LAfB<~=zAsDt!i5P5KvR;roA9XU0nl{ZtE|5*EC8r TDaF2yYT()L>EluB9!dQV$m`bb -- GitLab