使用 UCS(On-Premises) 管理您的 GPU 资源池,释放 AI 大模型算力潜能
本文分享自华为云社区《使用 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 开发平台白皮书》
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/5004124503dd2821880f64a5d】。文章转载请联系作者。
评论