当下 AI 大模型如火如荼的发展,许多厂商开始构建起基于 GPU 的大规模深度学习训练集群。随着算力需求的扩大,一个能对 GPU 资源进行统一高效利用的 AI 平台,越来越成为各 AI 团队降本提效的重要武器。
构建一个能管理大规模 GPU 集群资源的 AI 平台,主要会遇到如下几个痛点问题:
- 资源调度:算力规模不断扩大,而训练任务的计算需求又多种多样,如何处理任务和算力的关系以最大化集群资源使用?
- 使用效率:集群使用有峰谷差异,同时又要应对突发任务的需求,如何兼顾时效性和集群整体效率?
- 迭代适配:集群会有升级迭代,在调整算力规模、类型、使用规则等场景下,如何让平台快速适配,尽可能降低切换成本?
针对上述问题,幻方 AI 在自建的萤火集群上进行多年的研发与测试,积累了一套高效管理 GPU 集群资源的 AI 训练平台方案,名叫 HAI Platform。其以任务级分时调度共享 AI 算力的理念将集群零散资源进行整合再分配,成功支持在 1500+ 计算节点上稳定运行深度学习训练和其他多类型任务,日常算力占用率 95% 以上,日常 GPU 使用率 75% 以上,计算和存储节点间的数据吞吐 7TB/s 以上,服务了上百个 AI 团队。
现在,幻方 AI 将正式开源 HAI Platform,将这套久经考验的 AI 训练平台服务于更广阔的 AI 社区。HAI Platform 可以被部署在私有集群或公有云的 GPU 资源中,帮助您高效利用 GPU 集群资源,提升团队整体研发效率。我们希望让更多“想象力”和“创造力”生长,期待与各方科学家及开发者们一同共建 AI 时代。
产品地址:https://github.com/HFAiLab/hai-platform
产品文档:https://hfailab.github.io/hai-platform/
安装与设置
使用 HAI Platform,首先需要如下基础设施:
- 一个部署 K8S 的算力集群,包括管理节点、计算节点、服务节点(用于服务部署、数据库、监控等);
- 一个或多个存储集群,让所有计算节点可访问的文件系统,存储信息包括代码,数据,日志,配置文件等;
- 算力集群与存储集群之间所有节点通过高速网络互联,建议使用 RDMA 。
接下来,您可以按照开源仓库中 HAI Platform 搭建指南进行安装和部署。
任务调度
任务是 HAI Platform 使用的基本单位,而非用户。所有用户提交的任务都由 HAI Platform 统一管理和调度。
幻方 AI 提出分时调度理念对集群资源进行管理。用户提交任务,如运行 python / bash 代码,启动开发容器等,由平台根据当前资源需求、集群忙闲程度等进行任务的中断和加载。任务代码需要遵循平台编码规则以确保可以断点续跑,具体流程如下:
- 接受集群的打断信号;
- 保存 checkpoint(模型参数,优化器参数等);
- 通知集群打断;
- 从 checkpoint 恢复,继续运行。
注意! 部署 HAI Platform 的集群不会将 GPU 资源池化,而是以计算节点为基本单位,根据资源类型、网络区域等条件进行分类标记。HAI Platform 鼓励用户一次性用满多张 GPU,进行并行训练。 用户提交任务时需选定节点数量 n,则该任务可获得 n 的整数倍个 GPU,比如在8卡计算节点上提交使用4个节点的任务,则该任务会获得32张 GPU 进行并行训练。
更详细的内容可以阅读《分时调度》。
用户管理
HAI Platform 提供以配额的方式记录集群的各类资源,通过优先级管理用户的使用权限。例如:某用户在 NORMAL 优先级上拥有10个计算节点的配额,其在 HAI Platform 上提交若干个任务,则最多同时以 NORMAL 优先级调度10个计算节点运行。算力资源优先满足高优先级用户的训练需求,同优先级内则交替使用集群算力资源。
同时,每个用户都可以归属于某一个用户组。计算资源和优先级配额是按用户为单位进行分配的,而同组的用户可以共享自定义环境、私有数据存储。
此外,HAI Platform 还提供了管理员用户身份,其有权限执行用户创建、停用、归档等操作,调整各类资源和优先级配额,管理后台开发容器等。
环境管理
部署 HAI Platform 的集群会包含基础环境和用户自定义环境两种环境管理模式:
- 基础环境由平台统一管理,包含大部分主流依赖包,任务运行时默认加载。通常根据系统、GPU 驱动及 CUDA 版本等要求统一管理若干个基础环境。基础环境供平台所有用户共享;
- 自定义环境由用户自行安装依赖,可以基于基础环境进行扩展。自定义环境可以在同组内共享。
import haienv
haienv.set_env('env_name')
两种环境都可以通过 haienv
工具进行管理,适用于各种任务场景。通过基础环境的构建,我们希望尽可能降低 AI 研发前期的环境构建成本。
更详细的内容可以阅读《环境配置》。
可视化交互
为了方便用户与 GPU 集群的交互,HAI Platform 提供了用户界面,HAI Platform Studio ,其主要功能包括但不限于:
- 管理和启动基于 JupyterLab 的开发容器,配合 Jupyter 插件,可以进行代码调试或任务提交;
- 管理提交的任务,支持任务的实时监控、日志分析和任务状态管理;
- 集成了讨论区、任务性能监控、任务调度管理等功能。
另外,HAI Platform Studio 子应用 /monitor
集成了一定的监控和管理能力,包括:
- 用户及任务管理:创建用户;修改用户分组、Quota;管理用户开发容器和任务;
- 节点管理:查看分组节点以及各个节点的详细信息。
更多内容可以阅读开源仓库:https://github.com/HFAiLab/hai-platform-studio。
数据管理
部署 HAI Platform 的集群会将训练数据存储在文件系统中。训练中的任务会实时从文件系统中读取数据,流转到计算节点。这里,优良的文件系统将是提高 GPU 利用率,进而提升集群整体效率的决定性因素之一。
为了最大化 GPU 利用率,降低数据读取的成本,幻方 AI 自研了高速文件系统 3FS,其专门针对深度学习训练中样本读取的场景进行优化,能支持计算和存储节点间 7TB/s 以上的数据吞吐。3FS 需要用户将原始数据中较多的小文件聚合成大文件进行存储,推荐使用 FFRecord 格式规范来聚合文件。