本文分享自华为云社区《使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能》,作者:云容器大未来。
AI 技术现状及发展趋势
过去十余年,依托全球数据、算法、算力持续突破,人工智能全面走向应用,已成为社会生产生活的支柱性技术。2020年后,当自动驾驶、人脸识别等热门应用发展逐渐放缓、社会对人工智能整体发展预期日益冷静时,大模型技术潜力的释放以最振聋发聩的方式宣告了人工智能第三次高速发展期远未结束,当前正是攀登发展高峰的关键时期。
尽管人工智能技术成熟度正在不断提高,但目前众多企业进行人工智能应用仍然面临着AI应用部署存在困难、投入产出比不达预期等问题。我们认为,企业通过配备适宜于AI开发的高性能软硬件基础服务,有望能够利用底层技术的复用和算力资源的灵活配置优化AI开发和部署流程,提升AI的价值创造能力。
大模型飞速发展,算力需求不断提升,高效利用人工智能芯片成为新的技术焦点
芯片作为算力基础设施,是推动人工智能产业发展的动力源泉。随着人工智能算法的发展,大模型、视频图像解析、语音识别等细分领域算力需求呈爆发式增长,通用芯片已无法满足需求。由于GPU比CPU更适合处理企业数据中心和超大规模网络中AI和机器学习所需的许多计算,数据中心对GPU的需求一直不断增长。
在实际应用人工智能的过程中主要面临基础设施、AI算法及数据等方面的阻碍。在基础设施方面,企业的IT基础设施在海量数据参与运算和采取分布式架构的条件下可能面临GPU算力不足的问题,从而降低企业AI应用的可用性;在算法训练推理领域,以“大模型”为代表的人工智能算法模型体现出模型参数的数量不断增加的趋势,高度复杂化的模型融入应用程序后可能带来训练、推理框架的适配难度的增加,而在交付和部署后对模型的修改也会给用户带来服务中断等问题。为顺应AI“大模型”时代的发展,亟需解决如下技术挑战:
- 提升GPU资源率:ChatGPT推动AI大模型进入万亿参数时代,远超单GPU芯片能力,训练框架需要将训练任务分发至不同GPU分别运行,并在GPU间共享结果,大规模的GPU集群应运而生;在当前GPU算力稀缺且价格高昂的背景下,如何统一管理数据中心构建规模GPU集群并汇聚分散的GPU算力,根据大模型任务按需分配GPU算力,提升整体的GPU算力资源利用率,一直是云计算AI领域关注的技术焦点;
- 统一的AI算力调度平台:近几年人工智能快速发展, 各种深度学习框架不断涌现,谷歌、微软、亚马逊和Meta等巨头, 推出了TensorFlow、CNTK、MXNet、PyTorch和Caffe2等深度学习框架,百度、华为推出了 PaddlePaddle(飞桨)、MindSpore,中科院计算所、复旦大学研制了 Seetaface、FudanNLP;面对众多AI开源框架及组件,亟需统一的调度平台降低AI训练任务的部署复杂性、提升AI训练、推理任务效率。
UCS (On-Premises) 搭载 xGPU&Volcano 智能调度引擎,加速数据中心 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资源利用率提升:随着大模型爆发式发展,金融、制造、互联网等行业纷纷构建行业大模型,需要采购大量的GPU资源满足业务诉求,但是在实践调研发现,很多AI服务虽然使用GPU,但是GPU的利用率普遍不高(显存平均小于30%,GPU算力小于1%),为了充分利用紧张而宝贵的GPU资源,华为云通过GPU虚拟化、华为云云原生操作系统HCE(Huawei Cloud EulerOS)等核心技术,提供GPU的显存、算力隔离能力,促进不同的AI任务可充分使用单张GPU,充分压榨GPU的算力资源,并结合高速网络,促进AI任务队列对GPU资源的充分共享,提升IDC的整体GPU资源利用率;
- 统一的AI算力调度平台:结合华为云智能调度引擎volcano、智能洞察引擎等能力,快速构建云原生AI基础设施平台,支持Tensorflow、Pytorch、MxNet、MindSpore等通用AI训练、推理框架及丰富的AI调度策略,提升分布式训练的能力,同时基于云原生技术的开发集成及部署,结合底层硬件基础设施,构建“应用+资源”感知调度能力,促进AI应用及核心业务应用的共同运行,帮助企业敏捷、高效、安全地利用数据进行大模型应用开发,并在应用部署过程中实现成本优化和灵活的版本控制。
华为云xGPU技术,原生兼容AI容器应用,实现GPU算显隔离、故障隔离
GPU虚拟化技术从2000年代初期硬件虚拟化到基于API的虚拟化术,再到完全虚拟化和基于容器的虚拟化的发展,在云计算、AI领域扮演着越来越重要的角色,无论GPU技术怎样发展,其目的都是在提高虚拟化的性能、隔离性及用户体验,归纳起来,GPU虚拟化技术在大模型时代,均需要解决资源共享隔离、算力隔离、显存隔离、故障隔离的场景问题:
- 整体资源共享:任务A独占GPU资源,但只用了GPU20%的算力资源,30%的显存资源,任务B排队准备,无GPU资源可用,导致超70%的GPU处于空闲状态,后续的任务只能等待;
- 算力隔离:任务A与任务B共用一块GPU资源,由于任务A对算力使用频繁波动,任务B无法获取充足的算力资源,导致任务B计算超时;
- 显存隔离:任务A和任务B共用共用一块GPU资源,按照程序设计,任务A使用8G显存,任务B使用6G显存,某一时刻,任务A图像占用10G显存,导致任务B运行失败,故障退出;
- 驱动故障:任务A和任务B共用一块GPU资源,任务A运行CUDA报错,导致任务B故障退出。
为了在容器场景下充分使用GPU资源,解决上述提到的算力隔离、显存隔离、故障隔离,华为云在HCE(Huawei Cloud EulerOS)内核基础上研发了xGPU技术,针对人工智能场景,实现多个AI容器共用一张显卡,同时具备业务的安全隔离,保障多组任务有效使用同一张GPU物理卡,大幅度提升AI训练任务在UCS(On-Premises)集群的运行体验,目前xGPU能力已经完全落地在UCS(On-Premises)平台之上,如下是整体架构:
xGPU不仅实现单卡GPU虚拟化,还原生兼容kubernetes生态:
- 深度兼容kubernetes: 当前主流的训练框架像Tensorflow、MxNet、MindSpore等针对kubernetes平台开发了operator,被各大头部互联网及金融机构广泛采用于内部的AI训练平台的关键工具,xGPU技术原生与kubernetes深度兼容,无侵入式修改厂商驱动和代码库,运行时无需替换CUDA库;适配标准的Containerd工作方式,容器业务无需任何改造。
- GPU资源灵活隔离: xGPU实现了物理GPU的资源任意划分,根据训练任务的配置要求按照不同比例灵活隔离;可从算力、显存两个维度进行细粒度划分,达到MB级显存隔离、5%粒度的算力划分。
xGPU实现的是单卡级别的资源隔离,而AI任务往往是以多组队列的形态进行下发,以Tensorflow任务为例,做单次训练需要运行11个pod(1个PS Pod + 10个 Worker Pod),且需要11个Pod均启动成功,训练任务才可进行,如果因为某一张GPU显存不足导致其中的一个Pod运行失败,就会导致整个训练任务的失败,这样导致的资源及训练成本加大,所以针对AI类训练任务,就需要一个针对kubernetes平台资源的智能调度引擎Volcano。
Volcano兼容主流训练框架,内置丰富AI任务调度算法策略,实现精细化算力资源管理
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开发平台白皮书》