随着 Kubernetes 作为 AI、大数据和高性能批量计算的下一代基础设施的趋势逐渐清晰,越来越多的企业对 Kubernetes 在深度学习、科学计算、高性能渲染等方面提出了更高的要求。
项目挑战
原生 Kubernetes 作为通用的容器调度方案,仍与高性能计算场景下业务调度诉求存在一定差距,主要体现在:
待完善作业视角调度能力
Kubernetes 本身是以资源视角进行资源调度,Pod 作为基本的调度单元存在。Kubernetes 采用依次调度的方式实现对每个容器的调度管理,缺乏业务的作业视角进行调度的能力。
在大数据、人工智能、高性能计算的应用场景下,往往需要多个容器同时配合执行计算。而 Kubernetes 原生的依次调度方式,完全无法满足大数据、人工智能场景下的调度需求。
例如,某个大数据应用需要跑1个 Driver 容器+10个 Executor 容器。如果容器以顺序的方式一个一个进行调度,在启动最后一个 Executor 容器时,由于资源不足而调度失败,最终造成服务无法启动。虽然,前面创建好的9个 Executor 容器运行正常,但平台无法提供该大数据应用的正常服务,从资源占用上来看也是一种浪费情况。
或者,当同时提交多个作业任务后,可能会因为资源不足而造成死锁,进而导致集群实际资源被占满,最终造成所有作业任务都无法运行的最坏情况。
待实现 GPU 资源共享切分
由于开源的 Kubernetes 本身对 GPU 提供的管理能力比较弱,无法实现 GPU共享按需调度的能力要求。
每个容器可以请求一个或多个 GPU,不支持 GPU 的资源切分
K8S 节点必须预装相应的驱动程序
必须预装 nvidia-docker 程序
在容器中,要想调用 NVIDIA 的 GPU ,需要通过 nvidia-docker 调用。nvidia-docker 是一个可以使用 GPU 的 docker,它在 docker 上做了一层封装,通过 nvidia - docker - plugin 将 GPU 调用到 docker 上。
从 K8S 1.8版本后,推荐使用 Device - Plugins 方式来调用 GPU 。
待增加大数据等场景基因
Kubernetes 的核心工作负载面向无状态应用、微服务应用等互联网类应用进行设计,对水平伸缩、滚动升级有支持比较好。而到了大数据和高性能计算领域,想直接使用 Kubernetes 完成相应的作业和任务是非常困难。
待完善传统方案资源隔离性
随着 Hadoop 生态崛起后,在资源的隔离方面 Yarn 就开始使用 cgroup 用来实现对 CPU 资源隔离管理,借助 JVM 的内存隔离机制从而实现对内存资源隔离管理;对于磁盘 IO 和网络 IO 的隔离,目前社区还在讨论中;对于文件系统环境的隔离,始终也无法做到完整的文件系统隔离方案。
从整体上看,Yarn 的资源隔离能力比较弱,这就造成了当多个任务运行到同一个工作节点上时,不同任务之间会存在资源抢占的问题,不同任务之间相互影响。
待增强弹性 按需扩容
大数据应用的高峰往往有明显的周期性特征。例如,实时计算资源消耗主要在白天。但大数据资源管理平台普遍缺乏弹性管理能力,无法按应用所需进行快速扩容,为了应对业务高峰和突发的计算任务,只能通过预留出足够多的资源方式来保证作业任务能够正常运行。
解决方案
从2020年开始,越来越多的大数据、高性能计算等业务开始往 K8S 迁移。博云智能算力引擎,通过引入组调度、公平调度等方式,实现了面向作业进行调度,解决原生 K8S 调度器面向 Pod 调度的问题;通过引入CNCF批量计算项目volcano,实现大数据生态作业、队列管理能力;通过引入博云容器云平台,实现了 GPU 调度能力、资源隔离和资源抽象化供给能力。从而,进一步加强容器作为资源平台的能力形成,为大数据、人工智能、高性能计算等场景提高算力服务做好了准备。
博云智能算力引擎整体由三部分组成:
业务层:由业务软件来调用博云智能算力引擎的接口,达到作业任务的批量计算和编排调度的管理要求;
调度层:由博云智能算力引擎来提供整体的调度、运算等服务能力;
资源层:由大量物理机或虚拟机为博云的企业级 K8S 集群提供为计算赋能。
实现灵活的作业调度算法
基于以下原则对作业进行排队,提升整个集群的资源利用率和作业吞吐量。
集群资源使用情况
作业提交时间
作业资源申请量
作业优先级
作业排他性
作业防饿死
实现 GPU 多维调度能力
平台实现了 GPU 的统一管理、多维隔离、资源共享等调度能力。支持多个节点可以配置不同数量、不同类型的 GPU 卡,实现统一 GPU 卡管理;支持租户或namespace 级别的 GPU 资源隔离,支持按照 GPU 卡类型进行隔离;支持多个业务共享 GPU 卡,支持 GPU 显存隔离,提升 GPU 卡资源利用率。
实现基于 MPI 类型作业
一般一个运行的 MPI 作业,由 master/worker 两部分组成,master 负责启动 mpirun 命令,worker 负责执行真正的计算作业。
平台通过对多个 pod 模板定义设置,实现分别对应 master/worker 的定义。借助 gang scheduling,保证作业中的所有 pod 能够同时启动,已实现作业的管理。支持作业生命周期管理功能,当 mpirun 结束时,结束整个任务。
实现基于 Spark 框架作业
自 Spark 2.3版本开始,原生支持在 Kubernetes 中部署。
借助容器的优势,将运行时打包进镜像中,可以加快分发速度并提升可移植性。借助 Kubernetes 的优势,能够实现容器化应用的快速部署、弹性扩容、性能监控、日志收集等管理功能。
实现队列和优先级抢占
将整个集群的资源分配到不同的队列中,让不同的用户可以按需配置使用不同的队列。当某队列中资源空闲时,可以提供给另一个队列中的作业使用。
当同时运行的作业众多时,平台可以实现高优先级的作业可以抢占低优先级的作业资源,从而实现提前调度管理。同时,平台也能够避免低优先的任务“饿死”,长时间得不到运行。
实现高性能的容器网络
大数据、超算等场景下,需要在短时间启动数以千计的计算实例并运行,这就对容器网络性能提出了更高的要求。
博云自研的 BeyondFabric 网络方案,经历了5个版本的迭代,已经在众多客户生产环境中稳定运行。目前,BeyondFabric 网络方案已实现对计算业务中的启动时间、网络带宽、网络就绪时间等指标的高性能支撑。
同时,BeyondFabric 网络能够为 Windows 系统提供更优秀的容器网络性能。
实现用户资源深度隔离
在租户层面,平台提供多租户共享底层物理资源(计算、存储、网络),做到不同租户的应用、数据、虚拟网络的隔离,对于租户自有的应用,租户可以自由选择隔离或者打通。
在资源层面,Docker 在一台 Linux 上启动多个在独立沙箱内运作的应用,相互不影响。对不同容器的 CPU、内存、网络、存储、进程等进行隔离。
实现资源弹性按需扩容
弹性伸缩是容器云的一个重要特性,也是实施容器云的一个重要业务场景。借助容器云的弹性能力,实现业务高峰时的资源快速扩容,避免为应对业务高峰预留过多的资源。
应用场景
HPC 高性能计算作为传统分布式计算模式的代表,在工业仿真、视觉渲染、气象环境、石油勘探、科研课题等诸多领域依然有着广泛的应用。
随着云原生技术的爆发,Kubernetes 作为云原生应用编排、管理的工具, 被越来越多的应用所接受和选择。众多用户开始希望能将 HPC 应用迁移到容器中运行,通过 Kubernetes 强大的功能来进行作业管理。
工业仿真
某用户有大量基于 Windows 的 HPC 应用,在迁移到容器环境之前,经常遇到资源占用高,作业没有隔离,维护需要后台手动操作等情况。
伴随 HPC 应用迁移到容器云后,平台通过优化作业任务,实现缩短计算时长;平台提供健全资源隔离,降低了不同部门因提交作业所造成的数据安全风险,大大提升了运行效率。实现了单次作业提交创建实例数从原来的 300+,提升到现在 1000+,使用内存资源约 15-20T 的规模。
视觉渲染
用户当前渲染业务还是以单机服务为主,现有软件对批量计算作业调度不够灵活,对集群控制能力也比较差,作业配置、创建、释放还都是以手工操作为主。
通过对业务的容器化改造,实现资源高性能调度、秒级弹性伸缩、GPU 统一管理等能力,轻松应对大规模的渲染需求。
方案优势
博云智能算力引擎解决方案,基于容器技术实现了高性能计算场景的统一调度管理平台,方案为上层各类超算业务提供了大数据、人工智能及云原生作业编排等技术服务。该方案具有如下技术优势:
统一的资源管理
支持 Linux/Windows 计算资源池
支持 GPU 计算
支持批次、节点组管理
提升资源利用率
灵活的调度机制
支持 gang-scheduling 机制
支持主流的调度算法
支持作业防饿死、排他性等机制
提升作业吞吐率
高效的作业提交
支持 HPC、大数据、人工智能等作业
支持 MPI、TensorFlow 快捷提交
通过 DAG 模式支持 ETL 等常规作业
作业以容器运行,提升作业隔离性
多样的排队策略
多队列管理,支持资源抢占
支持设置优先级
支持队列可视化
全面的数据可视
对接 S3 等存储系统
实时在线查看数据
集中的日志告警
在线查看作业日志
在线查看作业监控数据
在线配置告警规则
完善的租户体系
划分租户资源
租户数据隔离
操作权限审计
兼容全信创生态
支持 X86、海光、ARM 平台
支持中标麒麟、统信等操作系统
已获取主流认证证书
总结
通过容器化技术,博云智能算力引擎解决方案充分利用容器化技术,使大数据、人工智能、高性能计算等场景在容器化技术的应用下,进一步提升了资源使用效率和降低运维管理复杂性,使云原生技术价值得到进一步释放,支撑高性能等计算场景下的企业完成数字化转型。