一、多机互联:高速通信的物理底座
1. 互联带宽的决策依据
多机训练的本质是分布式计算——不同机器上的 GPU 需要频繁交换梯度数据、模型参数和中间激活值。互联带宽如果成为瓶颈,增加再多的机器也无法线性提升训练速度,反而可能因为通信开销超过计算收益而出现规模不增反降的反常现象。
互联带宽的选型取决于训练任务的通信模式:
数据并行:每台机器持有完整模型副本,仅在每次迭代结束时同步梯度。通信量等于模型参数量乘以梯度精度。对于 7B 参数的模型(使用半精度梯度),每次同步需要传输约 14GB 数据。若希望在 100ms 内完成同步,需要的有效带宽约为 140GB/s——单条 200Gb/s 链路显然不够。
模型并行:模型的不同层分布在不同机器上,每次前向和反向传播都需要跨机传递激活值和梯度。通信频率远高于数据并行,对带宽和延迟的要求更苛刻。
流水线并行:模型按层切分为多个阶段,每个阶段分配一台机器,数据以流水线方式推动。通信量较模型并行少,但对通信延迟的容忍度也较低——任何一个阶段的延迟会连锁影响整个流水线。
2. 互联拓扑的设计
多台一体机之间的互联拓扑决定了任意两台机器之间的通信路径。常见拓扑包括:
- 星型拓扑:所有机器连接到一个中央交换节点。布线简单、管理直观,但中央节点是单点故障源,且所有跨机通信都需经过中央节点,交换机的总吞吐量成为瓶颈。
- 胖树拓扑:在星型基础上增加交换层级,随着规模扩大增加上层交换机的数量,总对分带宽随节点数量线性增长。这是数据中心级别集群的常用方案,但在小规模一体机集群中可能因交换机数量过多而成本不佳。
- 全互联拓扑:每台机器与集群中所有其他机器建立直接连接。通信延迟最低、无拥塞风险,但布线复杂度以呈二次方增长,超过 8 台机器时几乎无法维护。
- 环型拓扑:每台机器仅与左右邻居互联,数据通过多跳转发。硬件成本最低,适合通信模式具有局部性的任务(如流水线并行中数据沿流水线流动)。
对于 4-8 台一体机的典型小集群,胖树或简化的两层星型拓扑在成本与性能之间取得了较好的折中。
3. 远程直接内存访问与内核旁路
跨机 GPU 通信要求低延迟和高带宽——传统 TCP/IP 协议栈的内核态网络处理开销(数据拷贝、上下文切换、协议栈处理)在分布式训练场景中是无法接受的。
远程直接内存访问允许网卡直接读写远端机器的 GPU 显存,CPU 完全不参与数据传输。这带来了两个关键优势:
延迟显著降低:GPU 到 GPU 的数据传输延迟从 TCP/IP 的数十微秒降至个位数微秒。
CPU 零占用:训练进程的 CPU 时间全部用于计算和调度,网络传输完全由网卡硬件处理。
部署远程直接内存访问需要全网设备支持——网卡、交换机、线缆均需兼容该协议。在采购一体机集群的互联设备时,统一规划协议兼容性是前期就需要确认的事项。
二、统一资源池:从独立机器到虚拟算力
1. 资源抽象层的设计
多台一体机互联后,需要将分散的 GPU 资源抽象为一个统一的算力池。资源抽象层的核心职责是:
- 设备发现:自动检测集群中所有可用的 GPU,包括每张 GPU 的型号、显存容量、所处的物理位置(属于哪台一体机、插入哪个扩展槽);
- 资源注册:将发现的 GPU 注册到中心调度器,并持续上报健康状态(温度、功耗、可用显存);
- 拓扑感知:记录 GPU 之间的互联关系——同一台机器内的 GPU 通过高带宽内部互联通信,不同机器间的 GPU 通过远程内存访问网络通信。这些拓扑信息提供给调度器,供其做出就近调度的决策。
2. 资源分配与配额管理
在多用户共享一体机集群的场景中,资源池化之后需要配套的分配与配额机制:
- 项目空间:为每个课题组或业务团队创建独立的资源命名空间,设置 GPU 数量的配额上限;
- 资源预留:对特定的关键任务(如定期的生产模型训练),支持提前预留指定数量 GPU 在某时间段内的独占使用权;
- 动态借用:允许项目在自有配额未用满时"借用"其他项目空闲的资源,借出的资源可随时在项目需要时收回。
3. 存储的统一与分层
算力池化之后,存储也需要统一。不同一体机上的本地高速存储通过分布式文件系统聚合为全局命名空间,训练任务无论被调度到哪台机器,都能访问到相同路径下的数据集和模型文件。
存储的分层策略在集群环境下尤为重要:热数据(当前正在训练的数据集)缓存在本机高速存储中,温数据(近期可能使用的数据集)存放在集群级别的分布式存储中,冷数据(历史实验的检查点和日志)归档到高密度对象存储。作业调度器在放置任务时,优先选择已缓存了所需数据集副本的机器,减少数据拉取时间。
三、跨节点任务调度:拓扑感知与通信优化
1. 亲和性调度
跨节点调度与单机调度的本质区别在于"通信代价"。同样的任务,调度到不同的 GPU 组合上,通信效率可能相差数倍。亲和性调度的核心原则是:
- 优先本机:对于需求 GPU 数量不超过单机 GPU 数量的任务,优先分配到同一台机器内部——利用板内高速互联规避跨机通信;
- 拓扑紧凑:当任务必须跨机时,将所需的 GPU 分配到尽量少的机器上,减少跨机通信的节点数量;
- 邻近节点:若跨机通信无法规避,将 GPU 分配到物理距离最近(网络跳数最少、带宽最高)的机器对上。
2. 通信感知的任务放置
对于已知通信模式的任务(如使用数据并行的训练任务,梯度同步采用 AllReduce),调度器可以预估任务的通信开销并纳入放置决策。例如:
对于 AllReduce 密集的任务,将 GPU 均匀分布到多台机器上可能导致通信开销过高——更优的策略是将任务分配到更少的机器上;对于计算密集但通信稀疏的任务(如推理批处理),通信开销可以忽略,调度器可以充分利用碎片化的跨机 GPU 资源。
3. 故障域感知
多台一体机共享一个资源池带来便利的同时也引入了故障传播的风险。调度器需要将故障域纳入放置决策:
某个用户的高优先级任务和低优先级任务不应分配到同一台机器上——如果低优先级任务因 Bug 导致 GPU 过热或内核崩溃,不应连带影响高优先级任务;需要多机协作的分布式训练任务,应分配在不同的一体机上——如果所有副本都在同一台机器上,该机器宕机导致整个训练任务同时中断。
一体机集群的横向扩展看似是"加机器"的动作,实质是在构建一个分布式的、拓扑感知的、统一调度的算力系统。互联为算力流动提供了物理管道,资源池化消除了单机边界,拓扑感知的调度让任务始终运行在最合适的 GPU 组合上。三者环环相扣,才能将若干台独立的一体机整合为一个真正可用的分布式算力集群。