基于云容器训练平台搭建Tensorflow模型的研究

(整期优先)网络出版时间:2018-07-17
/ 3

基于云容器训练平台搭建Tensorflow模型的研究

蔡佳涛潘根豪连翌冰

(北京师范大学珠海分校,广东珠海519000)

摘要:面对当前互联网数据量的剧增,深度学习的训练集也随之指数增长,单台计算机的运算能力已经难以满足现状。例如,ImageNet和vgg16及vgg19模型所需要训练的参数在个人计算机的GPU上已难以完成训练。本文详细描述了通过研究机器学习的并行化计算及分布式训练来缩短训练周期,对集群的管理来合理分配训练的计算机资源,详细介绍了搭建Kubernetes集群的过程,实现在CentOS上部署Kubernetes集群,并且对云容器提高机器学习训练周期的示例做了展示。最后,对云容器分布式训练的应用价值进行了阐述。

关键词:并行化计算,分布式训练,Tensorflow集群,租户

1.研究的背景

1.1Tensorflow的开源

目前Google开源的深度学习框架被广泛应用到了各个方面。如自然语言的理解和广告算法等。开源以来得到业界的认可,截止2018年6月已经突破10万个star。

1.2搭建一个vgg或者imageNet模型训练到准确度较高的参数需要较多的计算机资源和时间。目前容器的概念已经成为服务器共享资源的一种重要的方式。

目前深度学习单机训练模型速度缓慢,随着互联网行业的井喷式发展,数据量也在以指数趋势增长,使用Machinelearning训练数据的数量往往会大到让人瞠目结舌。如GoogleBrain实验室发表的论文OUTRAGEOUSLYLARGENEURALNETWORKS:THESPARSELY-GATEDMIXTURE-OF-EXPERTSLAYER中提到,MOELayerModel可以达到680亿个Parameters的规模,如此复杂的模型,如果只能单机训练,那机器学习的耗时将难以让人接受。

2.研究目的

对于个人研究,如果想要将vgg16或者vgg19的模型训练到适应所遇到的实际场景,需要花费大量的时间和GPU资源,对于个人计算机来说几乎是难以完成的

运用容器云如何搭建集群训练(搭建过程)

让算法工程师更加关注算法本身的设计

3.研究的前沿性与学术性

目前Tensorflow作为深度学习逐渐成熟的项目,在使用的过程中,特别是在GPU集群中,会遇到如下一些问题

(1)在资源中没有租户的概念,无法做到资源在使用的时候进行有效。

(2)Tensorflow指定CPU来进行调度,这样会造成资源调度不平衡。

(3)TensorFlow的分布式模式parameterserver服务器会出现TensorFlow进程遗留问题

(4)需要人工介入训练的数据分发以及训练之后模型的保存。

(5)训练日志保存不方便以及难以对作业进行统一的管理与跟踪。

帮助现有的MachineLearning应用进行训练最大化的优化,使其更好更快更加便捷的进行训练。

Kubernetes概述

Kubernetes是对计算机资源的更高级的抽象。类似于设计模式的外观模式,将分散服务的大部分细节屏蔽,只将最终的应用服务提供给用户.

Kubernetes支持一种特殊的网络模型,在自身创建一个地址空间,也不为其动态分配窗口,允许用户自己动态指定。并且Kubernetes所有的资源都通过URI来定位。

4.研究的过程

并行化算法的研究

为了处理当前大数据的特征要求,业界进行了各种各样的研究与探索,致力于开发并行化算法。目前处理大数据主要的并行算法有:分布式并行计算、多核异构计算平台和以上两种方式的并行计算。

早期的分布式计算需要将计算的结果进行同步以及兵法控制等复杂的并发操作。虽然提高了计算性能,但是也伴随着许多问题。例如随着系统逐渐扩张变得复杂之后,对系统的管理和维护会变得非常困难。因此这种方式难以被推广。

Hadoop的MapReduce大规模数据分布式并行计算能改善上述的问题。MapReduce是Google提出的一个软件架构,用于大规模数据集的并行运算。最后Hadoop用Java实现后冰开源,已经成为大数据处理的业界标准,一个MapReducejob会将一个数据集分解成多个小数据集进行处理。

Spark是在Hadoop之后的新一代大数据分布处理框架,Spark更新了原有的架构,启用内存分布数据集,讲数据加载到集群主机的分布式内存。数据可以通过在内存中快速的被转换和迭代,因为在缓存中所以可以应对后续频繁的访问。

借助并行算法的研究思路,同样可以将训练任务进行分片,分布到云容器中的不同计算机上去做训练,然后将训练的结果进行合并,得出最后参数的模型。在Tensorflow的分布式训练中,存在多台worker对模型进行训练,并且存在parameterserver将训练后的参数模型进行保存,相较于spark,Tensorflow不仅支持同步的分布式训练也支持异步的分布式训练,Spark只支持同步训练。Spark在底层封装好了worker和分布式数据之间的关系;TensorFlow需要自行维护worker和分布式数据之间的关系。

Kubernetes设计架构

Kubernetes集群包含两大部分

1节点代理

2Master组件

Kubernetes主要核心的组件有:etcd用于保存整个集群的状态,Apiserver是资源操作的唯一入口,ControllerManager用于维护集群的状态,scheduler用于资源统一调度。kubelet用于维护容器的生命周期。containerruntime用于镜像管理和容器的真正运行管理。kube-proxy负责发现注册服务和负载均衡的处理。

构建Kubernetes集群

运用Google开源的容器集群管理系统Kubernetes进行容器的研究与搭建

环境:CentOS

节点:kube-masterkube-node1kube-node2

1在部署前,需要关闭防火墙并且禁用SELinux(Linux系统中负责安全增强的内核模块),这是为了防止在后续的配置中出现因为端口关闭或防火墙阻隔出现异常。

systemctlstopfirewalld.service&&systemctldisablefirewalld.service关闭防火墙

setenforce0

sed-i.bak's/SELINUX=enforcing/SELINUX=permissive/'/etc/selinux/config禁用SELinux

2下载搭建Kubernetes集群所必须的应用,这里有:

①Kubernetes:为master主机提供kube-apiserver,kubecontroller-manager和kube-scheduler服务,为工作机提供kubeletl服务

②etcd:存储master主机的所有持续状态,并且存储必要的配置数据

③flannel:通过部署flannel,对docker容器的ip进行规划,来实现集群中不同主机之间的通信

yum-yinstallkubernetesetcdflannel通过系统默认的yum源安装上述软件

rpm-qa|grep-E'kube|docker|etcd|flannel'查看安装好的应用版本

3在master主机上配置Kubernetes的服务,配置的过程如下:

①/etc/kubernetes/configKubernetes的系统配置

②/etc/etcd/etcd.confetcd服务的配置

③/etc/kubernetes/apiserverkube-apiserver服务的配置

④启动kube-apiserver服务,该服务在启动时会根据配置项创建证书和私钥文件

⑤/etc/kubernetes/controller-managerkube-controller-manager服务的配置

⑥保存网络的覆盖配置

⑦/etc/sysconfig/flannelflannel服务的配置

⑧在master上重启所有服务

4配置好了控制主机上的Kubernetes服务之后,继续配置工作节点的服务

①工作节点上Kubernetes的系统配置可以参照master上的配置内容

②/etc/kubernetes/kubeletkubelet服务的配置

③flannel的配置上同

④启动服务

⑤继续配置kubelctl并且在master主机查看工作节点的集群信息

kubectlgetnodes最后查看集群点信息

至此完成了所有在CentOS上的Kubernetes集群的部署

5.研究的实际应用价值

帮助现有的机器学习应用进行训练最大化的优化,使其训练速度有大幅度的提升,使更多设计思想的可行性提高。如,阿里云旗下的天池系统,通过云容器,为32核,64核,96核的计算机提供高带宽低延迟的RDMA(RemoteDirectMemoryAccess)网络互联,保证了高性能计算和人工只能/机器学习等应用需求的高度并行效率,为阿里的et城市大脑提供运算高效的运算能力。Et城市大脑可为城市的交通、能源、供水、建筑等基础设施在云端将全部被数字化,实体城市和数字虚拟城市同生共长相互映射,大到建筑物、小到每条电力线路都在虚拟城市中一一对应,城市大脑通过虚拟城市的模型,在其中不断模拟,提供可视数字规划/实时城市仿真/只能辅助决策的功能,能够全面优化城市空间格局,实现规划、建设、管理的闭环。一个城市庞大的数据量的机器学习,很大程度依赖于天池系统的云容器来运算,训练机器学习的模型。类似的应用还有GoogleCloud,同样为提机器学习的训练速度,搭建了云容器中心。

参考文献

[1]OUTRAGEOUSLYLARGENEURALNETWORKS:THESPARSELY-GATEDMIXTURE-OF-EXPERTSLAYER作者NoamShazeer1,AzaliaMirhoseini∗†1,KrzysztofMaziarz∗2,AndyDavis1,QuocLe1,GeoffreyHinton1andJeffDean12017

[2]https://kubernetes.io/

[3]Kubernetes跨集群管理的设计与实现作者:周佳威2017-01-18

[4]可扩展机器学习的并行与分布式优化算法综述作者亢良伊王建飞刘杰叶丹2017-10-09

[5]TensorFlow:Large-ScaleMachineLearningonHeterogeneousDistributedSystems2016-03-16