在自然界,我们经常看到大型野生动物被小小的苍蝇所困扰,不得不花费大量时间驱赶它们。类似地,复杂的项目也经常被简单的问题所阻碍。随着深度学习在企业中的快速发展,我们发现,这些项目的管理者、开发者和运维者们经常面临一个核心问题—— GPU 资源调度——即无法有效管理其 GPU 资源。企业虽然投资了昂贵的 GPU 来执行复杂的计算任务,但在用户之间实现这些资源的有效共享却成了一个挑战。
在与多家企业的沟通交流中,「DaoCloud 道客」发现,他们往往从小型本地 GPU 资源开始投资。这些企业会为他们的 AI 工程师配备专用的 GPU 工作站,每个工作站都包含 1-2 个专用的 GPU,并且预装了调度、训练和推理等工具,能够执行复杂的机器学习任务。然而,几个月后,IT 部门通常会发现这种方案并不可持续,因为这些工程师很快就需要更强大的计算能力来满足他们的工作需求。
一些公司尝试通过采购 GPU 服务器并分配给专门的工程师团队来解决 GPU 资源的共享难题。尽管团队成员努力实现内部资源共享,却还是经常陷入争夺 GPU 的困境,最终只能依赖 Excel 表格或 Slack 等工具手动协调资源分配。这种做法不仅效率低下,还容易出错,影响了团队的整体工作效率。
因此,这显然不是一个有效的方法,更谈不上可扩展。
AI 工程师消耗算力的方式也使得资源共享变得困难。他们可能在几周内同时开展多个短期实验,随后几周只进行少数几个长期实验,甚至在某些时期完全不进行任何实验。这种不连续且波动的资源使用模式导致,如果某个工程师是 GPU 资源的独家“所有者”,那么资源利用率将非常低——要么出现资源闲置,要么面临算力短缺的问题。
高效算力利用
面对这一挑战,「DaoCloud 道客」开始探索更高效的 GPU 资源共享方式,并发现了两种有效的解决方案:Kubernetes 和高性能计算 (HPC) 调度程序。然而,这两种方法都存在局限性。
Kubernetes 稳定、兼容的优势使它适用于任何 IT 组织的生态系统,但其默认调度程序并不是为批量工作负载而构建的,它主要应用于服务。举例来说,它缺乏支持多队列和优先级的高效队列机制,以及先进的自动化抢占和恢复功能。此外,Kubernetes 在启动和管理多节点分布式训练方面也不够简便有效,无法轻松处理亲和性配置,如 CPU-GPU 亲和性、GPU-GPU 亲和性等,而这恰恰是提高计算任务性能的关键。
GPU 资源调度的第二种方案是使用高性能计算(HPC)的工具,例如 Slurm、SLF、SGE 等。然而,这些工具存在效率不高的挑战。它们主要面向 HPC 领域的专家,操作相对复杂,需要处理包含众多参数和选项的API。此外,这些工具的配置和维护同样复杂,通常需要深入阅读大量文档并尝试不同的参数组合。因此它们的普遍适用性并不高。
为了解决这个问题,「DaoCloud 道客」在 d.run 的方案中为 Kubernetes 构建了一个面向 AI/ML 工作负载管理的指挥台。利用 Kueue 的能力,它先将复杂的计算任务以任务队列的形式进行排序,再根据任务的优先级和计算节点的资源情况进行动态调度。为了应对不同算力场景需求,d.run 在 Kubernetes 原生调度器的基础上,还通过 Scheduler plugins 引入了公平调度、亲和、组调度、紧凑等调度算法,来保证任务的稳定、高效运行。此外,还能实现自动暂停/恢复、多节点训练等高级功能。
在解决 GPU 利用率的难题时,优化调度无疑是一个关键的突破口,这也是云原生技术在 AI 时代作为基础设施的核心优势。通过云原生赋能算力调度,企业能够实现算力资源的更优配置,确保每个任务都能在合适的硬件资源上运行。
热门推荐
访问以下网址,或点击文末【阅读原文】立即体验
DaoCloud 公司简介
网址:www.daocloud.io
邮件:info@daocloud.io
电话:400 002 6898