暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

基于云原生打造分布式机器学习平台(介绍篇)

rivernjl 2022-08-08
2558

我们的考量


基于以下的几点的考量我们选择开发出一套一站式的机器学习平台服务于推荐搜索风控AI等等各种业务场景

1. 工程问题

算法模型从开发到上线经历着复杂的过程其中每个过程都需要耗费算法工程师们大量的时间算法同学真正用的模型开发及模型优化的时间上很少同时这些过程中大量的工作都是很重复性的工作有的可能只是变更数据集有的可能只是变更一些参数

 

2. 资源问题

各种资源散落在不同的团队及个人开发手上资源无法得到有效的利用各开发人员经常出现资源使用排队但是整体资源的利用率又非常的低

  •  资源滥用

如生产环境预发环境上的在线服务独占GPU但是在很多小业务场景下GPU资源使用率非常低下特别是在一些预发环境下经常出现偶尔才有请求的情况


  • 资源在时间维度利用率低下

有很多团队下的训练是单机多卡的模式训练任务之间的训练无法跨越单机的限制任务之间的训练靠人工去控制资源多台机器在同一时刻无法达到最大化利用率比如A机器上的任务把机器资源已经跑满负荷了B机器上当前可能资源剩余很多


  • GPU机器当作CPU机器使用

超大型CPU任务在GPU机器上跑或者是GPU任务流中的大型CPU计算过程在GPU机器上执行(占用磁盘、机器网络资源、GPU任务计算过程中所需要的CPU及内存资源等等)


  • 资源环境运维困难机器迁移扩容效率低下

很多时候开发人员的任务开发及运行环境与固定机器绑定如果机器出现损坏裁撤扩容机器等这些复杂的环境都需要重做一遍有时出现几天甚至更久才能交付一台机器同时单机资源有限在大型算法模型情况下经常会出现如磁盘内存等资源不足


  • 业务开发人员对代码及架构的优化经验意愿不高导致资源无法有效利用机器成本上升快于业务发展

大部分情况下相关算法人员对资源利用优化经验或者意愿并不高基本上是通过加机器来满足计算资源的不足但有时候能过技术架构和代码的小小优化能节省大量的资源成本


3.技术型问题

     


  • 数据量大模型大单机无法支撑同时模型训练周期过长线上模型线新缓存影响业务

  • 单模型训练周期长无法进行超参搜索模型参数优化难度大,工作效率低下

  • 算法框架多不同团队对算法框架要求不一样TFPytorchSklearnXGBoost等等各自版本要求不一样环境复杂运维难度和工作量极大


基于上述的一些问题我们需要

1: 资源统筹与边缘计算


  • 统一资源管理将以人管理资源改变成机器进行资源管理平台管理资源申请及资源调度对不合理资源申请进行智能修正同时采用合理的智能的调度算法对行计算资源调度使资源达到最大化利用

  • 边缘计算减少大数据量传输

  • GPU进行虚化减少GPU资源浪费

2: 提供一站式模型训练功能


  • 开发运行等环境模版化达到只需几秒钟就能复制一套新环境

  • 提供便捷的开发工具开发人员可以快速的进行环境安装制作及代码开发调试发布上线

  • 提供任务流编排功能使用者通过组件拖拉的形式即能编制出一套复杂的训练流程

提供训练任务定时调度功能支持各种的定时任务操作(补录,忽略,重试,依赖,并发限制


3: 将复杂技术模版化组件化


  • 提供超参数搜索组件算法同学能方便快捷的进行超参数调优提高工作效率

  • 提供模版化如Pytorch\TF\XGBoost\Spark\Ray\Horovod\Volcano等等分布式训练组件使用者能过简单的拖拉组件就可以完成复杂的分布式计算过程

   


 

基于云生态架构搭建一站式机器学习平台

技术的选型


在机器学习领域大家可能接触到最多的有Airflow\MLflow\Kubeflow等等除了MLflowKubeflow大部分的开源框架都只是偏向于任务流编排及任务定时调度的对于机器学习相关的支持没有或者是很弱,其中的MLFlow在机器学习领域内应用比较还是比较多的但是MLFlow只适合于小规模团队与小规模的模型训练对于大型分布式计算资源统筹调度等等支持还是比较弱


1: 基于行业发展趋势

Kubeflow是由Google开源出来Kubeflow 旨在通过提供一种直接的方式将用于机器学习的同类最佳开源系统部署到各种基础设施,从而使机器学习工作流在 Kubernetes 上的部署变得简单、便携和可扩展同时有两大 IT 趋势开始升温——云原生架构的主流化,以及对数据科学和机器学习的广泛投资Kubeflow 完美地定位于这两种趋势的汇合点。它是云原生设计,专为机器学习用例而设计


2: 基于公司现状的需要

由上面我已经介绍过了我们的痛点及需要解决的问题点基于Kubernetes 的原生架构能构更好更快的集成开源组件运用到机器学习平台中以满足业务的需要如与Volcano集成能更好的进行资源调度基于Kubflow提供的Train-operator快速搭建起TF\Pytorch\MXNet等分布式训练能力基于Kubernetes我们能在上层打造更贴合用户的功能如训练机器创建与销毁用户只填入简单的资源需求后台就能秒级的创建出一套用户所需要的新环境出来供使用者进行开发测试模型训练模型发布上线等等



Kubeflow从架构上来说基本上能满足我们的需要但是Kubeflow的对于使用者来说并不是那么的友好


  • 任务流构建使用复杂需要通过python脚本构建任务同时设置TASK运行过程中的参数复杂比如磁盘挂载资源配置等等使用成本比较高

  • 缺少环境开发相关组件比如用户自定义的开发环境的开发工具等等

  • 无法集成除Kubeflow支持以外的组件比如集成Spark/Ray/Volcano还比如对GPU虚化后无法应用到平台当中去

  • 无法按分组进行资源调度管理比如按线上机器集群进行资源调度按训练集群进行资源调度按项目分组进行资源调度等等


最终我们选择以Kubeflow做为平台的基础Kubeflow的上层我们进行层装及扩展打造公司级的机器学习平台



新一代基于云原生的机器学习平台架构

最终我们选择的系统框架如下图


资源管理层

硬件层主要是实机机器上的资源比如磁盘GPU\CPU等等资源管理主要是利用Kubernetes进管理集群的资源在存储方面选择使用Ceph来管理集群中的存储资源


Rancher :

为了降低kubernetes的安装及维护的复杂度我们基于Rancher来搭建及管理K8S集群

Rancher不仅可以集中管理部署在任何基础设施上的Kubernetes集群,还可以实行统一的集中式身份验证和访问控制。由于无法确定资源运行的位置,我们可以轻松地在不同的基础设施之间调用集群,并在它们之间进行资源迁移同时更方便于K8S集群的扩容升级运维等等Rancher 中文官网地址https://docs.rancher.cn/docs/rancher2.5/overview/_index



Ceph:

其实选择Ceph并没有太多的逻辑ceph的读写性能并不高大概只有50M-60M/相对于Cfs等等性能还是比较差在立项前期发现Cephk8s中安装比较方便简单能很快的集成到系统中来还有就是Ceph通过系统挂载后用户能像访问本地文件系统一样访问Ceph集群上的文件使用起来也方便简单当时只是考虑利用Ceph来放置训练任务中的配置文件及需要执行的代码这样分布式下进行训练会变得更简单方便训练数据可以放置在HDFS等等之类的存储集群上这样50M-60M/秒写性能完全能满足需求



kubeflow


kubeflow中我们主要使用到了kfp/argo/katib/train-operator/tf-board等组件istio后期需要从kubeflow 中进行剥离单独进行独立部署


Argo:


Argo是一个开源原生容器工作流引擎 用于在Kubernetes上开发和运行应用程序。Argo Workflow流程引擎,可以编排容器流程来执行业务逻辑

 

KFP:

Argo 已经有了一整套任务流处理流程了KubeFlow为什么还要在argo上进行再次开发呢首先就是Argo中的数据都是保存在ETCD中的但是ECTD中的数据有大小的限制数据总大小及每条记录大小在ETCD中都是有限制的但是像流程模板,历史执行记录,这些大量的信息很明显需要一个持久化层(数据库)来记录明显ECTD是不能满足需求的这样就需要对这些功能进行增强同是ML的领域的用户界面层,KFP也做了较多的用户体验改进。包括可以查看每一步的训练输出结果,直接通过UI进行可视化的图形展示



未完待续


文章转载自rivernjl,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论