Memory-Efficient Activation Checkpointing with Sliding Window and Hirschberg's Algorithm for 0/1 Knapsack Solving in PyTorch
本文介绍了一种用于 PyTorch 的内存高效型激活检查点求解器,该求解器结合了滑动窗口算法和 Hirschberg 算法,将峰值内存使用量从 降低至 ,从而能够解决规模显著更大的 0/1 背包问题,并实现了 25-28% 的运行速度提升,随后被集成到 PyTorch 2.10 中。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正试图烘焙世界上最美味、最复杂的蛋糕,但你的厨房却非常狭窄拥挤。你的食谱要求你记录下混合的每一种原料、每一次温度变化以及每一次搅拌动作,以便稍后能完美地逆向还原整个过程,看看蛋糕做得如何。问题在于,你的厨房柜台(即你的计算机内存)太小了,装不下所有的笔记。如果你试图把一切都写下来,柜台就会溢出,导致你不得不停止烘焙。这就是科学家们在训练大规模人工智能模型时面临的日常挣扎。他们需要记住很多步骤来教导人工智能,但他们的计算机空间会耗尽。为了解决这个问题,他们使用了一个巧妙的技巧,叫做“激活检查点”(activation checkpointing)。与其写下每一个步骤,不如挑选出最重要的步骤来保存,并约定好稍后重新执行那些不太重要的步骤。这就像是决定哪些照片要放入一本小相册,而哪些照片即使忘了也可以再拍一次。目标是将整个烘焙蛋糕的过程塞进那个小小的厨房里,同时又不丢失食谱的魔力。
长期以来,许多人工智能科学家用来构建模型的计算机程序 PyTorch,对于决定保存哪些步骤有着特定的方式。它将这个决策视为一个经典的谜题,叫做“0/1 背包问题”。想象你是一名徒步旅行者,背着一个只能承载一定重量的背包。你有一份物品清单,每件物品都有一个重量和一个价值(即它对你的帮助程度)。你想挑选出能提供最大价值的物品,同时又不会撑破你的背包。PyTorch 解决此问题的默认方法就像是在一张巨大的纸上写下所有可能的物品组合。虽然这种方法很完美,能找到绝对最优解,但那张纸变得如此巨大,以至于计算机的内存会爆炸,导致程序崩溃。研究人员发现,如果他们只有 100 个项目可供选择,所需的纸张规模大到需要 304 GB 的空间,这远超他们机器上仅有的 64 GB。这是一个完美的解决方案,却仅仅因为无法装进房间而无法使用。
在这篇论文中,作者介绍了一种更聪明的方法来解决这个谜题,称之为 dp_knapsack_sliding_hirschberg。与其试图一次性写下整张巨大的纸,他们使用了一个“滑动窗口”技巧。想象你在读一本长篇小说,但你只有一个小放大镜,每次只能看两页。你让放大镜在书页间滑动,看两页,再看接下来的两页,以此类经过。这样一来,你每次只需要在大脑中保留两页的内容,从而节省了大量的精神空间。然而,仅仅看两页是不够的,因为你还需要记住整个故事;你需要知道具体该挑选哪些物品。为了解决这个问题,他们将滑动窗口与一种古老且聪明的策略——“Hirschberg 算法”结合起来。把这想象成一个“分而治之”的游戏。与其试图一次性解决整个背包问题,不如将物品清单一分为二。他们先解决左半部分,再解决右半部分,然后研究如何将两个最优解结合起来。他们递归地进行这个过程,将问题不断分解为越来越小的部分,直到可以轻松解决,同时始终只使用极少量的内存。
新方法的成果令人印象深刻。作者在一台拥有 64 GB RAM 的计算机上测试了它。虽然旧方法在处理仅 100 个项目的问题时就会崩溃,但新方法成功解决了包含 2,000 个项目的难题,且峰值内存仅为 58.4 GB。这意味着计算机现在可以处理比以前大 20 倍的问题。此外,新方法不仅节省了内存,而且速度更快。在测试中,它比旧方法快了 25% 到 28%。作者通过在特定机器上运行 1,000 次相同的谜题来衡量这一点,并发现新求解器在速度上始终优于旧求解器。至关重要的是,与某些通过猜测答案可能导致轻微偏差的“快速修复”方法不同,这种新方法每次都能找到精确、完美的解。它与旧方法一样准确,但效率更高。
论文证实,这种新方法不仅仅是一个理论;它已成功合并到 PyTorch 软件中,并在版本 2.10 中可用。作者展示了通过结合使用滑动窗口和分而治之的方法,他们可以解决阻碍人工智能模型规模扩大的内存瓶颈。他们并不声称这是解决该问题的唯一方法,也不暗示它适用于每一种类型的计算机谜题,但对于决定保存哪些 AI 步骤这一特定任务,它是一个经过验证、精确且高效的升级。论文排除了旧方法在处理大型模型时仍然适用的可能性,清楚地表明当项目数量过高时,旧方法会失效。相反,他们提供了一个既保留了旧有方式的完美准确性,又消除了内存崩溃风险的解决方案,让科学家们能够在他们狭小的厨房里,烘焙出更大、更复杂的 AI 蛋糕。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。