paddlepaddle测试安装_百度飞桨(PaddlePaddle)分布式训练在 Volcano 系统上的实践

本文介绍了飞桨(PaddlePaddle)的分布式训练能力,特别是其在Volcano系统上的应用。Volcano是Kubernetes上的高性能计算任务批量处理系统,能提升深度学习框架如PaddlePaddle的计算效率,支持任务自动化管理、资源调度优化。通过对比Kubernetes原生资源和Volcano job,展示了Volcano在任务创建、管理、调度策略方面的优势,并提供了使用Volcano执行PaddlePaddle分布式训练任务的示例。
摘要由CSDN通过智能技术生成

5622f440e5799cfaeed9fc85d906e376.png

来源 | 容器魔方公众号飞桨 (PaddlePaddle) 是百度于 2016 年 9 月开源的深度学习框架,旨在提供一款安全高效、灵活易用、可扩展的深度学习平台。

2018 年 10 月,飞桨团队发布 Paddle Fluid 1.0 版本,对神经网络描述、大规模分布式训练、高性能推理引擎等核心能力进行了全面升级。以工业界应用必需的分布式训练能力为例,在最新的 Paddle Fluid 1.5.2 版本中,飞桨支持数据并行、模型并行、流水线并行等多种并行模式,参数服务器架构和点对点同步训练架构全面支持在 CPU、GPU 等硬件资源设备上的大规模训练。本文将介绍飞桨分布式训练在 Kubernetes 社区中的 Volcano 系统上进行实践的案例。

Kubernetes 是当今最火的容器化应用自动部署、伸缩和资源管理的开源系统。随着 Kubernetes 的崛起,越来越多的公司愿意将自己的业务应用部署在 Kubernetes 上。除了典型的 Web 服务、数据库等服务会基于 Kubernetes 进行部署以外,深度学习框架的分布式训练也不例外。

然而,在 Kubernetes 系统中提交深度学习训练任务的功能并不像传统的高性能计算 MPI 平台那样直观。在 2017 年,Kubernetes 社区就有文章 Run Deep Learning with PaddlePaddle on Kubernetes 分析了运行 PaddlePaddle 对底层资源的诉求,基于 PaddlePaddle 对计算容错性、弹性伸缩、资源隔离的要求,提出在 Kubernetes 平台上运行 PaddlePaddle 是最佳实践。

自 Paddle Fluid 1.0 发布以来,飞桨在平台部署和任务调度管理上已经取得了长足的进步。借助 Kubernetes 平台,飞桨可以实现 CPU/GPU 等硬件资源的合理调度分配、训练任务的弹性扩缩容,并能显著提升计算资源的利用率。但是,在并行创建和调度任务、训练任务的生命周期管理、计算资源亲和性调度、调度策略优化等方面还有提升空间。为了提升飞桨框架的计算效率,飞桨团队和 Volcano 团队联合发布 PaddlePaddle on Volcano 方案。

Volcano 是一款构建于 Kubernetes 之上的增强型高性能计算任务批量处理系统。

作为一个面向高性能计算场景的平台,它弥补了 kubernetes 在机器学习、深度学习、HPC、大数据计算等场景下的基本能力缺失,其中包括 gang-schedule 的调度能力、计算任务队列管理、GPU 亲和性调度。另外,Volcano 在原有 Kubernetes 能力基础上对计算任务的批量创建及生命周期管理、Fair-share 调度等方面做了增强。

Volcano 平台可以满足飞桨对资源创建,资源调度的基本要求。Volcano 的批量创建批量调度计算任务为飞桨作业提供计算任务的自动化生命周期管理,gang-scheduler 调度策略可以满足 PServer 和 Trainer “all or nothing”的业务调度约束,Queue 和 priority 逻辑可以管理集群下计算作业的执行顺序,Fair-share 和 GPU 亲和度调度使计算任务调度更贴合 PServer 和 Trainer 对节点资源和网络拓扑结构的要求而提升任务计算效率。

Volcano 借助 Kubernetes 创建 CRD 能力,在 Kubernetes 中引入“apiVersion”为“batch.volcano.sh/v1alpha1”,“kind”为“Job”的资源对象,用于描述计算任务。通过配置和创建 Volcano job 可以使用 Volcano 平台创建、管理和调度计算任务。使用 volcano 平台,需要先在 Kubernetes 集群下安装 Volcano,安装 Volcano 的方法可参考 Volcano 官网。

选择一个飞桨框架任务分别使用 Kubernetes 原生资源和 Volcano job 执行计算任务并对比分析,以下对比将着重体现两者在使用方法、任务管理、调度策略方面进行比较。选择飞桨官网分布式训练 CTR(Click-Through-Rate) demo 进行对比测试。CTR demo 将运行两个 PServer 任务和两个 Trainer 任务。

首先使用飞桨官网推荐模式执行分布式计算任务,先创建一个副本数为 2 的 Kubernetes ReplicaSet 对象,用于运行 PServer 业务,然后创建一个并行度为 2 的 Kubernetes Job 对象,用于运行 Trainer 任务。

创建 PServer 任务

root@volcano-paddlepaddle:~# kubectl apply -f pserver.yamlreplicaset.extensions/fluid-ctr-pserver create

查看 pserver ReplicaSet 组件

root@volcano-paddlepaddle:~# kubectl get rsNAME                DESIRED   CURRENT   READY   AGEfluid-ctr-pserver   2         2         2       5

查看 pserver pods

root@volcano-paddlepaddle:~# kubectl get pods | grep fluidfluid-ctr-pserver-b9w99   1/1     Running   0          9m18sfluid-ctr-pserver-pb9vd   1/1     Running   0          9m18

查看 pserver 日志,PServer 已经开始工作,并对外提供服务

root@volcano-paddlepaddle:~# kubectl logs fluid-ctr-pserver-b9w99+ case "$1"in+ start_fluid_process+ pserver_label=paddle-job-pserver=fluid-ctr+ trainer_label=paddle-job=fluid-ct+ hostname=c-rlnrdybm-muamumvq-1+ task_index=+ '[' PSERVER == TRAINER ']+ '[' PSERVER == PSERVER ']'+ stdbuf -oL python /root/k8s_tools.py wait_pods_running paddle-job-pserver=fluid-ctr 2label selector: paddle-job-pserver=fluid-ctr, desired: 2current cnt: 0 sleep for 5 seconds...+ '[' PSERVER == TRAINER ']'+ '[' PSERVER == WORKER ']++ python /root/k8s_tools.py fetch_endpoints paddle-job-pserver=fluid-ctr 30236+ export PADDLE_PSERVERS=192.168.48.24:30236,192.168.48.25:30237+ PADDLE_PSERVERS=192.168.48.24:30236,192.168.48.25:30237++ python /root/k8s_tools.py fetch_ips paddle-job=fluid-ctr+ export PADDLE_TRAINER_IPS=+ PADDLE_TRAINER_IPS=+ '[' PSERVER == TRAINER ']'+ '[' PSERVER == WORKER ']'++ python /root/k8s_tools.py fetch_id paddle-job-pserver=fluid-ctr+ task_index=0+ export PADDLE_TRAINER_ID=0+ PADDLE_TRAINER_ID=0+ export PADDLE_PSERVER_ID=0+ PADDLE_PSERVER_ID=0+ stdbuf -oL sh -c 'cd /workspace/ctr && python train.py --is_local 0 --cloud_train 1'2019-09-03 06:43:10,661 - INFO - run dist training2019-09-03 06:43:10,715 - INFO - run pserverget_pserver_program() is deprecated, call get_pserver_programs() to get pserver main and startup in a single call.I0903 06:43:10.826609    41 grpc_server.cc:435] Server listening on 192.168.48.24:30236 selected port:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值