没有合适的资源?快使用搜索试试~ 我知道了~
首页基于Kubeflow的机器学习调度平台落地实战
基于Kubeflow的机器学习调度平台落地实战
549 浏览量
更新于2023-05-30
评论
收藏 1.21MB PDF 举报
本文来自于infoq,文章介绍了机器学习的各个业务方各个痛点,Kubeflow以及Kubeflow核心组件等相关知识。随着机器学习和人工智能的迅猛发展,业界出现了许多开源的机器学习平台。由于机器学习与大数据天然的紧密结合,基于HadoopYarn的分布式任务调度仍是业界主流,但是随着容器化的发展,Docker+Kubernetes的云原生组合,也展现出了很强的生命力。表1.互联网业界机器学习平台架构对比在建设分布式训练平台的过程中,我们和机器学习的各个业务方,包括搜索推荐、图像算法、交易风控反作弊等,进行了深入沟通,调研他们的痛点。从中我们发现,算法业务方往往专注于模型和调参,而工程领域是他们
资源详情
资源评论
资源推荐

基于基于Kubeflow的机器学习调度平台落地实战的机器学习调度平台落地实战
背景
随着机器学习和人工智能的迅猛发展,业界出现了许多开源的机器学习平台。由于机器学习与大数据天然的紧密结合,基于
Hadoop Yarn 的分布式任务调度仍是业界主流,但是随着容器化的发展,Docker + Kubernetes 的云原生组合,也展现出了很
强的生命力。
表 1. 互联网业界机器学习平台架构对比
痛点
在建设分布式训练平台的过程中,我们和机器学习的各个业务方,包括搜索推荐、图像算法、交易风控反作弊等,进行了深入
沟通,调研他们的痛点。从中我们发现,算法业务方往往专注于模型和调参,而工程领域是他们相对薄弱的一个环节。建设一
个强大的分布式平台,整合各个资源池,提供统一的机器学习框架,将能大大加快训练速度,提升效率,带来更多的可能性,
此外还有助于提升资源利用率。
痛点一:对算力的需求越来越强烈
算力代表了生产力。深度学习在多个领域的出色表现,给业务带来了更多的可能性,同时对算力提出了越来越高的要求。深度
学习模型参数的规模陡增,迭代的时间变的更长,从之前的小时级别,变成天级别,甚至月级别。以商品推荐为例,面对几亿
的参数,近百亿的样本数量,即使采用 GPU 机器,也需要长达一个星期的训练时间;而图像业务拥有更多的参数和更复杂的
模型,面对 TB 级的训练样本,单机场景下往往需要长达近一个月的训练时间。
再者,机器学习具有试错性非常强的特点,更快的训练速度可以带来更多的尝试,从而发掘更多的可能性。Tensorflow 从 0.8
版本开始支持分布式训练,至今为止,无论高阶还是低阶的 API,对分布式训练已经有了完善的支持。同时,Kubernetes 和
Hadoop 等具有完善的资源管理和调度功能,为 Tensorflow 分布式训练奠定资源层面的基础。
Tensorflow On Yarn 和 Tensorflow On Spark 是较早的解决方案,奇虎 360 的 Xlearning 也得到众人的青睐。而基于
Kubernetes 的 kubeflow 解决了 Yarn 的痛点,展现出旺盛的生命力。
上述方案无一例外的将各个部门分散的机器纳入到统一的资源池,并提供资源管理和调度功能,让基于 Excel 表的资源管理和
人肉调度成为过去,让用户更专注于算法模型,而非基础设施。在几十个 worker 下,无论是 CPU 还是 GPU 的分布式训练,
训练速度都能得到近乎线性的提升,将单机的训练时间从月级别缩短到一天以内,提升效率的同时也大大提升了资源利用率。
蘑菇街早期的业务方往往独立维护各自团队的 GPU 机器“小池子”,机器的资源分配和管理存在盲区,缺乏统一管理和调度。
GPU 的资源存在不均衡和资源利用率低下的问题。事实上,大数据团队之前已经将 CPU 类型的训练任务接入了 Xlearning,
尝到了分布式训练的甜头,但也发现一些问题:
公司目前的 Yarn 不支持 GPU 资源管理,虽然近期版本已支持该特性,但存在稳定性风险。
缺乏资源隔离和限制,同节点的任务容易出现资源冲突。
监控信息不完善。在发生资源抢占时,往往无法定位根本原因。
缺少弹性能力,目前资源池是静态的,如果能借助公有云的弹性能力,在业务高峰期提供更大的算力,将能更快的满足业务需
求。

痛点二:人肉管理的成本很高
业务方反馈的第二大问题是人肉管理的成本问题。人肉化的管理主要包含了部署和训练任务管理两大方面。
人肉部署
一个典型的场景是:团队内的成员共享一批机器,每次跑训练任务前,用户手动登陆机器,下载代码,安装对应的 python
包,过程繁琐且容易出现安装包版本的冲突。
由于不同的训练任务对 python 的版本和依赖完全不同,比如有些模型使用 python 2.7,有些使用 python 3.3,有些使用
tensorflow 1.8,有些使用 tensorflow 1.11 等等,非常容易出现依赖包冲突的问题。虽然沙箱能在一定程度上解决这问题,但
是也带来了额外的管理负担。
此外,不同 GPU 机型依赖的 Nvidia 驱动也不同,较新的卡,比如 V100 所依赖的版本更高。人肉部署还需要管理和维护多个
不同的驱动版本。
训练任务管理
人肉启动训练任务时,需要手动查看 / 评估资源的剩余可用情况,手动指定 PS 和 Worker 的数量,管理配置并进行服务发
现。这些都给业务方带来了很大的负担。
解决的思路
Docker 和 Kubernetes 很好的解决了人肉管理的问题:
部署:借助 Docker 良好的隔离性,各个容器的文件系统互不影响,将训练任务和驱动程序制作成镜像,避免了多次安装的繁
琐。此外 Kubernetes 提供了服务发现功能,简化了分布式的部署。
训练任务生命周期管理:Kubernetes 提供了生命周期管理的 API,用户基于 API 即可一键式完成训练任务的增删改查,避免
人工 ssh 的各种繁琐操作,可以大幅提升用户体验和效率。
痛点三:监控的缺失
监控也是分布式训练重要的一环,它是性能调优的重要依据。比如在 PS-Worker 的训练框架下,我们需要为每个 PS/Worker
配置合适的 GPU/CPU/Memory,并设置合适的 PS 和 Worker 数量。如果某个参数配置不当,往往容易造成性能瓶颈,影响
整体资源的利用率。比如当 PS 的网络很大时,我们需要增加 PS 节点,并对大参数进行 partition;当 worker CPU 负载过高
时,我们应该增加 Worker 的核数。
早期版本的 Hadoop 和 Yarn 并不支持 GPU 的资源可视化监控,而 Kubernetes 已拥有非常成熟监控方案 Prometheus,它能
周期采集 CPU,内存,网络和 GPU 的监控数据,即每个 PS/Worker 的资源使用率都能得到详细的展示,为优化资源配置提
供了依据。事实上,我们也是通过监控信息为不同的训练任务分配合适的资源配置,使得在训练速度和整体的吞吐率上达到一
个较好的效果。
痛点四:资源隔离较弱
早期的机器学习平台基于 Yarn 的 Angel 和 XLearning,由于 Yarn 缺乏对实例之间的资源隔离,我们在内存,网络,磁盘等
均遇到不同程度的问题。
由于 Yarn 没有对任务的内存进行隔离,所以,业务方常常因对内存资源估计不准而导致 worker 的进程 OOM。由于所有的进
程都共用宿主机的 IP,很容易造成端口冲突,此外磁盘 IO 和网络 IO 也很容易被打爆。

表 2. Hadoop Yarn 和 Kubernetes 的横向对比
Kubeflow 及核心组件
Kubeflow 是由 Google 等公司于 2017 年推出的基于 Kubernetes 的开源项目,它支持常见的机器学习框架。
Kubeflow 简介
The Kubeflow project is dedicated to making deployments of machine learning (ML) workflows on Kubernetes simple,
portable and scalable.
Kubeflow 旨在支持多种机器学习框架运行在 Kubernetes 之上,比如 Tensorflow, Pytorch, Caffe 等常见框架。它包含了
operator、pipeline、超参数调优、serving 等诸多模块。它通过提供对应的 operator,基于 Kubernetes 的 Pod/headless
Service 等基础资源为框架提供与之相配的更高层次的资源。比如 tf-operator 为 Tensorflow 提供了 job 维度的生命周期管理
能力,以满足 Tensorflow 分布式训练的资源和拓扑需求,达到了一键式部署 Tensorflow 训练任务的效果。
Kubeflow 包含如下 operator,分别对应主流的分布式计算框架。蘑菇街主要采用了 kubeflow 中的 tf-operator,来实现对机器
学习任务的统一管理。
图 1. Kubeflow 所支持的主流分布式计算框架
剩余10页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0