在ubuntu中使用Docker编译PaddlePaddle


要在ubuntu中使用docker编译paddle框架,首先分为以下几个步骤:

  • 安装docker环境
  • 拉取paddle的docker镜像
  • 开启镜像并配置
  • 验证编译安装成功

1、Docker环境安装

使用Docker编译

Docker是一个开源的应用容器引擎。使用Docker,既可以将PaddlePaddle的安装&使用与系统环境隔离,也可以与主机共享GPU、网络等资源

使用Docker编译PaddlePaddle,您需要:

可参考:

2、拉取Paddle的docker镜像

对于国内用户,因为网络问题下载docker比较慢时,可使用百度提供的镜像:

  • CPU版的PaddlePaddle:

    docker pull registry.baidubce.com/paddlepaddle/paddle:latest-dev
  • GPU版的PaddlePaddle:

    nvidia-docker pull registry.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda10.2-cudnn7-dev

3、docker编译配置

(1) 进入docker

先要开始启动docker,然后再使用attach进入环境。

sudo docker start paddle-test

sudo docker ps

sudo docker attach paddle-test

(2) 源码下载及环境配置

mkdir source

git clone git@github.com:PaddlePaddle/Paddle.git

进入下列文件目录

cd Paddle

(非必选)可根据需要,切换到较稳定版本下进行编译:

git checkout [分支名]

例如:

git checkout release/2.3

注意:python3.6、python3.7版本从release/1.2分支开始支持, python3.8版本从release/1.8分支开始支持, python3.9版本从release/2.1分支开始支持, python3.10版本从release/2.3分支开始支持

安装依赖

pip3 install protobuf

apt install patchelf

(3) 依赖项

由于在paddle源码编译过程中,需要安装相应的依赖库,这些依赖库是通过github仓库拉取源码的形式下载下来的。

若docker环境下能够网络通畅的使用github,可跳过此项。

若网络情况不稳定,那么这里建议参考下面,分别将这些仓库手动clone下来,同时要注意当前的目录。

git clone https://github.com/protocolbuffers/protobuf.git
git clone https://github.com/weidai11/cryptopp.git
git clone https://github.com/dmlc/dlpack.git
git clone https://github.com/oneapi-src/oneDNN.git
git clone https://github.com/baidu-research/warp-ctc.git
git clone https://github.com/gflags/gflags.git
git clone https://github.com/wjakob/clang-cindex-python3

(4) 执行cmake

执行cmake,根据是否使用GPU有以下两种方式,可自行结合需要修改DWITH_GPU=ON或OFF。

cmake .. -DPY_VERSION=3.7 -DWITH_GPU=OFF
cmake .. -DPY_VERSION=3.7 -DWITH_GPU=ON

(5) 执行编译

开始执行编译,-j后面对应的是线程数,可自定义。当然最好是用(nproc),会根据系统参数自动设置。

这里的流程是:

  • 1、先执行build源码到target。

  • 2、copying 源码到build目录下

  • 3、creating、adding

最后,看到[100%]Built target paddle_python就说明已经编译完成了。

4、安装编译好的包

编译好paddle源码后,我们还需要将生成的whl安装到docker中的python环境下。

根据上面的信息和官方文档的提示,可以知道,生成whl文件在下面这个目录。

cd /paddle/build/python/dist

pip3 install paddlepaddle-0.0.0-cp37-cp37m-linxu_x86_64.whl

由于在clone paddle的源码时,使用的是develop分支,因此对应的版本号为0.0.0。

如果需要稳定版本,可在源码下载的时候,选择相应的分支。

5、验证安装成功

将paddle的whl安装到python3环境后,可以在docker中进行相应的验证是否可用。

python3
import paddle
paddle.utils.run_check()

至此,所有步骤完成,paddle以源码形式编译并安装完成,enjoy your work~。

6、参考材料

[1].https://www.paddlepaddle.org.cn/documentation/docs/zh/install/compile/linux-compile.html

使用Docker编译PaddlePaddle的更多相关文章

  1. 使用docker安装paddlepaddle 和 tensorflow

    1.tensorflow安装 http://blog.csdn.net/freewebsys/article/details/70237003 (1)拉取镜像:docker pull tensorfl ...

  2. 利用Docker编译Hadoop 3.1.0

    前言 为什么要使用Docker编译,请自行百度 操作系统环境:Centos 6.8 uname -r 内核版本:2.6.32-642.el6.x86_64 除非有把握否则不要在Centos6.8中直接 ...

  3. YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集

    YOLO 算法是非常著名的目标检测算法.从其全称 You Only Look Once: Unified, Real-Time Object Detection ,可以看出它的特性: Look Onc ...

  4. 使用 Docker 编译 OpenWRT(Widora)

    Docker 是一种新的被称之为容器的虚拟机.本文将使用此工具,进行 OpenWRT 的编译. 在 Docker 中下载 Ubuntu 14.04 的镜像 使用以下命令可以十分方便的从远程服务器上将 ...

  5. (原) ubuntu下用pycharm2016.1专业版配docker编译环境(docker Interpreter)

    一:先创建docker-machine 先创建docker machine.我主机上的虚拟机是virtualbox.$ docker-machine create --driver virtualbo ...

  6. docker 编译开发代码做镜像

    文件目录 Dockerfile 是docker制作镜像的文件,docker_run.sh是sh文件,gin_test是go编译之后的linux可执行程序,gintest.env是配置文件夹 首先写一个 ...

  7. Docker编译Android6.0源码

    docker环境配置 更正时区时间 # 查看当前时间 $ date # 修改当前时间 $ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ech ...

  8. 使用Docker编译OpenResty支持国密ssl加密

    编译环境 执行编译操作环境如下 #操作系统 CentOS Linux release 7.4.1708 (Core) #docker版本 Version: 19.03.5 编译过程 Dockerfil ...

  9. 使用Docker安装PaddlePaddle安装过程中出现的几个问题

    Unable to create: 已停止该运行的命令,因为首选项变量"ErrorActionPreference"或通用参数设置为 Stop: 无法新建虚拟机. "Mo ...

  10. 编译Docker<v1.9.0>源码和初级安装

    本文主要介绍了如何在POWER CPU处理器上编译和安装Docker服务.很多时候,我们都需要自己编译Docker源码,有的时候是由于自己的处理器没有对应的安装包,有的时候是由于当前的新版本还有发布, ...

随机推荐

  1. v-bind属性,v-model属性

    一.v-bind v-bind动态绑定指令 默认情况下标签自带属性的值是固定的,可以使用v-bind:'需要绑定的值'='表达式' 所谓动态绑定动态的含义是我们不必修改页面template模板的代码, ...

  2. costmap代价地图

    1 什么是costmap代价地图 在机器人进行路径规划时,我们需要明白规划算法是依靠什么在地图上来计算出来一条路径的.依靠的是gmapping扫描构建的一张环境全局地图,但是仅仅依靠一张原始的全局地图 ...

  3. openresty IP限流

    1.针对大流量大并发网络请求下,为了保证服务的正常运行,不得不针对性采取限流的方式来解决大流量带来的服务器的压力. 2.在目前项目中对于接入了不同的平台,所以需要针对具体的平台做相对应的限流,或者针对 ...

  4. 20240719 CVTE 笔试

    岗位:嵌入式软件开发工程师(Linux方向) 题型:20 道不定项选择题,2 道编程题 1.不定项选择题 1.1 如下哪个命令可以帮助你知道 shell 的用法 (D) more help pwd m ...

  5. JAVA反序列化学习-前置知识(基于ysoserial)

    本人在学习Java反序列化中,发现网上大多都是自己分析一些逻辑内容,导致可能每一个版本的payload都不相同,对于学习时并不友好,所以我在学习了cc链之后,准备总结一下cc链中的内容,并以ysose ...

  6. shell最简单的办法实现进度条

    一直很好奇shell命令行安装脚本的时候怎么实现自动增长进度条而且不增加新输出的问题.以前一直觉得是不断print出来东西,但是已经输出到命令行终端的为什么也能被覆盖呢,于是看到别人写的进度条,不断尝 ...

  7. NLP语言学基础

    不同的自然语言有不同的语法结构,因此需要对语言数据进行语法解析,才能让机器更准确地学到相应的模式.而语言不同于图像,数据标注工作需要有一定的语言学知识,因此数据的整理也相对更困难.下面以英语为例(别的 ...

  8. 避免代码冗余,使用接口和泛型重构Java代码

    本文由 ImportNew - ImportNew读者 翻译自 michaelbrameld.如需转载本文,请先参见文章末尾处的转载要求. [感谢 李云涛(@平等的黑)的热心翻译.如果其他朋友也有不错 ...

  9. java——棋牌类游戏五子棋(singlewzq1.0)之二

    package basegame; import java.awt.Cursor; import java.awt.Graphics; import java.awt.Image; import ja ...

  10. MySQL之数据排序

    在MySQL中,我们经常需要从数据库中检索数据,并根据特定的要求对数据进行排序.通常情况下,我们会根据数据中某一列的值进行排序,例如按照价格从低到高或从高到低对商品进行排序.但有时候,我们需要在数据中 ...