MLCC: A Congestion Control Technique to Accelerate ML Training
本文提出了 MLCC,一种全分布式拥塞控制技术,通过将网络传输速率与计算周期对齐以实现流交织,从而在共享 GPU 集群中加速 DNN 训练,进而显著减少争用并缩短作业完成时间。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一个规模宏大、高科技的厨房,数十名厨师正试图同时烹饪复杂的菜肴。在这个厨房里,“食材”是数据,“烹饪”是强大的计算机(称为 GPU)所进行的实际数学运算,而“传递食材”则是由于这些计算机之间移动的网络流量。多年来,这个厨房的规则一直很简单,即公平原则:如果两名厨师需要把一个碗传过柜台,他们应该平等地轮流进行。但问题在于,烹饪不仅仅是关于传递碗的过程,更是关于时机的。有时厨师正在切菜(计算),有时则是在等待送货(通信)。如果每个人都试图在同一时刻传递他们的碗,柜台就会被堵塞,碗会发生碰撞,所有人都会陷入等待。这就是机器学习(ML)训练的世界,在这里,巨大的 AI 模型正在被构建。问题在于,当许多 AI 任务同时运行时,它们经常会陷入交通拥堵,导致昂贵的计算机在等待数据时处于闲置状态。目标是让这些任务能够和谐共处,像一场排练精良的舞蹈,而不是一场混乱的斗殴。
MLCC 应运而生,它是一种聪明的技术,充当了这些 AI 厨房的智能交通管理员。它并没有强迫每个人平等地轮流,而是教会了数据流如何相互“滑动”。把它想象成一群在跑道上跑步的人。在旧的方法中,如果两名跑步者并排奔跑,他们都会减速以避免碰撞。MLCC 改变了规则:如果一名跑步者即将完成他的圈数(完成数据发送),他会获得一点助力从而冲刺在前;而另一名刚刚开始的跑步者,则会被轻轻地推迟一会儿。这创造了一种节奏,使得一个任务在“烹多少”时,另一个任务在“送货”,从而确保它们永远不会碰撞。论文表明,通过仅用几行代码修改计算机通信的现有规则(拥塞控制),这些 AI 任务就可以自动学会这种节奏。在测试中,这个简单的技巧让最慢情况下的训练任务完成了高达 2.7 倍 的加速,平均加速了 1.9 倍,将混乱的交通拥堵变成了平滑流动的公路。
问题所在:巨大的 AI 交通拥堵
要理解为什么 MLCC 如此重要,我们首先需要了解 AI 训练是如何工作的。当计算机学习时,它会经历一个循环:进行数值计算(计算),然后需要与队友分享学到的东西(通信),然后进行更多数值计算,以此类推。这个过程会发生数千次。在共享的数据中心里,许多此类训练任务同时运行。
处理网络流量的旧方法是为“公平性”设计的。如果任务 A 和任务 B 都想发送数据,网络会将带宽进行 50/50 的分配。但这对于 AI 来说是非常糟糕的。因为 AI 任务具有严格的节奏,这意味着平分带宽会导致它们经常尝试在完全相同的时间发送数据。这就像两个人试图同时穿过一道狭窄的门;他们会撞在一起,掉落手中的杂物,然后不得不退后。这会导致“拥塞”,即数据包被丢弃或延迟,导致昂贵的计算机在等待数据到达时处于闲置状态。
旧的解决方案:为什么它们不够完美
在 MLCC 出现之前,研究人员尝试过两种主要的修复方法:
- 压缩: 尝试缩小数据体积,从而减少需要发送的数据量。这有所帮助,但并未解决时机问题。
- 集中式调度器: 想象一位超级智能的经理,他观察每一位厨师,并准确告诉他们何时行动。这在理论上运作良好,但在实践中却太慢且太复杂。如果一位厨师比预期稍慢(即“落后者”),整个计划就会崩溃,经理必须重新计算一切。这就像是在指挥一个乐团,而乐手们不断变换节拍;指挥官无法跟上节奏。
MLCC 的解决方案:“滑动”之舞
MLCC 采取了不同的方法。它没有使用中央经理,而是赋予了交通本身一点“常识”。它修改了计算机决定发送数据速度的标准规则。
这里的秘诀在于:MLCC 让网络变得略微“不公平”,但这种不公平是聪明的。
想象两辆车,A 车和 B 车,行驶在单车道道路上。
- 旧的方法: 两辆车以相同的速度行驶。如果它们靠得很近,它们都会减速。
- MLCC 的方法: 系统观察车辆。如果 A 车即将完成当前“圈数”(发送数据)的终点,MLCC 会给 A 车一个微小的助力,让它快速完成。与此同时,它会轻轻地告诉 B 车稍微减速。
为什么这会有帮助?因为一旦 A 车完成了它的数据传输,它就会回到“烹饪”(计算)状态,停止使用这条路。而 B 车,由于被减速了,现在可以拥有整条路来完成它的圈数。当 B 车结束时,A 车已经准备好开始它的下一个圈数了。它们自然地实现了“交错”。一个在驾驶,而另一个在烹饪。
这不是一个僵化的时间表。这是一个动态的舞蹈。如果一个任务被延迟了(出现了“落后者”),系统会自动调整速度,使它们重新同步。这就像一个舞伴,如果你踉跄了一下,他会调整步伐,以免你失去节奏。
在实践中如何运作
研究人员不需要构建新的硬件或安装巨大的中央计算机。他们只需通过不到 60 行的代码更新了控制数据流的软件(拥塞控制算法)。
他们在包含 12 台服务器(每台配备强大的 NVIDIA A100 GPU)的真实场景中进行了测试。他们运行了流行的 AI 模型,如 Llama2、GPT-2 和 BERT。
- 结果: 任务迅速掌握了节奏。在大约 30 个训练迭代 内(这仅仅是任务总运行时间的一小部分),任务就进入了平滑的交错模式。
- 加速效果: 完成单个训练步骤的平均时间显著下降。对于最慢的、最坏的情况(第 99 百分位数),训练时间缩短了高达 2.7 倍。平均而言,速度提升了 1.9 倍。
- 更少的错误: 由于交通流动顺畅,数据包丢失的情况大幅减少。在一项测试中,错误数量减少了近 29 倍。
不同类型的任务怎么办?
你可能会问:“如果任务的大小不同怎么办?如果一个是巨型模型,另一个很小呢?”论文显示,MLCC 也能处理这种情况。即使任务并不完全匹配(现实生活中很少匹配),“滑动”效应仍然有效。系统会找到一种“部分交错”的状态,即使它们没有完美同步,也能避免互相碰撞。
他们还在拥有 288 个 GPU 的大规模模拟中进行了测试。即使在网络高度超额订阅(拥挤)的情况下,MLCC 依然保持了流量顺畅,吞吐量比标准方法提高了 1.35 倍。
总结
MLCC 提醒我们,有时候最好的解决方案并不是去建造一个更大、更复杂的机器,而是教会现有的机器如何协作。通过让 AI 任务在时间上相互“滑动”,而不是争夺空间,我们可以让 AI 训练变得更快、更高效。它将混乱的交通拥堵变成了一场编排精妙的舞蹈,证明了聪明的时机把握可以带来巨大的进步。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。