许多企业在处理复杂的计算任务时,不惜重金购买高性能 GPU,但这些昂贵的硬件资源往往难以在用户之间实现高效共享。本文探讨了采用弹性配额策略,来解决静态分配 GPU 资源所引发的问题。与传统的固定配额方式不同,弹性配额允许任务在需要时使用超出其配额的 GPU 资源,从而有效减少资源的闲置。
静态分配
的限制
在 d.run 的开发过程中,团队成员发现,利用虚拟化、容器以及高性能计算领域的某些原理,可以实现 GPU 资源的池化管理,并从底层计算环境中高效调度 GPU 资源,进而实现工作负载的灵活转移以及对人工智能基础设施的大规模高效管理。这一突破性的解决方案,帮助 AI 工程师团队构建了全新的管理模式,带来了显著的工作效率提升,使得他们对基础设施的利用率实现了更为精准的掌控与监控。
然而,深度学习任务与企业在虚拟机上运行的传统任务不同,真正高效的人工智能基础设施需要全面支持 AI 工作负载中的计算特性。两者有何不同?
首先,我们来看一下 AI 开发工程师主要从事的两种工作:
1、开发:这一阶段包括模型的交互式开发和调试。这一过程需要 GPU 资源能够即时响应并且持续可用。
2、训练:这一阶段涉及模型参数的调整。训练会话往往耗时较长,需要相当大的 GPU 算力。在这一过程中,性能和训练速度是关键因素,直接影响到模型训练的效率和质量。
在 AI 开发过程中,工程师通常只需要进行少量的交互式会话,这时静态 GPU 资源分配是合适的。但是,训练任务对 GPU 的需求则更加多变——AI 工程师可能同时开展多个训练任务(如进行超参优化),而有时则可能完全不进行训练。静态的分配方式无法实现进一步的资源共享,面对这种不断变化的需求,就显得力不从心。举例来说,即使其他 AI 工程师所拥有的 GPU 资源处于空闲,你也无法使用它们。这样会导致分配的 GPU 资源要么过剩,要么不足。
实施
弹性配额
因此,「DaoCloud 道客」的开发团队通过执行弹性配额策略来解决这一难题,通过 HAMi 实现了 GPU 资源的划分,配合 kube-scheduler 的 ElasticQuota 能力,规定不同任务使用配额的基础值(保证基本性能的最低限度的资源)和最大值,为 GPU 资源的调度提供参考。本质上,弹性配额使 AI 工程师摆脱了静态分配的限制,允许用户在空闲 GPU 可用时,使用超过配额数量的 GPU 资源。
因为弹性配额支持更多任务同时运行,因此 AI 工程师可以进行更多实验。这提高了工程师的生产力以及工作效率,同时提高了整个集群的 GPU 利用率。
至于弹性配额的运作方式,d.run 基于 Kubernetes 架构提供了一个参数矩阵:
1、项目优先级:允许组织或 IT 管理员定义项目并设定每个项目的优先级。
2、配额:为每个项目定义 GPU 的静态分配或弹性配额。
在此之后,任务将转换为队列进入我们的调度程序。与静态分配的任务相比,弹性配额的任务可以使用超出其配额数量的 GPU 资源。这意味着,即便队列中的资源需求超过了配额,系统也会优先分配可用资源给队列中的任务。如果任务被提交到配额不足的队列,且没有足够的可用资源来启动它,在考虑优先级和公平性的前提下,调度程序会智能化地暂停超出配额的队列中的任务。
弹性配额本质上打破了固定分配的界限,提高了工作效率,让使用者不再受限于同时运行的任务数量和可使用的 GPU 资源。对于需要大量 GPU 资源来支持任务运行的 AI 时代,这是一个值得在真实业务场景中实践并继续完善的技术方案。
热门推荐
访问以下网址,或点击文末【阅读原文】立即体验
DaoCloud 公司简介
网址:www.daocloud.io
邮件:info@daocloud.io
电话:400 002 6898