vivo基于Kubernetes构建企业级TaaS平台实践
Author: xidianwangtao@gmail.com
vivo TaaS架构
关于如何将Kubernetes和TensorFlow整合起来的Topic,以及我们的CaaS技术栈的介绍,请参考过往的两篇文章,在这里我不再赘述。
下面是当前我们的TaaS平台架构图:
想多说以下两点:
-
有的同学问我,我们是如何将HDFS的训练数据迁移到Glusterfs的,在这统一回复:目前基于HDFS作为后端分布式存储的TaaS能满足算法团队的需求,所以最终我们也没有做这个数据迁移工作。
-
由于这个方案中,每个TensorFlow训练都会对应一个Kubernetes NameSpace,每个TensorFlow Task都会对应一个Headless Service,各个Task通过KubeDNS进行发现和域名解析。在我们的环境中,当一个TensorFlow训练的Task数超过600时,偶尔会出现Headless Service Name域名解析失败的情况,导致分布式TensorFlow集群内部的Session连接建立失败,最终无法成功启动这次Between-Graph训练。我们通过Kubernetes的孵化项目cluster-proportional-autoscaler来根据集群Node数量对KubeDNS副本数进行弹性伸缩来解决这一问题的。下面是我们使用的kube-dns-autoscaler配置:
kind: ConfigMap apiVersion: v1 metadata: name: kube-dns-autoscaler namespace: kube-system data: linear: | { "nodesPerReplica": 10, "min": 1, "max": 50, "preventSinglePointFailure": true }
关于这个问题的深入探讨,请参考我的博文cluster-proportional-autoscaler源码分析及如何解决KubeDNS性能瓶颈。当然更好的解决办法其实是应该是对
cluster-proportional-autoscaler
进行二次开发,根据集群中Service Number来对KubeDNS进行弹性伸缩。因为在我们AI的场景下,一台高配的服务器能运行的Pods数可以多达80个,正常情况不会超过30个,这么大的弹性范围,无疑使用Service Number来对KubeDNS进行弹性伸缩是最好的选择。
vivo TaaS介绍
我们TaaS平台目前支持训练脚本的托管、训练项目的创建和管理、TensorBoard服务的一键创建能力,虽然支持一键创建TensorFlow Serving服务帮助模型上线,但是因为还没做TensorFlow Serving的Load Balance,所以这个特性还没正式上线,目前正在开发中,以后有机会再跟大家分享。
算法托管
用户登录TaaS Portal, 上传本地的算法脚本到TaaS平台, 提供一系列算法脚本管理的能力,这个没多少可说的。
每个算法,我们约定使用run.sh
文件启动训练。
训练项目
接下来,用户根据算法脚本的路径创建对应的训练项目。
训练项目分两种类型:普通训练和定时训练。定时训练顾名思义,就是通过定时器控制训练实例,每隔一定周期启动一次训练,并且支持启动下一次训练前是否强行杀死上一次的训练。还可以设置该次训练最长允许的时长,超时强行杀死本次训练。
创建完项目后,接下来就是启动训练了,填入worker数和ps数,选择对应的resource.requests,提交训练请求。
然后请求转到Kubernetes中,创建对应的Namespace, workers job, ps deployment及其对应的Headless Services,imagePullSecret等Object,TaaS生成对应的训练记录。
每个训练记录都对应一个Kubernetes Namespace,可以查看训练详情、各个task的日志和对应的Grafana监控面板。
TensorBoard服务
TensorBoard通过加载log目录下的summary data,为模型和训练提供了web视图,可以帮助算法工程师定位算法的瓶颈。vivo TaaS平台支持一键创建TensorBoard服务。
请求会转到Kubernetes创建对应的TensorBoard Deployment等Object,TaaS页面提供该TensorBoard服务的访问入口。
点击“模型展示”,即可跳转到对应的TensorBoard Web视图。
vivo TaaS后续规划
目前我们的TaaS平台仍然处于早期阶段,还有很多工作需要去做:
- 基于任务优先级进行线上线下混合部署、资源抢占式调度;
- 训练和TensorFlow Serving物理资源资源共享并进行资源池管理;
- 为训练添加自定义命令行参数;
- 大规模TensorFlow训练的调度优化;
- 调度时考虑服务器的网络IO资源;
- 训练数据和模型的管理;
- 基于LVS为TensorFlow Serving提供自动化LB配置;
- 基于gpu的调度和训练;
- 集群资源使用情况的动态监控,并对新的TensorFlow集群创建请求做更有意义的资源检查;
- 如果需要,使用Glusterfs提高训练数据的Read IO;
- …(事情总是做不完的)
总结
这里对vivo TaaS平台做了简单介绍,在这背后摸索的过程中我们解决了很多问题,但是未来的路很长,随着集群规模的快速膨胀,我们要做的工作会越来越多。TaaS平台只是我们Kubernetes在vivo落地的一个方向,DevOps、ESaaS等平台的开发也面临很多挑战,如果你也有志于深耕容器云相关技术,欢迎加入我们团队。
广告:更多干货欢迎微信关注“vivo互联网技术”公众号
原文地址:https://my.oschina.net/jxcdwangtao/blog/1605861
相关推荐
-
云服务器绑定主机名的正确姿势 服务器
2019-9-10
-
五大最流行的配置管理工具 服务器
2019-2-17
-
Mysql 服务器
2020-6-28
-
Choerodon 猪齿鱼的数据初始化设计解析 服务器
2020-7-16
-
如何在 Fedora 上建立一个 TFTP 服务器 服务器
2019-10-5
-
在 Fedora 上优化 bash 或 zsh 服务器
2020-5-25
-
Kubernetes Local Persistent Volume源码分析 服务器
2020-6-16
-
I/O重定向和管道 服务器
2019-3-15
-
Linux 7个运行级别 服务器
2019-11-2
-
硬盘物理故障开盘+RAID-5阵列瘫痪恢复数据过程 服务器
2019-9-10