AI智能总结
B站资深开发/许龙 大纲 •各类混部场景的实践方案 •CPU在离线混部:在线+转码、在线+大数据•CPU潮汐混部:推搜+大数据•GPU常态混部:推理+转码•GPU潮汐混部:推理+训练 •容量管理的实践方案 •弹性伸缩:VPA和HPA•合池:quota管理、算力标准化•容量运营与可视化 B站容器平台架构 •CPU核数:百万级•除部分大数据、中间件外全部容器化 混部实践方案 CPU在离线混部的难点 调度 •混部任务尽量不占用在线任务的可用配额(cpu/memory request)•调度器需要动态感知节点的可混部资源量•满足离线任务的E2E调度性能 QoS保障 •在线任务的性能不被离线任务干扰:精细化隔离措施(cpu/内存/磁盘/网络…)•离线任务也需要一定的性能保障:区分混部资源质量 CPU在离线混部的架构 任务下发模块•在线任务通过容器发布平台下发 •离线任务通过批处理任务平台下发 调度模块 •在线任务采用原生调度器•离线任务采用volcano调度器•离线任务基于k8s扩展资源进行调度 混部agent模块•混部算力的动态计算和上报 •资源隔离•监控数据上报 配置管理模块•不同节点组的混部策略管控 CPU在离线混部-资源上报 混部资源上报 •基于在线负载,动态计算可混部资源•采用k8s device-plugin机制,上报混部扩展资源、•通过本机指标采集计算,去除外部监控链路依赖•资源分级,结合资源池画像,区分高低优混部资源高优资源:资源比较稳定,离线任务可较长期稳定运行低优资源:资源比较波动,离线任务容易受到压制或驱逐 CPU在离线混部-调度方案 视频转码场景的挑战 •计算规模庞大:日均千万级任务•计算资源异构:CPU/GPU/混部/混合云•系统压力大:并发高,E2E拉起速度要求高 批任务调度模块 •对混部业务方提供统一的openAPI•多集群调度:支持资源余量、优先级等策略•单集群调度:采用volcano调度器+自定义plugin•高可用:无单点可扩展、支持限流•支持多租户 单集群调度性能优化 •etcd:分离event、使用nvme等•apiserver/controller调大限速•镜像p2p下载•Volcano深度优化:例如job到pod的创建延迟优化 CPU在离线混部-资源隔离 混部大框 •根据在线负载动态计算可混部资源量•根据可混部资源量调整大框cgroup CPU在离线混部-资源隔离 CPU隔离 •混部大框:最小cpushare、动态扩缩•第一阶段:混部绑核(考虑HT)•第二阶段:内核层cpu调度优先级 CPU在离线混部-资源隔离 内存隔离 •混部大框:动态扩缩•第一阶段:调节oom_score_adj•第二阶段:内核层oom优先级;memcgpage cache异步回收 网络隔离 •离线转码任务采用bridge网络,使用host-localip•基于TC进行混部pod的网络带宽限速 驱逐避让 •针对内存、磁盘等不可压缩资源,达到阈值后触发混部任务驱逐•驱逐冷却 CPU在离线混部-资源隔离 内核隔离参数设置方式 •基于runtime proxy•容器创建时,通过hook设置内核参数,时效性更高•后续考虑切到containerd的NRI方式 CPU在离线混部-大数据混部场景 YarnNM on k8s •Yarn NM作为daemonset部署到k8s node•混部agent动态上报资源给NM中的agent•Yarn技术优化:•支持remote shuffle•基于应用画像调度中小规格任务•跨机房网络带宽限速 CPU在离线混部-全场景管理 混部资源供给 •容器化机器默认开启混部•未容器化的业务,物理机利用率非常低,推动业务方将机器纳管到k8s跑混部•备机池闲置机器,自动接入k8s跑混部 混部资源使用(多租户) •推动视频转码、大数据、AI等多种业务场景接入混部•高优混部资源:•资源相对稳定•跑高优混部任务,租户粒度设置固定quota•低优混部资源•资源较为波动•跑低优混部任务,租户粒度按比例分配quota 混部管理平台 •策略管理•节点组、策略类型、水位控制等•监控大盘•各粒度资源上报量、分配量、使用量等•节点侧故障分析指标,内核层指标 混部实践方案 CPU潮汐混部 场景:推搜+大数据 •推搜: •大数据: CPU潮汐混部-正向潮汐 •自研clusterautoscaling组件基于自定义k8scrd+ controller支持多种扩缩策略支持多种资源供给方•独立潮汐应用,cronHPA定时扩缩,保障机器按时拆借、归还•基于机型的wrr负载均衡,解决机型差异问题•SLO巡检告警 CPU潮汐混部-反向潮汐 •在线业务基于利用率进行HPA扩缩•潮汐应用HPA缩容后如何尽量缩出整机,避免驱逐大规格实例?尽量将潮汐应用调度到同一节点在凌晨HPA缩容前,通过算法挑选出最适合缩容的实例,并打上delete-cost值•混部过程中,实时检测在线实例创建并驱逐nodemanger 混部实践方案 GPU混部-vGPU调度 GPU共享调度 •卡切分粒度:1%算力、256MiB显存•调度特性:支持卡类型调度支持多卡调度支持显存调度(单卡跑多任务场景)支持坏卡隔离支持binpack,减少卡碎片 GPU混部-vGPU隔离 GPU隔离 •业界隔离方案MPS、MIGCUDA劫持内核劫持•方案选择基于开源驱动的内核隔离 GPU混部-vGPU隔离 GPU内核隔离实现原理 •用户通过cgroup接口配置一个组(应用)可用的显存和时间片 •在显存隔离上,驱动里获取显存信息时,通过BGM模块获取第1步配置的显存limit,保证其不会用超上限 •在算力隔离上,在驱动里配置TSG的API里,通过BGM模块获取第1步配置的slice覆盖默认的2ms。 •APP申请0.3卡,则time slice设置为:0.3*单卡调度周期 GPU混部-编解码场景 GPU推理+转码 •部分显卡比如NVIDIA T4/A10有独立的编码器和解码器•推理服务不使用编解码器,编解码利用率0•视频编解码任务主要使用编解码器 GPU混部-编解码场景 GPU推理+转码 •通过GPU-manager组件上报编解码资源•单卡预留固定大小显存给编解码任务•cuda没有干扰,只需要显存隔离 GPU混部-潮汐场景 在线任务HPA •服务配置基于GPU利用率的HPA•白天扩容,凌晨缩容 离线任务调度 •批任务调度平台感知空闲卡数变化•离线任务通过平台调度到对应集群 任务退避 •潮汐时间结束,离线任务主动退避•在线HPA扩容,调度器基于优先级主动驱逐抢占离线任务 容量管理 容量管理的问题 •物理资源:划分小池、机型差异、多种调度器&调度策略•应用:手动扩缩容、规格不合理、发布缺资源等•运维:节点&应用容量变更无法追踪、缺乏容量趋势报表、缺乏容量告警等•运营:预算评估困难、配额无管控、缺乏细粒度账单等 容量管理的目标 •提升效率:通过自动化、流程化、可视化,降低人工操作成本•降低成本:通过平台技术手段&应用治理,提升机器利用率•保障稳定性:通过巡检、弹性伸缩等手段保障业务稳定性 容量管理实践方案 容量管理-VPA 背景 •容器CPU request设置不合理,导致:节点CPU分配率高,实际利用率却很低•资源池余量不足,用户发版经常卡单•服务数多,推动业务调整规格困难 VPA •平台侧对外屏蔽request,用户只需配置limit•request通过VPA自动调整至合理值 容量管理-VPA VPA推荐策略 •基于服务等级:L0~L3•七日峰值分位数据+冗余度 VPA更新策略 •新建pod,通过webhook修改为推荐的request•存量pod,基于自研inplacevpa,动态修改request 容量管理-VPA VPA管理平台 •策略管理、预跑、调优•策略避让•实际执行和效果数据分析•稳定性 容量管理-HPA HPA 2.0 HPA 3.0 •支持优先级,解决多种HPA共存问题,例如指标HPA和CronHPA•支持发布态HPA,解决发布过程新老版本共存时的扩缩容问题•支持分段HPA,解决潮汐混部场景中,大规格实例只允许凌晨扩缩的需求 容量管理-HPA ScaleMode •Enable•Disable•DryRun Segments •一个HPA可以包含多个段,每个段单独设置时间段、优先级、类型、上下限等•场景:解决部分推广搜服务服务启动耗时长,白天禁止缩容,只允许晚上缩容 副本数决策 •Dynamic:基于指标动态扩缩•Cron:定时触发•Direct:指定时间段扩缩 决策优先级 •优先取更高优先级的段计算副本数•相同优先级取max replicas 容量管理实践方案 容量管理-合池 合池的必要性 •便于平台统一管理•整合机器资源,共享buffer•任务资源规格多样,更容易互补 合池的挑战 •机器&应用的标准化治理•机型不统一,同应用实例间利用率分层•配额管理 容量管理-基准核 利用率分层问题 •算力标准化•流量调度WRRP2C算法•调度优化Numa调度负载感知调度带宽调度…… 容量管理-配额管理 配额管理平台 •支持cpu、memory、gpu等各类资源quota•可视化管理各级部门quota,支持增删改查、转移等功能•精细化运营操作:变更审计、各类趋势报表 Quota系统 •基于公司统一的服务树设置各级配额•支持发布平台、HPA等各类外部组件扣减quota,通过resourceVersion解决扣减冲突•紧急情况支持一键关闭 容量管理实践方案 容量管理-可视化 基础容量 •多维度:节点、资源池、集群、应用、组织等•多指标:使用量、使用率、实例数、分配率等•多报表:趋势图、明细、汇总等 容量事件 •Node新增/删除/可调度/不可调度•应用发布实例数/规格变更•HPA扩缩容•服务上下线•… 容量巡检&告警 •应用:峰值使用率、扩缩容建议•资源池:可调度实例数、分配率、峰值使用率 总结与展望 混部 •Spark/Flinknative onk8s混部•k8s和yarn统一调度•推搜等敏感业务场景混部•持续增强内核层CPU/GPU隔离能力 容量管理 •进一步推进合池,优化合池后的调度、实例利用率分层等问题•推进基于混合云的集群弹性伸缩能力•集群联邦场景下的VPA、HPA、重调度等问题优化 哔哩哔哩技术公众号




