北京不眠夜@博云
作者北京不眠夜@博云2021-08-13 10:27
产品经理, 公司

支持高性能计算场景,借助容器云打造智能算力引擎

字数 3965阅读 1133评论 1赞 0

随着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上。

从K8S1.8版本后,推荐使用Device-Plugins方式来调用GPU。

待增加大数据等场景基因

Kubernetes的核心工作负载面向无状态应用、微服务应用等互联网类应用进行设计,对水平伸缩、滚动升级有支持比较好。而到了大数据和高性能计算领域,想直接使用Kubernetes完成相应的作业和任务是非常困难。

待完善传统方案资源隔离性

随着Hadoop生态崛起后,在资源的隔离方面Yarn就开始使用cgroup用来实现对CPU资源隔离管理,借助JVM的内存隔离机制从而实现对内存资源隔离管理;对于磁盘IO和网络IO的隔离,目前社区还在讨论中;对于文件系统环境的隔离,始终也无法做到完整的文件系统隔离方案。

从整体上看,Yarn的资源隔离能力比较弱,这就造成了当多个任务运行到同一个工作节点上时,不同任务之间会存在资源抢占的问题,不同任务之间相互影响。

待增强弹性按需扩容

大数据应用的高峰往往有明显的周期性特征。例如,实时计算资源消耗主要在白天。但大数据资源管理平台普遍缺乏弹性管理能力,无法按应用所需进行快速扩容,为了应对业务高峰和突发的计算任务,只能通过预留出足够多的资源方式来保证作业任务能够正常运行。

解决方案

从2020年开始,越来越多的大数据、高性能计算等业务开始往K8S迁移。 我司 智能算力引擎,通过引入组调度、公平调度等方式,实现了面向作业进行调度,解决原生K8S调度器面向Pod调度的问题;通过引入大数据类核心控制器,实现大数据生态作业、队列管理能力;通过引入容器云平台,实现了GPU调度能力、资源隔离和资源抽象化供给能力。从而, 进一步加强容器作为资源平台的能力形成 ,为大数据、人工智能、高性能计算等场景提高算力服务做好了准备。
智能算力引擎整体由三部分组成:

· 业务层 :由业务软件来调用智能算力引擎的接口,达到作业任务的批量计算和编排调度的管理要求;

· 调度层 :由智能算力引擎来提供整体的调度、运算等服务能力;

· 资源层 :由大量物理机或虚拟机为的企业级K8S集群提供为计算赋能。

实现灵活的作业调度算法

基于以下原则对作业进行排队,提升整个集群的资源利用率和作业吞吐量。

· 集群资源使用情况
· 作业提交时间
· 作业资源申请量
· 作业优先级
· 作业排他性
· 作业防饿死

实现GPU多维调度能力

平台实现了GPU的统一管理、多维隔离、资源共享等调度能力。支持多个节点可以配置不同数量、不同类型的GPU卡,实现统一GPU卡管理;支持租户或namespace级别的GPU资源隔离,支持按照GPU卡类型进行隔离;支持多个业务共享GPU卡,支持GPU显存隔离,提升GPU卡资源利用率。

实现基于MPI类型作业

一般一个运行的MPI作业,由master/worker两部分组成,master负责启动mpirun命令,worker负责执行真正的计算作业。

平台通过对多个pod模板定义设置,实现分别对应master/worker的定义。借助gangscheduling,保证作业中的所有pod能够同时启动,已实现作业的管理。支持作业生命周期管理功能,当mpirun结束时,结束整个任务。

实现基于Spark框架作业

自Spark2.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平台
· 支持中标麒麟、统信等操作系统
· 已获取主流认证证书

总结

通过容器化技术,智能算力引擎解决方案充分利用容器化技术,使大数据、人工智能、高性能计算等场景在容器化技术的应用下,进一步提升了资源使用效率和降低运维管理复杂性,使云原生技术价值得到进一步释放,支撑高性能等计算场景下的企业完成数字化转型。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论1 条评论

北京不眠夜@博云北京不眠夜@博云产品经理, 公司
2021-08-13 11:24
本方案中采用了开源组件volcano,详见 https://github.com/volcano-sh/volcano/
Ctrl+Enter 发表

相关文章

相关问题

相关资料

X社区推广