论文阅读-高效构建检查点

news2024/9/25 21:23:55

论文标题:On Efficient Constructions of Checkpoints

摘要

高效构建检查点/快照是训练和诊断深度学习模型的关键工具。在本文中,我们提出了一种适用于检查点构建的有损压缩方案(称为LC-Checkpoint)。LC-Checkpoint同时最大化了压缩率并优化了恢复速度,假设使用SGD来训练模型。LC-Checkpoint使用量化和优先级提升来存储SGD恢复所需的最关键信息,然后使用霍夫曼编码来利用梯度尺度的非均匀分布。我们广泛的实验证明,LC-Checkpoint相对于最先进的算法(SCAR),实现了高达28倍的压缩率和高达5.77倍的恢复加速。

1.引言

高效构建检查点(快照)对于深度学习研究变得越来越重要。在开发更准确的模型的竞争中,研究人员利用更重的计算基础设施并开发更深层次、更大型的模型。没有适当的基础设施支持,研究过程不可避免地变得脆弱。例如,分布式计算不时失败,导致过多需要重新训练模型(Qiao等,2018b)。诊断深度学习模型也逐渐演变成一个复杂的过程,部分原因是社区对深度学习模型有了更好的理解,并为“调试”它们制定了更多规则。一些常见的错误包括梯度爆炸(Goodfellow等,2016)、“除以零”(Ioffe&Szegedy,2015)和死激活。这就需要构建“断点”,类似于调试计算机程序中使用的那些,以便研究人员可以方便地跳转到模型“崩溃”之前的状态。

频繁产生检查点使训练过程失败时能够在最小的时间浪费下重新启动,并作为调试模型的断点。到目前为止,构建检查点的标准做法还比较原始。最常见的做法是直接保存模型状态,依赖于后端系统足够健壮,以便这个操作不成为瓶颈(Baylor等,2017)。也有尝试部分存储模型状态的作品(Qiao等,2018b),但这些作品通常侧重于恢复速度,而不是直接解决系统问题。这里最突出的技术挑战是深度模型通常很大,因此频繁生成检查点会给I/O和存储带来难以管理的负担,即使在现代分布式平台下(Abadi等,2016;Li等,2014;Low等,2012)。因此,这引出了我们的问题:

研究问题:我们如何压缩模型检查点?

我们特别旨在设计一种有损压缩方案,同时满足两个标准。首先,像标准压缩问题一样,我们需要最大化压缩率。其次,该方案需要针对训练的下游应用进行优化。当一个模型从我们的有损检查点重新启动时,它需要有效地恢复到最近的状态(例如,从失败的过程重新启动或到达崩溃之前的状态)。

模型状态的压缩是一个新的技术问题,需要解决信息论、学习算法和系统设计中的交叉约束。我们需要利用模型状态中编码的统计模式,并考虑模型状态与学习算法的交互方式(更具体地说,在深度学习设置中的随机梯度类型算法)。这意味着标准有损压缩算法和最近开发的模型压缩算法(Han等,2015a;Courbariaux等,2015;Hong等,2016;Leng等,2018;Lin等,2016)都不适用于我们的设置。标准有损压缩算法旨在最小化重建误差,但我们的最终目标是使学习算法能够“快速恢复”。模型压缩技术旨在将(静态)模型转换为一个更简单的模型,同时确保预测不受太大影响,而在我们的设置中,我们需要一种可靠的编码方案,它在整个学习动态过程中都能很好地运行,这是一个相互独立且可能更具挑战性的目标。此外,我们的算法必须高效且可扩展,以便可以频繁执行。

我们的解决方案。为了实现我们的目标,我们专注于一种增量编码方案(Mogul等,1997),仅跟踪两个检查点之间的差异信息。在这种方案下,我们要考虑是否可以从模型状态中剔除对训练最无用的信息,并确保剩余信息适合压缩。这里可能令人惊讶的信息是,“delta”的L2-范数重建误差似乎是减少恢复时间的无效度量。相反,我们的算法首先删除所有具有微不足道更新的参数,然后对剩余信息进行量化。这些策略类似于分布式训练中旨在最小化通信成本的策略(Alistarh等,2017)。在我们获得部分参数更新的最重要信息之后,我们将它们以适当的格式表示并应用霍夫曼编码进一步压缩这些位,从而使压缩率能达到信息论限制。这个策略类似于最近的模型压缩技术(Han等,2015a;Wu等,2016;Park等,2017;Zhou等,2017;Rastegari等,2016)。

本文的贡献包括:

  • 对于压缩模型状态以用于训练恢复的基础研究问题的提出。
  • 基于我们开发的一个风格化模型,表征一系列压缩方案,可以有效跟踪学习过程。
  • 设计一个具有高压缩率的有损编码方案,将传统压缩技术和最近为分布式学习和模型压缩开发的技术结合起来。
  • 优化训练系统,最小化即时生成检查点的开销。

我们广泛的评估表明,通过同时利用分布式训练和模型压缩技术,我们的算法提供了一种解决方案(称为LC-Checkpoint,LC代表有损压缩),具有高达28倍的压缩率和优越的恢复时间——相对于最先进的算法(SCAR),实现了高达5.77倍的恢复加速。

2.我们的方法

我们现在描述我们的压缩框架。我们引入一个风格化模型来促进学习过程的分析,以便分析系统设计的权衡。然后我们解释我们的设计原则,这些原则由风格化模型和我们广泛的实验确定。

我们的模型。一个“高维”向量表示模型状态。一个迭代算法(例如,随机梯度下降)被用来逐步将模型状态向量移向局部最优点。设为第t轮的模型状态。在我们的风格化模型中,我们假设执行一个(漂移的)随机漫步,收敛到。具体地,我们使用以下过程来建模的轨迹。设

其中η和L共同建模算法的收敛速率,而是一个随机噪声项,反映了随机梯度下降的随机性质。当η设为一个小常数时,该模型描述了具有线性收敛速率的算法。当η = (1 - 1/L)时,该模型描述了那些收敛速率为1 - 1/t的算法(Boyd & Vandenberghe, 2004)。虽然我们的模型没有捕捉到许多随机梯度下降算法的细节,因为不同的随机梯度下降算法具有不同的收敛速率,设计一个突出设计权衡的统一模型需要我们进行简化假设。

我们的设计原则。接下来我们描述我们的设计原则。

P1. 最小化对随机梯度下降的影响。

当我们设计有损压缩方案时,不可避免地会丢失一部分信息,从而导致学习算法性能下降。我们发现,不能简单地使用L2范数的重构误差来衡量 SGD 的退化。这可以通过风格化模型最好地说明。为简单起见,令 ,因此 。我们想要压缩的增量项是 。当我们使用有损压缩时,相当于添加一个关于 的附加噪声项。因此,在压缩方案下,新的学习过程变为 。观察到只要,并且 所主导(小于),那么收敛质量将保持不变,这是根据随机逼近的标准结果(Lai, 2009; Kushner & Yin, 2003)。

这里的IE表示求平均期望,|表示条件,Var表示求方差。

有许多构造满足期望和方差约束条件。让我们考虑一个例子,通过使用标准的随机舍入(Alistarh et al., 2017)来保留 的最重要位。由于舍入算法的特性,期望值为 0。此外,由于保留了最重要位,舍入中的信息丢失不会大于 ,在一个温和的假设下,即 的标准差随时间按比例缩放到 。因此,这种舍入方案不会影响训练算法的性能。一般来说,1 位编码是量化的特殊情况。广泛的量化方案将满足期望和方差约束。我们的算法将探索这种权衡。

还需注意的是,当我们最小化 L2范数 重构误差时,这相当于保留 中最大的 k 个条目。

P2. 最大化残差信息中的冗余性。我们的压缩方案还需要确保我们保留的信息具有大量的冗余性,即熵的度量。这将使我们能够利用传统编码方案,如赫夫曼编码,在信息论极限下压缩数据。

P1和P2之间的相互作用突显了我们压缩问题的独特结构。最好通过一个名为TOPN的压缩方案来说明这一点。这种压缩方案保留了中的最大元素。我们观察到:(i)虽然这种方案最小化了L2范数的重构误差,但恢复时间并不优越。许多其他具有上述特性的压缩方案在恢复速度上同样快,正如我们风格化模型所暗示的。(ii)对于TOPN方案来说,进行压缩是困难的。TOPN方案通常需要跟踪中所有条目的10%才能有效。跟踪这些元素位置的开销令人惊讶地高。部分原因在于向量不够稀疏,因此稀疏矩阵表示并没有帮助。

另一方面,我们的解决方案认真遵循P1,并避免了跟踪我们保留条目的位置的需要,从而实现了更高的压缩率。

P3. 不要使用随机投影和/或草图。值得注意的是,我们发现基于草图的随机投影技术(例如Woodruff等人(2014年))会损害压缩效果。粗略地说,草图通过将多个数字投影到一个单元格中来压缩信息。虽然这可能加快查询时间,但在我们的情境中,它只会干扰梯度下降算法。考虑一个简单例子,其中,最佳点。假设是当前状态,梯度沿着方向(-1, 1)。当我们应用草图(比如CountMin草图)时,它将方向(-1, 1)压缩成一个点0。在进行查询时,两个坐标的梯度是不正确的。草图在梯度向量中的条目是异质的,并且需要以“线速率”回答查询时更有用(例如,不会减慢训练,参见Ivkin等人(2019年))。在这里,当模型需要从检查点中恢复时,时间并不那么紧迫。因此,即使我们面临异质参数,更有效的方法是仔细区分关键信息和不重要信息,而不是使用任意的随机投影。

3.LC-基于检查点的随机梯度下降算法

我们现在描述我们的解决方案 LC-Checkpoint(LC 指的是损失压缩)。参见图 1 中的一个工作示例和算法 1 中的工作流程。为简单起见,我们假设我们的系统为每个迭代维护一个检查点 。我们稍微滥用 来同时指代压缩数据和它所代表的真实向量。我们可以简单地对我们的操作进行降采样,以便每隔 k 个迭代构建一个检查点。我们的解决方案由两个主要组成部分组成。

C1. 通过增量编码进行近似跟踪。在每一步中,我们的系统维护一个对于真实状态的近似值 u˜t。我们简单地设置 ,其中 u0 是模型的初始状态。我们的系统在后台持续维护和更新 (算法 1 中的第 7 行)。我们的主要压缩任务是正确地跟踪近似状态与真实状态之间的“增量”。具体来说,第 t 次迭代的压缩任务是 。请参见图 1 中的 3。

C2. 量化和霍夫曼编码。这个组件通过两个步骤压缩 δt,步骤 1. 两阶段量化。我们首先执行基于指数的量化,然后进行优先级提升操作。这个操作智能地丢弃两个连续状态之间的不重要信息。步骤 2. 通过霍夫曼进行无损压缩。最后,量化的距离向量进一步使用霍夫曼编码进行压缩。

可以看出,要从检查点重建第 t 次迭代的模型状态,我们可以简单地计算 ut = 。 接下来,3.1 节讨论 C2,3.2 节讨论额外的系统级优化。

3.1. 量化和霍夫曼编码

3.1.1. 两阶段量化

LC-Checkpoint 使用一种新颖的两阶段流水线来量化 δt,包括两个主要子步骤:基于指数的量化和优先级提升。

基于指数的量化。回想一下,一个浮点数 v 被表示为 ,其中 s 是符号,m 是尾数,e 是指数。回想一下, 是我们要编码的高维向量。我们的基于指数的量化工作如下:首先,根据 e 和 s 将 δ 中的条目分成多个桶,即将具有相同指数和符号的元素分配到同一个桶中。我们从广泛的实验中关键观察到,ut 中的条目通常朝着同一个方向漂移,因此 δt 通常具有相同的符号。接下来,我们的算法通过每个桶中最大值和最小值的平均值来表示每个桶。

图 1 中显示了一个示例,在该示例中,δt 被量化为五个桶(用五种不同的颜色标记)。每个桶中的所有条目都被一个唯一值表示。索引 k 个桶需要 log2 k 位。因为 δt 包含 n 个浮点数,每个浮点数使用 b(例如,b ∈ {32, 64})位,所以压缩率为

例如,在图 1 中,δ 有 10 个元素(即 n = 10),每个元素由一个单精度浮点数表示(即 b = 32)。因此,原始的 δ 共有 nb,即总共 320 位。基于指数的量化使用 5 个桶(即 k = 5)。因此,在量化之后,δ 共有(10×log 5+5×32 = 190)位。因此,压缩率(r)为 1.68(即,320/190)。

控制桶的数量 k 以实现最佳压缩比是至关重要的。幸运的是,基于指数的桶化可以控制单精度浮点数元素的 k ≤ 2^9,并控制双精度浮点数元素的 k ≤ 2^12。我们的评估结果(第 4.3 节)证实通常 k < 2^5 就足够了。图 2(a) 绘制了 AlexNet 最后一个卷积层中所有元素指数部分的分布。

AlexNet 最后一个卷积层中所有元素的指数部分的分布。当指数部分等于 -127 时,元素值为 0。横轴表示指数部分数值,纵轴表示具有该数值的元素计数。

优先级提升。我们通过限制桶的数量并采用优先级提升方法进一步提高压缩比。我们的关键观察是,当 与 0 非常接近时(即, 接近 ),批处理更新更加有效(即,不更新 δt 的第 i 个条目直到其变得显著)。还要注意,这在概念上与最小化构造错误不同。最小化构造错误意味着准确跟踪 δt 中最重要的条目,而我们既删除过小的条目又量化大的条目(就像前一步骤中所做的)。具体来说,我们提出 x 位优先级提升。它仅保留具有较大 e 的 2^x − 1 个桶,并将其余桶合并为一个,其唯一值为 0。换句话说,优先级提升将 更新为与 的距离更大的值,并赋予更高的优先级。它将桶的索引限制在 x 位内。

图 1(优先级提升)使用 2 位优先级提升来控制桶的数量不超过 4。它将绿色和紫色桶合并为一个红色桶,其表示值为 0。对这些桶的索引只需要 2 位。图 2(b) 给出了 AlexNet 最后一个卷积层的 3 位优先级提升的一个实际示例。

3.1.2. 霍夫曼编码

最后,观察到大多数学习过程中每个桶中元素的数量高度不均匀,我们使用霍夫曼编码(Van Leeuwen,1976)进一步压缩这些桶。例如,图 2(a) 绘制了 AlexNet 最后一个卷积层中所有元素指数部分的分布。该分布显示出倾斜行为,因此更适合霍夫曼编码。我们的关键观察是,优先级提升进一步加剧了这种分布的不均匀性(图 2(b)),因此将量化与霍夫曼编码结合产生了“部分之和”以上的好处。我们后续的评估验证了这一点(第 4.3 节)。

3.2. 系统优化

LC-Checkpoint 还包括几项新颖的系统级优化,如下:

  • 异步执行:因为 LC-Checkpoint 的第一步仅依赖于模型状态,其余步骤可以与 SGD 计算的下一次迭代同时运行。这种异步(非阻塞)执行显著减少了检查点开销,并减轻了模型执行的阻塞。
  • 检查点合并:为了进一步减少恢复时间,LC-Checkpoint 使用一个辅助过程定期将多个检查点合并成超级步骤。在任何系统崩溃的情况下,LC-Checkpoint 使用这些超级步骤检查点进行恢复。
  • 霍夫曼编码表缓存:桶的数量可能在一个迭代到另一个迭代保持不变,特别是在优先级提升之后。因此,在不进行任何重建的情况下,可以在不同迭代之间重复使用霍夫曼编码表(仅需根据每个桶中条目的数量进行简单排序)。LC-Checkpoint 包括一个轻量级缓存,用于存储每个桶计数的霍夫曼编码表。

4.实验

本节通过三个基准数据集对四个典型的机器学习应用进行了LC-Checkpoint的评估,并将其与之前的工作(SCAR Qiao等人(2018b)和第二节提到的TOPN机制)在恢复(返工)成本、压缩比和执行开销方面进行了比较,展示了LC-Checkpoint的优越性。

4.1 方法论

评估目标:此次评估有四个主要目标:(1)与以往工作相比,比较LC-Checkpoint的恢复(返工)成本;(2)评估不同方法带来的压缩效益;(3)具体验证优先级提升的有效性;(4)通过实验案例研究确认LC-Checkpoint引入的开销较低。我们的工作主要与两项最新的工作相比较:SCAR(Qiao等人,2018b)和一个TOPN机制。SCAR通过分区参数并在每次迭代中更新一个分区来减小检查点大小。TOPN机制只更新与上一次迭代距离最大的前n个参数。TOPN检查点以压缩稀疏行(CSR)格式存储。

机器学习应用和数据集:在四个典型的机器学习应用上评估LC-Checkpoint:多项式逻辑回归(MLR)、LeNet-5(Lenet)(LeCun等人,1998)、AlexNet(Krizhevsky等人,2012)和矩阵分解(MF)。前三个应用训练在MNIST(LeCun等人,1998)和FashionMNIST(Xiao等人,2017)数据集上。最后一个,MF训练在Jester(Goldberg等人,2001)和MovieLens10M(Harper & Konstan,2015)上。

平台和评估配置:我们的实验在一台多核服务器上进行,该服务器配备了Intel Xeon Gold 6138 Skylake CPU,拥有40个核心,每个核心运行频率为2.0 GHz,以及192 GB DDR4内存。训练在一台配备16GB高带宽内存(HBM)的Tesla P100 GPU上进行。

4.2 恢复/返工成本比较

本节评估LC-Checkpoint的恢复(或返工)成本,特别是将其与SCAR(Qiao等人,2018b)和一个TOPN机制进行比较。

为了公平地评估它们的返工成本,我们为所有三种方法使用相同的检查点大小(更新大小)。测试了两种检查点大小:全检查点大小的5%和10%。这些检查点大小可以直接为SCAR和TOPN设置。然而,LC-Checkpoint的大小由数据分布决定,因此会动态变化。为了解决这个问题,LC-Checkpoint采用了2位和3位优先级提升来控制其检查点大小分别为5%和10%。图4报告了更多关于LC-Checkpoint的检查点大小信息。

图3比较了三种方法的返工成本,SCAR、TOPN和LC-Checkpoint,显示LC-Checkpoint在所有机器学习应用和数据集中的返工成本都是最低的。对于5%检查点测试案例,LC-Checkpoint的性能分别比SCAR高出2.88×-5.77×,比TOPN高出2.17×-4.06×。在10%检查点大小下,LC-Checkpoint的性能分别比SCAR高出1.9×-4.82×,比TOPN高出1.52×-2.17×。

此外,比较两种检查点大小(5%对比10%),LC-Checkpoint在检查点大小减小时结果更稳定。例如,将检查点大小从10%减小到5%,LC-Checkpoint在LeNet与MNIST(图3(b))和AlexNet(图3(c), 3(g))上的返工成本增加可以忽略不计。其他案例没有任何返工成本变化。相比之下,SCAR和TOPN在检查点大小从10%变为5%时,返工成本平均增加了1.6×。

LC-Checkpoint、SCAR和TOPN之间的重做成本比较。横轴表示压缩检查点大小与完整检查点大小之间的比例。纵轴显示重做迭代次数。误差棒表示95%置信区间,通过50次重复试验计算得出。

4.3 LC-Checkpoint压缩效果分解

本节评估和分析之前提到的不同方法的压缩效果,包括指数基量化(E)、优先级提升(P)和哈夫曼编码(H)。图4报告了采用2位和3位优先级提升的压缩比。采用所有压缩方法,最终检查点大小(E+P+H)都低于未压缩全检查点的5%(使用2位)和10%(使用3位),即压缩率分别高于20×和10×。

使用不同压缩方法的压缩比例。横轴表示优先级提升中使用的比特计数,纵轴是压缩后检查点大小与压缩前大小之间的比例。其中,E、P、H 分别表示“基于指数的量化”、“优先级提升”和“霍夫曼编码”。

指数基量化平均产生85%的压缩比。这证明了所有参数中δ的指数部分跨越了可以由单精度浮点数表示的所有值的一个小范围。15%还表明桶号k<2^5,因为平均桶号可以估计为k=2(32×15%=4.8),其中32是单精度浮点数的宽度。优先级提升平均为2位带来了9.26%的额外压缩比,为3位带来了6.23%。在大多数情况下,除了MF(图4(d), 4(h))外,较小位数的优先级提升为哈夫曼编码带来了更多好处。这是因为MF的参数是稀疏的,因此哈夫曼编码可以在没有激进优先级提升的情况下达到足够的压缩比。在所有模型(和数据集)中,哈夫曼编码平均带来了2位优先级提升的2%额外压缩比,和3位的1.6%。

4.4 优先级提升的有效性

本节进一步讨论了优先级提升的有效性。其目的是证明优先级提升能够保存大多数高优先级参数。我们通过显示指数桶导致的模型状态影响更大(即,当桶代表的唯一值离0更远时,即e更大)来证明这一点。

假设δ是从一个状态uθ到另一个状态经过m次迭代计算得出的。然后,通过将第i个指数桶中的参数设置为0来创建δim。地面真相计算为,其中L(x)表示损失函数。然后计算相对误差:

图5报告了MLR与m=10n, n∈[1, 6]的结果。两个数据集(MNIST和FashionMNIST)在不同的m上证明了具有最大距离的前n个桶中的元素对模型影响更大(当桶代表的值设置为0时,表示为更高的相对误差)。此外,只需少量的索引位就可以保留所有重要的桶。例如,使用2位优先级提升(最后一个桶存储0的4个桶)可以轻松保留最重要的桶,使用3位(8个桶)可以保留所有有效的桶。这个结果解释了为什么优先级提升可以在几乎不损失准确性的情况下压缩检查点。

对每个指数桶的优先级进行评估。 横轴表示被删除的指数桶的ID。 纵轴显示相对误差与基准值之间的关系。

4.5. LC-Checkpoint的开销案例研究

本节通过一个案例研究,即在MovieLens25M(Harper & Konstan, 2015)数据集上训练MF,评估了LC-Checkpoint的执行开销和对模型执行的整体影响。每次迭代平均耗时91秒。LC-Checkpoint采用3位优先级提升,导致检查点大小低于10%(未压缩完整检查点大小)。默认方法每10次迭代创建一个完整检查点。在第7次迭代触发故障。

图6报告了结果。LC-Checkpoint与正常执行相比只多产生一次额外迭代,且与完整检查点方法相比节省了6次迭代,即节省了546秒的执行时间。LC-Checkpoint每次迭代仅引入不到4秒(即约4%)的开销,可以忽略不计。

在 MovieLens25M 数据集上的矩阵分解。横轴表示迭代次数,纵轴是模型的 RMSE(均方根误差)。

5.相关工作

容错是机器学习系统的关键基础支持。Li等人(Li et al., 2014)提出了一种用于恢复的运行时参数复制方法。Tensorflow(Abadi等人,2016)采用周期性检查点保存模型状态。类似的努力,如(Harlap等人,2017;Qiao等人,2018a),旨在支持强一致性语义。相反,我们的工作基于机器学习应用程序的自我校正行为,放宽了检查点的一致性保证。通过一组有损压缩机制,我们的工作可以承受高频检查点,从而降低重做成本并实现精细的模型状态恢复。同样,Qiao等人(Qiao等人,2018b)也提出了一种基于弱一致性的容错解决方案(我们评估中的SCAR),通过部分更新参数来实现。根据我们的评估,SCAR有潜力在检查点期间存储冗余信息,我们的工作旨在通过选择性地保存两个状态之间的距离来消除这种冗余。模型压缩旨在减少模型存储空间并加快模型执行时间。权重剪枝和权重量化是模型压缩的两个重要类别。

一些与我们的工作密切相关的流行权重剪枝技术总结如下。Guo等人(Guo等人,2016)提出了一种动态网络手术方法,通过即时连接剪枝来降低网络复杂性。Dai等人(Dai等人,2019)将生长和剪枝阶段结合在训练中,生成紧凑的DNN架构。Han等人(Han等人,2015b)设计了深度压缩,一种通过剪枝、量化和霍夫曼编码相结合的模型压缩方法。Mao等人(Mao等人,2017)认真探讨了不同剪枝粒度对模型准确性的影响,并提出了一种粗粒度权重剪枝方法。以上所有努力的目标都是在不损害准确性的情况下剪枝模型权重。与它们不同,我们的工作通过设计一种可靠的编码方案,在整个学习过程中通过消除两个检查点之间的冗余并减少恢复过程中的重做成本。

权重量化也被广泛用于模型压缩。BinaryConnect(Courbariaux等人,2015)引入了二进制权重来替代乘法运算。二值化神经网络(Courbariaux等人,2016)也使用二进制权重和激活来加速计算。Park等人(Park等人,2017)提出了一种基于加权熵的聚类方法用于权重量化。Leng等人(Leng等人,2018)将量化形式化为一个优化问题,并通过ADMM来解决。我们的方法也利用量化来减少参数比特数,设计了一种新颖的基于指数的量化技术。此外,我们的方法强调使用新的优先级提升方法过滤参数。

6.结论和未来工作

本文提出了LC-Checkpoint,这是基于有损压缩的第一个检查点方案,旨在实现最大压缩率高效恢复。它采用了一种新颖的两阶段量化方法,包括基于指数的量化和优先级提升,以识别和存储SGD恢复所需的最关键信息,并利用Huffman编码进一步从梯度规模的非均匀分布中获益。我们的评估表明,LC-Checkpoint实现了高达28倍的压缩率和高达5.77倍的恢复加速,超过了最先进的算法(SCAR)。

未来,我们计划通过放宽对SGD的假设并使其具备根据模型和数据变化动态选择检查点压缩率的能力,推广LC-Checkpoint。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1486554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue中scss样式污染引发的思考

新做了一个项目&#xff0c;就是在登录后&#xff0c;就会产生左侧菜单的按钮颜色不一样。 然后发现样式是从这里传过来的 发现是登录页面的css给污染了 就是加了scope就把这个问题解决了 然后想总结一下这个思路&#xff1a;就是如何排查污染样式&#xff1a; 如果出现了…

微信小程序开启横屏调试

我们先打开小程序项目 开启真机运行 目前是一个竖屏的 然后打开全局配置文件 app.json 给下面的 window 对象 下面加一个 pageOrientation 属性 值为 landscape 运行结果如下 然后 我们开启真机运行 此时 就变成了个横屏的效果

[vue error] TypeError: AutoImportis not a function

问题详情 问题描述: element plus按需导入后&#xff0c;启动项目报错&#xff1a; 问题解决 将unplugin-auto-import 回退到0.16.1 npm install unplugin-auto-import0.16.1 安装完后再次运行就好了

牛客周赛 Round 35 解题报告 | 珂学家 | 构造 + 组合数学

牛客周赛 Round 35 解题报告 | 珂学家 | 构造 组合数学 前言 整体评价 F/G是数学题&#xff0c;E是一道有趣的构造题, 需要一点点空间想象力&#xff0c;其他几题也不错。不过整场被python的库函数&#xff0c;折磨得崩溃&#xff0c;T_T. A. 小红的字符串切割 题型: 签到 …

IO多路复用:提高网络应用性能的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【比较mybatis、lazy、sqltoy、lambda、操作数据 】操作批量新增、分页查询【一】

orm框架使用Lambda性能比较 环境&#xff1a; idea jdk17 spring boot 3.0.7 mysql 8.0测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本mybatis☑️☑️3.5.4sqltoy☑️☑️5.2.98lazy✖️☑️1.2.3-JDK17 数据库表(含有唯一性索引s_u) CREATE TABLE sys_u…

文件底层的深入理解之文件输入输出重定向

目录 一、文件fd的分配规则 二、对输出重定向现象的理解 三、输出输入重定向的简单实现 1、输出重定向 2、输入重定向 一、文件fd的分配规则 最小的没有被使用的数组下标&#xff0c;会被分配给最新打开的文件。 二、对输出重定向现象的理解 正如上面这段代码所示&#xff0…

Java+SpringBoot+Vue自习室预约系统全栈开发

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

[C++核心编程](四):类和对象——封装

目录 封装 访问权限 struct和class的区别 成员属性设置为私有 设计案例 C面向对象的三大特性&#xff1a;封装、继承、多态 C认为万事万物皆为对象&#xff0c;对象上有其属性和行为&#xff01;&#xff01; 封装 意义&#xff1a; 将属性和行为作为一个整体&#xff0…

【学习心得】解决无限debugger的常用方法

一、什么是无限debugger 有些网站为了防止爬虫或其他恶意行为&#xff0c;会故意设置无限debugger作为一种简单的反爬机制&#xff0c;它会在开发者工具打开的情况下不断暂停执行。这对于想要分析其他代码逻辑、排查问题或进行正常开发调试工作的开发者来说极为不便。 二、解决…

图文详解:在虚拟机上安装Win7,超详细!!!

一.准备 1.虚拟机&#xff1a; https://pan.xunlei.com/s/VNpZ_9c2AdrnUW1YWNdhBLW-A1?pwdyp6b# 2.win7的iOS&#xff1a; https://pan.xunlei.com/s/VNpZd61K6a7cDG3YkI_3oVbUA1?pwdyrfp# 二.安装配置 三.配置Win7 1.记得输入原先下载的镜像文件 2.那我们选择自定义 3…

c++之旅——第二弹

大家好啊&#xff0c;这里是c之旅第二弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一、内存四区…

2024-02学习笔记

1.当我们向Set集合中添加一个已经存在的元素时 当我们向Set集合中添加一个已经存在的元素时&#xff0c;Set集合会如何处理呢&#xff1f;实际上&#xff0c;Set集合不会将重复的元素添加到集合中。当我们向Set集合中添加一个元素时&#xff0c;Set集合会首先判断该元素是否已…

支持向量机 SVM | 线性可分:公式推导

目录 一. SVM的优越性二. SVM算法推导小节概念 在开始讲述SVM算法之前&#xff0c;我们先来看一段定义&#xff1a; 支持向量机(Support VecorMachine, SVM)本身是一个二元分类算法&#xff0c;支持线性分类和非线性分类的分类应用&#xff0c;同时通过OvR或者OvO的方式可以应用…

Sora:探索大型视觉模型的前世今生、技术内核及未来趋势

Sora&#xff0c;一款由OpenAI在2024年2月推出的创新性文生视频的生成式AI模型&#xff0c;能够依据文字说明&#xff0c;创作出既真实又富有想象力的场景视频&#xff0c;展现了其在模拟现实世界方面的巨大潜能。本文基于公开技术文档和逆向工程分析&#xff0c;全面审视了Sor…

一文搞懂浏览器缓存机制

文章目录 概述强制缓存协商缓存总结参考文章 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制&#xff0c;其机制是根据HTTP报文的缓存标识进行的 浏览器第一次向服务器发送HTTP请求, 浏览器拿到请求结果后&#xff0c;会根据响应报文的缓存标识&#xff0c;决定是否进行缓存…

【学习总结】什么是DoS和DDoS

[Q&A] 什么是DoS DoS 是 “Denial of Service”&#xff08;拒绝服务&#xff09;的缩写&#xff0c;它是一种网络攻击方式&#xff0c;其目的是使目标计算机或网络资源无法为合法用户提供正常的服务。通过向目标系统发送大量请求、消耗其带宽、处理器或内存等资源&#…

【Linux网络命令系列】ping curl telnet三剑客

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

前后端分离vue+nodejs高校教室资源预约管理系统4e80m

本系统的设计与实现共包含9个表:分别是配置文件信息表&#xff0c;教师信息表&#xff0c;教室类型信息表&#xff0c;教室信息信息表&#xff0c;教室预约信息表&#xff0c;系统公告信息表&#xff0c;token表信息表&#xff0c;用户表信息表&#xff0c;学生信息表&#xff…

matplotlib散点图

matplotlib散点图 假设通过爬虫你获取到了北京2016年3, 10月份每天白天的最高气温(分别位于列表a, b), 那么此时如何寻找出气温和随时间(天)变化的某种规律? from matplotlib import pyplot as pltx_3 range(1, 32) x_10 range(51, 82)y_3 [11,17,16,11,12,11,12,6,6,7,8…