K8S在美团机器学习平台落地和实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. K8S在美团机器学习 平台的落地与实践 吴通 机器学习平台资源与系统组负责人
2. 目录 CONTENT 01 对比几种场景 02 K8S service 改造 03 Pallas 介绍 04 Kube-collector 介绍 03 未来规划
3. 01 场景对比 此前是基于YARN,后切换至K8S
4. 几种场景的对比 ADD RELATED TITLE WORDS • 美团机器学习平台隶属于数据平台 • 此前机器学习平台依赖使用Hadoop YARN 2.7.1管理资源,为此扩展了YARN的 能力 • 支持Docker • Gang scheduling • Node Attribute/Placement Constraint • A100多网卡支持拓扑优化 • 更强大的节点健康检查 • 但不同场景特征不同,对资源管理的要求不同
5. 离线场景特征 ADD RELATED TITLE WORDS • 主要负载是ETL和查询,使用YARN作为资源调度系统 • ETL的特征是: 1)同一时刻有大量task等待分配资源,有大量task完成并释放资源 2)Task对资源一般无约束语义表达,仅存在资源数量的诉求 • 由1)决定离线场景资源调度的核心问题是提升调度吞吐 • 由2)决定调度算法能迅速为Task匹配目标节点。 • 美团数仓生产高峰,调度吞吐在8000+/s • K8S由于元数据存储在ETCD,各组件通过watch机制获取数据更新,调度吞吐 很能达到要求,业界优化在1600+/s左右
6. 机器学习场景资源特征 ADD RELATED TITLE WORDS • 核心是管理好GPU资源,业界GPU硬件迭代频率在18-30个月 • 管理好GPU,在于用起来-单卡用好-单机用好-分布式用好 • 用起来:减少GPU碎片、闲置 • 单卡用好:合理申请资源、GPU共享 • 单机用好:考虑CPU/GPU/网卡等在NUMA/PCIE/NVLink层面的拓扑 • 分布式用好:考虑跨机通信,需协同硬件选型、网络基础设施和上层引 擎
7. 机器学习场景负载特征 ADD RELATED TITLE WORDS • 负载以深度学习任务为主,分为离线训练和在线推理,调度吞吐要求很低, 以美团实际负载为例 • App日提交量:2000+ • 峰值调度吞吐:100+ • 需支持上层引擎复杂的调度语义 • 调度算法不用追求高吞吐,而追求更高的调度质量,基于K8S
8. 我们改造了什么 ADD RELATED TITLE WORDS • • • • • • 改造K8S service,使之支持underlay容器网络 自研调度器 GPU device plugin支持PCIE拓扑优化 节点健康检查 支持RDMA 支持pod安全访问HDFS
9. 02 K8S service改造
10. K8S service改造 ADD RELATED TITLE WORDS • • ClusterIP service原理 1. Kube-apiserver为service分配一个VIP 2. Endpoint Controller根据label创建同名的endpoint对象, endpoint维护了VIP和多个关联Pod IP(假设IP为A、B、 C)的映射 3. Kube-proxy(以iptable模式为例,部署在每个Node) 监听到endpoint对象,会添加iptables DNAT规则,作用 是:当目标IP:Port是VIP:6379时,随机修改为 A/B/C:6379 4. 这样当在内Pod内访问VIP:6379时,经过内核的 netfilter模块修改后,实际访问是A/B/C:6379 并非所有CNI网络都支持ClusterIP service
11. K8S service改造 ADD RELATED TITLE WORDS • CNI可分为两类:overlay和underlay • Overlay:功能全、性能相对差、不能和外部资源互联、支持ClusterIP service • Underlay:性能好,和外部资源互联,不支持ClusterIP service • 美团使用的是underlay CNI,但我们期望支持ClusterIP service
12. K8S service改造 ADD RELATED TITLE WORDS 以pod1访问pod3为例,即10.140.87.97 -> 10.140.73.171。 1. pod1的路由表的默认网关是10.140.87.1,因此数 据会转发给10.140.87.1 2. 在数据链路层目标mac地址是X,网络包进入br0, br0检查和自己的mac地址不符,因此将报文广播 出去 3. TOR1接受到网络包进入到网关10.140.87.1(mac 地址相同),再通过上层的leaf交换机,将包转 发给TOR2 4. 以1.2相反的步骤访问到pod3 Pod1往外发出的网络包不会经过netfileter模块,因此 kube-proxy设置的iptables规则会失效。
13. K8S service改造 ADD RELATED TITLE WORDS • • 核心思路:service是四层负载均衡的,而美团有四层负载均衡的中间件mgw, 借助mgw可以实现service的转发功能 具体改造方案(以创建service为例)如下: 1. 移除kube-proxy 2. 引入一个MutatingAdmissionWebhook 3. 修改Endpoint Controller逻辑
14. K8S service改造 ADD RELATED TITLE WORDS • • • 简单介绍改造原理,以先创建service,再创建两个pod为 例 创建service流程为: 1. Kube-apiserver调用webhook 2. webhook调用mgw api创建mgw VIP并patch给Kube- apiserver 3. Kube-apiserver将mgw VIP写入service clusterIP 创建pod时会发生为: 1. Endpoint Controller监听到两个pod创建 2. 这两个pod被service label选中,且pod不在endpoint 对象的subset 3. 调用mgw api将两个pod ip绑定给VIP
15. 03 Pallas介绍
16. 为什么要自研 ADD RELATED TITLE WORDS • Pallas是替代kube-scheduler的自研调度器 • 美团机器学习平台是面向多租户的 • 外卖/买菜/视觉/无人车等业务称为一个租户,一个租户下分别多个队列是 使用资源 • 平台向租户保证任意时刻都是保证其配额,比如<10000Core, 40000GB,1000GPU>,配额保证是第一约束 • 配额保证几乎改变了调度的所有流程,比如分配时优先非给配额满足率的 用户、抢占仅能抢占那些使用量高于配额的队列中的Pod
17. 为什么要自研 ADD RELATED TITLE WORDS • • 对吞吐量要求高于kube-scheduler的能力 • 结合线上实际情况,吞吐率期望能达到200+/s,kube-scheduler压测显示在 60左右 • 自研调度器Pallas吞吐率未优化峰值在200+/s,预计轻度优化可有2-3倍提 升 更丰富的特性 • Gang scheduling • 拓扑距离优化 • 精确的调度归因 • DAG调度 • App内按优先级抢占 • 多资源池
18. 重要概念 ADD RELATED TITLE WORDS • • • • • 集群中唯一的调度器 两级队列设计:父队列代表租户,子队列为 租户内部的某种规则划分 Pod分为两类system pod和user pod,system pod不属于某个队列,user pod属于某个队列 System pod一般是一些系统组件,会部署在一 些专用的机器上(daemonset是所有机器), 因此无须执行优选流程,也不会被抢占 User pod是业务负载,按照对业务承诺进行调 度,流程复杂
19. Pallas关心的对象 ADD RELATED TITLE WORDS • • • • 父队列和podGroup是CR podGroup在调度器内被描述成Job Pod在调度器内被描述成Task 队列 – 子队列 –Job– Task是树形结构
20. 调度架构设计 ADD RELATED TITLE WORDS • • • • Pallas的执行流程是:open session – close session – sleep的无线循环 open session会从informer cache中复制队列、Job和Task数据,以实现调度流程的 无锁化 session会依次执行allocate_system、pre_allocate、allocate、preempt等流程 • allocate_system负责分配system pod • pre_allocate负责分配被释放的抢占过来的资源 • allocate是最主要的分配流程 • preempt是抢占流程 close session会记录各类指标、事件
21. 调度架构设计 ADD RELATED TITLE WORDS • 以allocate为例,分配流程如下: 1. 选择一个配额满足率低的父队列P 2. 从P中选择一个配额满足率低的子队列C 3. 从C中选择一个排序靠前的Job J(排序 算法可通过插件定制) 4. 构建一个事务分配器(gang scheduling) 5. 从J中选择一个排序靠前的Task T(排序 算法可通过插件定制) 6. 为T执行预选-优选-绑定等流程
22. 04 Kube-collector 介绍 请替换文字内容,点击添加相关标题文字
23. Kube-collector介绍 ADD RELATED TITLE WORDS • • 实现高可观测性三个关键因素是:日志、指标和跟踪 构建丰富的指标体系依赖完善的指标收集系统 • 要收集三类信息:event、object和prometheus的监控数据
24. Kube-collector介绍 ADD RELATED TITLE WORDS • • • • kube-collector根据配置从三类数据源获取更新,并写入 磁盘 日志收集系统会将变更写入kafka 借助内部实时数仓做去重、合并、聚合计算 将kafka中计算好的数导入OLAP数据库Doris
25. Kube-collector介绍 ADD RELATED TITLE WORDS
26. 04 未来规划 请替换文字内容,点击添加相关标题文字
27. 未来规划 ADD RELATED TITLE WORDS • 持续优化调度器 • 进一步提升调度性能,包括:参数优化、减少复制、拆分锁 • 交换机拓扑优化 • 调度参数推荐 • 智能调整资源池规模 • DAG调度 • 对接内部存储DolphinFS • IO/网络带宽隔离 • 支持PMEM、DPU、国产GPU等更多硬件 • 从任务和平台视角进一步提升系统可观测性 • 期待加入我们:wutong21@meituan.com
28. 非常感谢您的观看

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.125.1. UTC+08:00, 2024-05-17 18:23
浙ICP备14020137号-1 $访客地图$