“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

小米:基于 K8s 原生扩展的机器学习平台引擎 ML Engine 实践

  • 2019-12-26
  • 本文字数:2852 字

    阅读完需:约 9 分钟

小米:基于K8s原生扩展的机器学习平台引擎 ML Engine实践

相比于传统的调度系统,Kubernetes 在 CSI、CNI、CRI、CRD 等许多可以扩展的接口上有很大提升。从生态系统上来讲,Kubernetes 依托于 CNCF 社区,生态组件日趋丰富。在云原生设计理念方面,Kubernetes 以声明式 API 为根本,向上在微服务、Serverless、CI/CD 等方面可以做更好的集成,因此不少公司开始选择基于 K8s 搭建机器学习平台。在ArchSummit全球架构师峰会(北京站)的现场,InfoQ 采访到了小米人工智能部高级软件工程师褚向阳,听他分享小米机器学习平台以及基于 K8s 原生扩展的机器学习平台引擎 ML Engine。


2015 年,现任小米人工智能部高级软件工程师褚向阳加入了创业公司——数人云,开始进行 PaaS 平台的研发,算是国内比较早的一批投身容器化 PaaS 平台研发的工程师,后来去到京东广告部,这个阶段积累了一些 GPU 的使用经验,为他之后来小米做机器学习平台打下了基础。采访中,褚向阳表示,相较于通用型 PaaS 平台,机器学习平台更加聚焦业务,需要对机器学习相关业务具备清晰认知,并理解困难点。在小米工作的这段时间,褚向阳参与构建和优化了小米 CloudML 机器学习平台以及 ML Engine 架构。本文,褚向阳分享了他的一些实践经验和想法。

小米 CloudML 机器学习平台

对于机器学习平台的定位,褚向阳套用了 ABC 概念图(如下图),并表示机器学习平台应该处于这三者中间的支撑位置,只有机器学习平台可以充分利用云原生的计算能力和特性,不断加速把数据转化为用户价值的循环过程,这也是机器学习平台真正起作用的地方。



在小米,机器学习平台承载了图像、NLP、声学、搜索推荐等应用业务,各应用作为用户接入机器学习平台,然后可以利用平台提供的所有功能,比如训练、Pipeline、模型服务等,机器学习平台团队对用户提供这些能力的定义,帮助用户更好的使用这些服务。



在这个全景图中,核心逻辑也就是平台接入层、模型框架层和资源管理层被抽离出来形成了 ML Engine。

ML Engine 架构设计演进

据介绍,ML Engine 是基于 K8s 原生扩展的新一代机器学习平台引擎 ,在此之前,小米机器学习平台应用了原生 K8s 的所有对象,比如原来的 Job、Deployment、Service 等,初期的 CloudML 架构图如下所示:



如上图,分布式训练任务主要是一组 Job/Pod+SVC,模型服务主要是 Deployment+SVC+Ingress。褚向阳表示,最初的架构在队列、状态同步,生命周期管理和调度策略层面均存在挑战,比如随着业务规模逐渐成熟,大部分业务训练对分布式提出了比较强的需求,当时虽然可以支持,但用户体验上不够友好。最终,出于解决这些问题的想法,团队开始对平台进行改进。


团队对可能的开源方案进行了调研,发现 TF Operator 的设计理念与现有想法比较吻合,但又没有完全解决问题,因为小米需要对多个框架做统一支持,所以团队决定通过自研解决问题。ML  Engine 的主要思路则是充分利用 K8s 原生的扩展机制,包括 CRD / Webhook / Scheduling Framework 等,将机器学习平台相关的业务模型、控制逻辑和调度策略融入到 K8s 集群中,提供更好的生命周期管理,同时满足高可用、稳定性和易维护性的云原生特性。最终,ML  Engine 变成了由 CRD、Webhock、定制调度器组成的状态。



总结来看,ML Engine 新版架构具备如下特点:


  • 机器学习平台业务的合理抽象 CRD

  • 针对机器学习任务特性的定制调度器

  • 公共的 validating/mutating 逻辑

  • 提供统一的对外接口


褚向阳表示,整个引擎可以理解为基于 K8s 原生扩展做的定制和改造,使它更适合于平台直接把它当做机器学习能力的输出口。举例来说,K8s 里面可能只有 Job,没有机器学习训练或者模型推理,但是通过 ML  Engine 将这些能力抽象到了平台里面,用户调用 K8s 的 API 或者 SDK 时,就可以使用定义好的模型推理和训练能力,直接做 API 级别的交互。

为什么不直接放在 K8s 之上?

对 K8s 的改造其实也花费了团队不少精力,但在褚向阳看来,整个社区的发展,包括 Tensorflow,都在对 K8s 进行扩展,以保证真正把 K8s 用的更灵活,或者真正使用好这份扩展性,也就是云原生的特性,可以很好地继承云原生的稳定性、高可用特性等。如果只是底层基于 K8s,而不做任何改造,很难用好。正是基于这样的扩展机制,开发团队才可以更加灵活和可靠的设计业务场景。

为什么不直接用 K8s 生态里面的工具?

如开篇所言,K8s 依托 CNCF 形成了丰富的开源生态,开源社区中也有很多工具可供选择,但褚向阳表示,这些工具不会为了机器学习一个场景调整调度策略,或者资源分配逻辑。举例来说,深度学习和机器学习中占据主导地位的 GPU 资源,在其他场景下并不常见。目前,社区在这方面比较火的项目是 Kubeflow,小米也吸取了很多 Kubeflow 的优势,但是为了能给平台向上提供统一的接口,只能把这些作为引擎里的关键组成部件。

ML Engine 对多框架的分布式训练支持

在小米,ML Engine 训练任务的核心用例有用户给定训练代码及启动命令(可选:定义数据及产出物);支持选择不同的机器学习框架及运行时环境(CPU/GPU);下发集群,需要支持分布式启动训练,且需要遵循一定的调度优化策略等。


褚向阳表示,ML Engine 训练任务的整体流程为:


1、发起训练任务请求;


2、提交 K8s,创建 ML Train;


3、触发 ML Engine Controller;


4、根据 MLTrain Spec,决定创建 TF Job;


5、ML Train Code 相关 Spec,触发 git-sync Mutating 逻辑;


6、Patch Request;


7、Pod 调度;


8、识别分布式任务,触发 framework plugins



在整个过程中,小米机器学习团队逐渐解决了用户接口层统一、框架状态统一等问题。谈到未来的发展方向,褚向阳表示,整体还是以解决内部需求为主,只要内部用户有需求,团队都会满足。功能上,主要考虑将计量、计费也抽象成 CRD,提供更方便的数据管理逻辑和更丰富的模型服务管理能力。 此外,与模型优化相关的项目,或者说所有可以提高效率的做法也会实时关注,并在时机成熟后积极尝试开源。

经验总结

在机器学习平台搭建层面,每家公司由于背景、业务不同,所以会出现不同的做法,在褚向阳的理解中,K8s 原生的扩展性、服务的可用性保证以及服务的易维护性是可取的优点,但使用时需要注意 admission webhook 是把双刃剑,建议设置过滤条件,以及处理好各框架不同版本之间的 golang 依赖等。


最后,容器也有自己的应用场景,K8s 诞生之初就对无状态应用提供了非常好的支持,无论是开发快速试用环境,还是用来跑大规模分布式训练的任务调度,包括云原生的推理服务,都是非常合适的。如果希望充分发挥云原生的特性,不但平台层和应用层要做改造,底层的支撑平台,包括存储等都要为云原生做好准备,否则会遇到各种各样的困难。


采访嘉宾:


褚向阳,小米人工智能部/高级软件工程师。2013 年毕业后加入红帽软件,吸收开源文化,接触 OpenStack 和 IaaS 平台相关技术。2015 年底开始加入容器云创业公司,参与打造容器化的 PaaS 平台,2018 年从京东广告部加入小米人工智能部,负责小米机器学习平台的建设,重点支持各个框架的分布式训练,订制优化 K8s 调度,努力提高平台用户体验的同时保证集群利用率。持续关注 Kubeflow 社区及性能优化相关开源项目发展。


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-12-26 09:563272
用户头像
赵钰莹 InfoQ 主编

发布了 870 篇内容, 共 598.5 次阅读, 收获喜欢 2669 次。

关注

评论

发布
暂无评论
发现更多内容

【JAVA】AI医疗智能导诊系统源码

源码星辰

Java 源码 智能导诊

SD-WAN搭建企业多云专用网络

Ogcloud

网络 SD-WAN 组网 组网网络

Beyond the WiFi Edge: Analyzing the Network Differences of IPQ4019 and IPQ6018

wallysSK

如何查找iPhone中所有的应用程序

雪奈椰子

自动 FTP 客户端 Hitek Software AbleFTP激活最新版

mac大玩家j

文件传输软件 ftp工具

简单聊聊大力发展国产堡垒机的几个原因

行云管家

网络安全 信创 堡垒机 国产化

元器件经验分享-晶体与晶振对比分析

华秋电子

供应链 元器件

Spring 七种事务传播性介绍

vivo互联网技术

spring 事务的传播性 事务的提交和回滚

Mycat分库分表实时同步到GreatSQL

GreatSQL

数据迁移 greatsql

支持向量机(SVM)是什么?

小齐写代码

数据高速公路:详解数仓集群通信技术

华为云开发者联盟

大数据 后端 华为云 华为云开发者联盟 华为云GaussDB(DWS)

如何对APP进行安全加固

重磅国赛开赛!中国大学生服务外包创新创业大赛飞桨双赛道开放报名

飞桨PaddlePaddle

飞桨 高校 国赛 文心一言 文心大模型

docker篇-重启策略+run容器常用参数

百度搜索:蓝易云

Docker 云计算 Linux 运维 云服务器

2024了,我不想再用AOP收集业务操作日志了 | 京东云技术团队

京东科技开发者

PCB设计必备:31条布线技巧

华秋电子

PCB设计 dfm

百度搜索&金融:构建高时效、高可用的分布式数据传输系统

百度Geek说

分布式 计算机网络 金融 数据传输 企业号 1 月 PK 榜

跨周期,创未来!华秋喜获中国产业互联网十周年-杰出企业

华秋电子

产业互联网 产业链 产业生态

Mac电脑自动化任务软件:Hitek Software Automize Enterprise激活最新版

胖墩儿不胖y

Mac软件 任务管理器 自动化任务管理工具

制造业工厂仓库管理为什么要扫码出入库?

万界星空科技

wms WMS仓库管理 万界星空科技 仓库管理系统 扫码出入库管理

调试技巧 | AI工程化部署

AIWeker

c AI AI工程化部署

Java之Javac、JIT、AOT之间的关系

百度搜索:蓝易云

Java Linux 云服务器 AOT javac

华秋获深圳市福田区2023年职工“五小”创新与质量技术成果竞赛二等奖

华秋电子

物联网 新能源

互动大屏数字人系统源码的优势!

青否数字人

互动

深入理解左倾红黑树 | 京东物流技术团队

京东科技开发者

2023年12月全国范围POI数据更新《POI数据更新系列》

Geek_f9782a

GIS POI 地理空间数据

叮咚!融云 2023 年度「消息」已送达

融云 RongCloud

技术 即时通讯 IM 融云 通讯

为什么要选择数字人系统源码?

青否数字人

数字人

文心一言 VS 讯飞星火 VS chatgpt (171)-- 算法导论13.2 4题

福大大架构师每日一题

福大大架构师每日一题

青否数字人系统制作短视频矩阵!

青否数字人

数字人

shopee虾皮商品列表数据接口(Shopee.item_search)丨shopee虾皮API接口

tbapi

Shopee shopee API shopee商品列表数据接口 虾皮商品列表数据接口 虾皮API接口

小米:基于K8s原生扩展的机器学习平台引擎 ML Engine实践_服务革新_赵钰莹_InfoQ精选文章