本文分享自华为云社区《使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能》,作者:云容器大未来。
过去十余年,依托全球数据、算法、算力持续突破,人工智能全面走向应用,已成为社会生产生活的支柱性技术。2020年后,当自动驾驶、人脸识别等热门应用发展逐渐放缓、社会对人工智能整体发展预期日益冷静时,大模型技术潜力的释放以最振聋发聩的方式宣告了人工智能第三次高速发展期远未结束,当前正是攀登发展高峰的关键时期。
尽管人工智能技术成熟度正在不断提高,但目前众多企业进行人工智能应用仍然面临着AI应用部署存在困难、投入产出比不达预期等问题。我们认为,企业通过配备适宜于AI开发的高性能软硬件基础服务,有望能够利用底层技术的复用和算力资源的灵活配置优化AI开发和部署流程,提升AI的价值创造能力。
芯片作为算力基础设施,是推动人工智能产业发展的动力源泉。随着人工智能算法的发展,大模型、视频图像解析、语音识别等细分领域算力需求呈爆发式增长,通用芯片已无法满足需求。由于GPU比CPU更适合处理企业数据中心和超大规模网络中AI和机器学习所需的许多计算,数据中心对GPU的需求一直不断增长。
在实际应用人工智能的过程中主要面临基础设施、AI算法及数据等方面的阻碍。在基础设施方面,企业的IT基础设施在海量数据参与运算和采取分布式架构的条件下可能面临GPU算力不足的问题,从而降低企业AI应用的可用性;在算法训练推理领域,以“大模型”为代表的人工智能算法模型体现出模型参数的数量不断增加的趋势,高度复杂化的模型融入应用程序后可能带来训练、推理框架的适配难度的增加,而在交付和部署后对模型的修改也会给用户带来服务中断等问题。为顺应AI“大模型”时代的发展,亟需解决如下技术挑战:
华为云分布式云原生UCS服务,是面向分布式云场景下的新一代云原生产品,提供UCS (Huawei Cloud)、UCS (Partner Cloud)、UCS (Multi-Cloud)、UCS (On-Premises) 以及UCS (Attached Clusters) 等产品,覆盖公有云、多云、本地数据中心、边缘等分布式云场景。其中,华为云UCS (On-Premises) 服务是在大规模分布式、高安全合规、高性能的互联网应用驱动下,产生的新一代集开发运维、发布管理为一体的云原生平台,支持将容器管理能力延展至用户数据中心,提供云上云下一致的操作体验。针对用户在本地本地数据中心AI计算的诉求,用户可通过UCS(On-Premises)提供的GPU虚拟化、AI任务管理及调度能力,轻松应对大模型时代的GPU资源利用率及统一的AI框架调度平台的技术挑战:
GPU虚拟化技术从2000年代初期硬件虚拟化到基于API的虚拟化术,再到完全虚拟化和基于容器的虚拟化的发展,在云计算、AI领域扮演着越来越重要的角色,无论GPU技术怎样发展,其目的都是在提高虚拟化的性能、隔离性及用户体验,归纳起来,GPU虚拟化技术在大模型时代,均需要解决资源共享隔离、算力隔离、显存隔离、故障隔离的场景问题:
为了在容器场景下充分使用GPU资源,解决上述提到的算力隔离、显存隔离、故障隔离,华为云在HCE(Huawei Cloud EulerOS)内核基础上研发了xGPU技术,针对人工智能场景,实现多个AI容器共用一张显卡,同时具备业务的安全隔离,保障多组任务有效使用同一张GPU物理卡,大幅度提升AI训练任务在UCS(On-Premises)集群的运行体验,目前xGPU能力已经完全落地在UCS(On-Premises)平台之上,如下是整体架构:
xGPU不仅实现单卡GPU虚拟化,还原生兼容kubernetes生态:
xGPU实现的是单卡级别的资源隔离,而AI任务往往是以多组队列的形态进行下发,以Tensorflow任务为例,做单次训练需要运行11个pod(1个PS Pod + 10个 Worker Pod),且需要11个Pod均启动成功,训练任务才可进行,如果因为某一张GPU显存不足导致其中的一个Pod运行失败,就会导致整个训练任务的失败,这样导致的资源及训练成本加大,所以针对AI类训练任务,就需要一个针对kubernetes平台资源的智能调度引擎Volcano。
Volcano 是业界首个云原生批量计算项目,2019年由华为云捐献给云原生计算基金会(CNCF),也是 CNCF 首个和唯一的孵化级容器批量计算项目,并于近期携手11家合作伙伴启动了Volcano社区共建计划。该项目面向人工智能、大数据、HPC场景提供统一的高性能作业管理,支持丰富的高阶调度策略,包括在离线统一调度、AI弹性训练调度、SLA、作业拓扑、Fairness、负载感知、重调度、抢占、回收等;对Spark、Flink、Pytorch、MPI、TensorFlow等批处理工作负载实现统一生命周期管理,作业依赖、作业内任务依赖管理;在细粒度资源管理方面,Volcano支持min-max队列资源管理,提供队列资源预留、多租户资源租借/抢占的动态资源共享等能力;在异构资源管理方面,Volcano 实现 x86、Arm、GPU、昇腾、昆仑等多元算力的统一调度,并提供CPU/GPU 共享的精细化调度能力,用户可根据业务需求灵活搭配资源,实现最高性价比。
Volcano当前广泛的被华为云内外部客户用于生产环境,在华为内部,Volcano被用于流程IT、终端云等核心AI应用场景;其丰富的调度策略Gang-Scheduling、Task-Topology、IO-Aware、NUMA-Aware等在生产环境的应用,大幅提升分布式训练的调度效率,将算力资源池的利用率从20%提升至60%以上,如今Volcano将作为UCS(On-Premises)服务的重要组件,帮助用户在本地数据中心加速AI任务的训练及均衡提升算力资源利用率,如下将着重回顾介绍下Volcano的关键调度策略:
Gang-Scheduling调度策略是volcano-scheduler的核心调度算法之一,它满足了调度过程中的“All or nothing”的调度需求,避免Pod的任意调度导致集群资源的浪费。具体算法是,观察Job下的Pod已调度数量是否满足了最小运行数量,当Job的最小运行数量得到满足时,为Job下的所有Pod执行调度动作,否则,不执行。
如一个训练场景,假设一个由2个ps容器和4个worker容器组成的AI应用程序需要调度到有限的资源上。当默认调度器尝试调度最后一个工作者容器时,如果没有可用的资源,则调度将失败。作业挂起,因为没有最后一个工作者容器应用程序就无法运行。与此同时,已经排定的容器所占用的资源却没有产出任何东西。
Volcano确保了一组相关的容器可以同时排期。如果出于某种原因,不可能将所有容器排成一组,Volcano不会安排这组。在实践中,将一组内部依赖容器部署到有限资源上的情况并不少见。在这些情况下,Volcano是至关重要的,因为组调度消除了由于资源不足而导致的潜在死锁。Volcano显著提高了负载沉重的集群的资源利用率。
分组调度基于容器组,或代码中所称的“jobs(作业)”。使用分组调度,算法检查每个作业,看是否可以调度整个作业。每个组中的容器称为“tasks(任务)”。当可以调度的任务数量超过设定的阈值时,任务将被调度到各个节点上。这个调度过程在代码中称为“bind nodes(绑定节点)”。
Nunma-Aware调度策略是针对那些对cpu参数敏感、调度延迟敏感的计算密集型作业:如科学计算、视频解码、动漫动画渲染、大数据离线处理等具体场景,volcano通过Resource Reporter上报的节点CPU拓扑及POD使用CPU的NUMA分布,提供NUMA-Aware能力将POD调度至合理的CPU上,有效提升任务的执行效率。
Volcano提供了一组不同的调度算法,比如优先级、域资源公平性(DRF)和binpack,这意味着你可以更容易地处理不同的服务需求。例如,你可能希望在部署应用程序时确保DR和中断隔离。使用Volcano,你可以轻松地部署在不同节点上运行相同应用程序的容器,并且每个节点只有一个pod。在另一个场景中,为了确保某些应用程序不会竞争资源,你可能希望避免将它们部署在同一个节点上。Volcano可以帮助你做到这一点。
UCS(On-Premises)旨在将云上的服务能力延伸至各行业的客户的本地数据中心,结合volcano的AI作业管理及智能调度能力、xGPU的GPU虚拟化能力,帮助用户快速在IDC构建云原生的AI基础设施,更细粒度的使用GPU资源,让用户聚焦AI的业务开发,最大限度释放AI大模型算力潜能。
《人工智能标准化白皮书》(2021版)
《人工智能安全标准化白皮书》(2023版)
《华金证券:AI产业化再加速,智能大时代已开启-GPU行业深度报告》
《艾瑞咨询:2021年中国云原生AI开发平台白皮书》