目录
引言
什么是任务调度,它对机器学习有多重要?
SLURM 资源调度系统
Kubernetes 资源调度系统
AI工作负载的挑战
Kubernetes OrionX 调度
引言
近几年来,伴随着AI应用领域需求的扩增和政策红利的推动,AI开发平台的市场规模得到了快速增长。AI开发平台是集成了AI算法、算力与开发工具的平台,通过接口调用的形式使企业、个人或开发者可高效使用平台中的AI能力完成AI产品开发或AI赋能。作为一个机器学习平台,它提供训练所需要的计算资源,支持使用各种单机以及分布式训练任务训练模型。这时,由于平台大多部署在私有集群,而集群内项目的资源是有限的,所以在项目初期,项目训练任务不多的时候,每个任务都能获取足够的资源进行训练;但随着项目里的训练任务越来越多,任务调度的需求也日益凸显。
什么是任务调度,它对机器学习有多重要?
任务调度是指系统为了自动完成特定任务,在约定的特定时刻去执行任务的过程。在 AI任务训练中,可能同时运行数百个任务和上千个节点。如果没有任务调度,用户尝试执行的任务将无法与可用资源进行正确匹配。可以说,任务调度系统类似于军队的司令,指挥着AI平台上的各个组件的运行,时刻监督着任务的运行情况。
AI开发平台使用任务调度程序来对训练任务进行接收、调度和监控。这些调度程序使算法工程师能够通过任务控制指令手动或自动启动和管理任务。手动管理和监控通过图形用户界面 (GUI) 或命令行界面 (CLI) 执行。
任务调度系统的目的是:
-
最小化任务在队列中等待的时间长度
-
最大化任务并行量以确保同时运行尽可能多的任务
-
优化资源利用率以降本增效
当任务调度系统有效运行时,它可以确保任务尽快完成工作负载的调度,从而减少待处理任务的操作瓶颈。在机器学习当中,这意味着更短的模型训练时间和更快的业务上线时间。 如今,AI技术的快速发展也为任务调度提供了越来越多的选择。
SLURM 资源调度系统
SLURM (Simple Linux Utility for Resource Management)是一个开源、容错、高度可扩展的集群管理和作业调度系统,适用于大型和小型Linux集群。SLURM 维护着一个待处理工作的队列并管理此工作的整体资源调度。它以一种共享或非共享的方式管理可用的计算节点资源(取决于资源的需求),以供用户执行工作。SLURM 会为任务队列合理地分配资源,并监视作业至其完成。如今,SLURM 被世界范围内的超级计算机(包括天河等)和计算机群广泛采用。
SLURM主要功能如下:
-
资源分配
在特定时间内分配独占或者非独占的资源给用户,可以控制分配的时长,供用户运行作业。
-
作业管理
它提供了在分配的节点上启动、执行和监控作业(通常是并行作业)的框架
-
队列
提交的作业资源需求超出了可用资源,将作业放入队列。
-
不同的作业调度策略
通过管理待处理作业的队列来仲裁资源的争用。例如根据优先级或不同当调度策略调整资源的分配顺序。
-
可选插件
提供了可选的插件用于计费、资源预留、多种调度策略、拓扑优化的资源选择、基于用户或账户的资源限制以及复杂的多因素作业优先级算法等功能。
软件架构
Kubernetes 资源调度系统
Kubernetes,(又称为 k8s,首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)是一个容器编排平台,用于调度以及自动部署、管理和扩展容器化应用。如今,Kubernetes 和更广泛的容器生态系统逐渐成熟,正在形成一个通用的计算平台和生态系统 。该生态系统使企业能够提供高生产力的平台即服务 (PaaS),解决围绕云原生开发、与基础架构和运维相关的多个任务及问题,从而使开发团队可以更专注于开发和创新。
在 PaaS 资源编排层面,Kubernetes 已经成为业界公认的实施标准,领先优势非常明显,且正呈现出跨领域融合发展趋势,以 Kubernetes 为中心的技术、生态日臻成熟和完善。根据云原生产业联盟 2020 年调查数据显示,Kubernetes 在受访人群的采纳率高达 63%,在容器编排领域扮演非常重要的角色。Kubernetes 的编排对象持续丰富、不断扩展,以容器为基础编排对象逐渐延展至虚拟机、函数等,理论上所有可编程、有 API、可抽象成资源的对象,都在成为 Kubernetes 的编排对象。应用侧围绕 Kubernetes 生态加速演进,以 Kubernetes 为核心的云原生技术栈将推广到更多的应用场景。在大数据领域,Spark 和 Kubernetes 的集成已经非常普遍。机器学习方面,Kubernetes 和 Tensorflow 等深度学习的框架深度集成,用 Kubernetes 去编排机器学习的工作流已取得业界的广泛认可和应用。
主要功能如下:
-
资源隔离
-
资源共享
-
灵活的资源调度(GPU)
-
训练日志收集
-
统一运维监控告警管理
-
大规模任务管理
-
大规模集群的资源管理
-
业务的持续部署和弹性伸缩
AI工作负载的挑战
从调度和编排的角度来看,Slurm和Kubernetes 有一些重叠;而在 AI 工作负载方面,它们面对着不同的挑战。
机器和深度学习工作负载的特征与 HPC 工作负载的特征非常相似,因此一些企业在使用 HPC 任务调度器(如 Slurm )来管理其机器学习集群。但是,HPC 集群管理器不是围绕容器和 Kubernetes 开发的机器学习生态系统的一部分,因此很难将 Kubeflow 等AI平台集成到此类环境中。此外,Slurm 使用较为复杂,维护难度大。
另一方面,Kubernetes 更易于使用,并与常见的深度学习和机器学习框架集成,越来越多的企业和学术机构在他们的机器学习和深度学习训练中使用 Kubernetes,但是使用Kubernetes 调度GPU资源时也会遇到各种各样的问题,比如资源闲置时间过长,导致的集群平均利用率低(约为 20%)、资源调度只能整卡调度,不能切分或按照卡的类型调度、不能进行任务排队等问题。
Kubernetes OrionX 调度
OrionX Kubernetes Scheduler Extender是趋动科技专门为kubernetes开发的扩展调度,是在kubernetes原有的调度基础上扩展vGPU调度的能力。OrionX为Kubernetes提供两个插件,实现与k8s的集成对接。集成后,系统管理员利用k8s即可完成对GPU资源池中OrionX vGPU资源的配置和调度管理。简化运维,允许客户系统管理员通过单一接口调度全部数据中心资源,实现SDDC。
主要增强特点如下:
-
本地优先调度策略,本地没有资源远程调度
-
本地调度策略,只调度本地资源
-
指定GPU型号调度,整个集群可以管理不同GPU资源
-
任务排队,在资源不足时进行底层的任务排队
-
任务优先级,根据排队任务指定优先级
-
双资源池的支持,可以随需调度物理GPU和OrionX vGPU资源
OrionX从架构设计层面结合k8s,为我们关注的任务调用的可用性,伸缩性、灵活性提供了很好的解决方案,帮助企业提升资源利用率,降低运维成本,达到降本增效的目的。



