在今年的KubeCon峰会上海站,作为开源领域的贡献者和推进者,华为开源了面向高性能计算的云原生批量计算平台Volcano [vɒlˈkeɪnəʊ]。该项目基于华为云容器平台大规模高性能计算应用管理的最佳实践,在原生K8s的基础上,补齐了作业(Job)调度和设备管理等多方面的短板。目前,Volcano在华为云上对接了包括一站式AI开发平台ModelArts、云容器实例CCI、云容器引擎CCE在内的多款服务,是整个高性能计算领域不可或缺的基座。自开源以来,项目已经吸引了来自腾讯,百度,快手以及AWS等多个公司的贡献者。
随着容器化以及容器编排技术的普及,越来越多的上层业务正开始拥抱K8s生态,但无法否认的是,针对人工智能和大数据作业场景,原生K8s的支持度不高,终端用户如果想要将现有的业务迁移到K8s平台,很有可能会遇到下面的问题:
- 成组调度(Gang Scheduling):一个BigData/AI的作业通常会包含多个任务,而业务逻辑一般要求Pod要么同时启动,要么不启动。比如,一个Tensorflow作业如果仅单独拉起一种角色的任务(Ps or Worker)是没法正常执行的。
- 资源公平调度(Fair-share):部署的K8s集群会存在多个Namespace,而每个Namespace也可能提交多个作业,如何调度资源才能避免某个Namespace的资源被无限制压缩,又如何才能确保作业之间的资源调度公平?
- GPU Topology感知(GPU Topology Awareness):一个常见的AI训练和推理作业,为了达到更高的性能,往往需要使用多个GPU共同完成,此时GPU的Topology结构以及设备之间的传输性能会对计算性能造成很大影响。目前, K8s提供的扩展资源调度机制还无法满足调度时Topology感知的问题。
- 集群自动配置(Cluster Configuration):许多上层工具在业务启动之前,需要用户配置工具的集群状态,方便系统内部节点互通和识别,以MPI(Message Passing Interface)作业为例,需要用户以命令行参数“—host”配置集群的所有节点信息,并且还依赖节点之间SSH互通。所以,用户还要考虑怎样自动配置和管理业务集群。
此外,如何监控整个作业集群的状态?单个Pod失败如何处理?怎么解决任务依赖的问题等,都是需要处理的问题。
基于此,Volcano在解决此类问题的基础上提供了一个针对BigData和AI场景下,通用、可扩展、高性能、稳定的原生批量计算平台,方便以Kubeflow、KubeGene、Spark为代表的上层业务组件集成和使用。