【笔记】深度学习模型训练的 GPU 内存优化之旅:综述篇

开设此专题,目的一是梳理文献,目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化,所以最初思考的专题名称是“显存突围:深度学习模型训练的 GPU 内存优化之旅”,英文缩写是 “MLSys_GPU_Memory_Opt”。该专题下的其他内容:

本文是该专题下的第 1 篇文章,梳理并分享与单卡上的显存优化相关的中英综述论文(截至 2025 年 3 月 15 日,一共 23 篇论文),具体内容为笔者的论文阅读笔记。说明:

  1. 本文二级标题的内容格式为:[年份]_[会刊缩写]_[会刊等级/版本]_[论文标题];
  2. 笔者不评价论文质量,每篇论文都有自己的侧重,笔者只记录与自己研究方向相关的内容;
  3. 论文文件在笔者的开源仓库 zhulu506/MLSys_GPU_Memory_Opt 中,如有需要可自行下载;
  4. 英文论文使用 DeepSeek 进行了翻译,如有翻译不准确的地方还请读者直接阅读英文原文;
  5. 本文对综述论文的分类可能并不完全准确,部分综述论文的内容可能会有一定交叉。

文章目录

AI 内存墙问题

1) 2024_IEEE Micro_SCI三区_AI and Memory Wall

这篇论文最初是一篇博客,作者较早提出了 AI 内存墙这一概念,是显存优化领域背景与挑战方面引用量较高的一篇论文。

摘抄:

  • 受 neural scaling law 的驱动,从业者们一直在以前所未有的规模扩展训练最新模型所需的数据量、模型规模和计算能力。
  • 大型语言模型(LLM)的规模在同一时间段内每两年以 410 倍的速度增长,超过了单个芯片上可用的内存容量。人们可能会希望,通过将训练/服务扩展到多个加速器上,利用分布式内存并行性来避免单个硬件有限的内存容量和带宽。然而,将工作分布到多个进程中也面临着内存墙问题:神经网络(NN)加速器之间数据传输的通信瓶颈,这甚至比芯片内部的数据传输更慢且效率更低。
  • 这也可以使从业者在单个芯片的内存上训练大型模型,而不必使用分布式训练,后者通常难以设置(在大型超大规模公司之外),并且对于非专业开发人员来说难以调试

“neural scaling law” 引用自:Hoffmann J, Borgeaud S, Mensch A, et al. Training compute-optimal large language models[C]//Proceedings of the 36th International Conference on Neural Information Processing Systems. 2022: 30016-30030.

图表:

图2. (a) 多年来 SOTA 模型参数数量的演变,以及 AI 加速器内存容量的变化(绿点)。大型 Transformer 模型的参数数量每两年以 410 倍的速度呈指数增长,而单个 GPU 内存每两年仅以 2 倍的速度增长。

图4. 训练不同神经网络模型所需的内存容量。这里,计算机视觉(CV)模型使用的优化器是 SGD 加动量(SGD+Momentum),自然语言处理(NLP)模型使用的优化器是 ADAM。基于可用的 GPU 内存容量,发现/设计新模型存在一个有趣的趋势。每当 GPU 内存容量增加时,数据科学家们就会设计出更新的模型。因此,打破所谓的 GPU 内存墙可能会进一步推动新的创新

图4原版来自 Jain P, Jain A, Nrusimha A, et al. Checkmate: Breaking the memory wall with optimal tensor rematerialization[J]. Proceedings of Machine Learning and Systems, 2020, 2: 497-511.

CNN 和 Transformer 模型

1) 2020_AIR_SCI二区_A survey of the recent architectures of deep convolutional neural networks

这篇综述是关于 CNN 的,作为笔者学位论文相关内容的参考。

摘抄:

  • 深度卷积神经网络(CNN)是一种特殊类型的神经网络,它在与计算机视觉图像处理相关的多项竞赛中展现了卓越的性能。CNN 的一些激动人心的应用领域包括图像分类与分割目标检测视频处理自然语言处理以及语音识别。深度 CNN 的强大学习能力主要归功于其使用多个特征提取阶段,能够自动从数据中学习表示。
  • 典型的 CNN 架构通常由交替的卷积层和池化层组成,最后是一个或多个全连接层。在某些情况下,全连接层会被全局平均池化层替代。除了不同的映射函数外,还引入了诸如批量归一化和 Dropout 等不同的调节单元,以优化 CNN 的性能。
    • 卷积层 Convolutional layer
    • 池化层 Pooling layer
    • 激活函数 Activation function
    • 批量归一化 Batch normalization
    • Dropout
    • 全连接层 Fully connected layer

图表:

图 3 展示了深度 CNN 的进化历史,从 ConvNet 到当前架构的演变过程。

深度 CNN 架构的进化历史在图 3 中以图示形式呈现。CNN 架构的改进可以分为以下五个不同的阶段:

  • CNN 的起源:20 世纪 80 年代末至 1999 年
  • CNN 的停滞期:2000 年初
  • CNN 的复兴:2006 年至 2011 年
  • CNN 的崛起:2012 年至 2014 年
  • CNN 架构创新和应用的快速增长:2015 年至今

图 4 展示了深度 CNN 架构的分类,分为七种不同的类别。

2) 2021_arXiv:2106.04554_v2_A Survey of Transformers

这篇综述是关于 Transformer 的,作为笔者学位论文相关内容的参考。

摘抄:

  • 原始的 Transformer 是一个序列到序列模型,由编码器解码器组成,每个部分由 L L L 个相同的块堆叠而成。每个编码器块主要由多头自注意力模块位置前馈网络(FFN)组成。为了构建更深的模型,每个模块周围采用了残差连接,随后是层归一化模块。与编码器块相比,解码器块在多头自注意力模块和位置前馈网络之间额外插入了交叉注意力模块。此外,解码器中的自注意力模块被调整为防止每个位置关注后续位置。

图表:

最近的研究表明,在大规模语料库上预训练的 Transformer 模型可以学习到对下游任务有益的通用语言表示。……预训练后,可以直接在下游数据集上微调模型,而无需从头开始训练。为了说明 Transformer 在预训练中的典型使用方式,我们列举了一些预训练的 Transformer 模型并将其分类如下:

  • 仅编码器
    • 仅使用编码器,并将编码器的输出作为输入序列的表示,通常用于分类或序列标注问题。
    • 一些工作使用 Transformer 编码器作为其骨干架构。BERT 是一个典型的预训练模型,通常用于自然语言理解任务。
  • 仅解码器
    • 仅使用解码器,同时移除编码器-解码器交叉注意力模块,通常用于序列生成(例如语言建模)。
    • 一些研究专注于在语言建模上预训练 Transformer 解码器。例如,生成式预训练 Transformer(GPT)系列(包括 GPT、GPT-2 和 GPT-3)致力于扩展预训练的 Transformer 解码器,并展示了大规模预训练模型可以通过任务和示例作为提示实现令人印象深刻的少样本性能。
  • 编码器-解码器
    • 使用完整的 Transformer 架构,通常用于序列到序列建模(例如神经机器翻译)。
    • 也有一些预训练模型 (BART、T5) 采用 Transformer 编码器-解码器作为整体架构。使用编码器-解码器架构的好处是模型具备执行自然语言理解和生成的能力。

Transformer 最初是为机器翻译设计的,但由于其灵活的架构,已广泛应用于 NLP 以外的领域,包括 CV 和音频处理。

  • 自然语言处理:Transformer 及其变体在 NLP 任务中得到了广泛探索和应用,例如机器翻译、语言建模和命名实体识别。
  • 计算机视觉:Transformer 也被用于各种视觉任务,例如图像分类、目标检测、图像生成和视频处理。
  • 音频应用:Transformer 可以扩展到音频相关应用,例如语音识别、语音合成、语音增强和音乐生成。
  • 多模态应用:由于其灵活的架构,Transformer 也被应用于各种多模态场景,例如视觉问答、视觉常识推理、字幕生成、语音到文本翻译和文本到图像生成。

Scaling Laws 理论

1) 2020_arXiv:2001.08361_v1_Scaling Laws for Neural Language Models

这篇综述提出了 Scaling Laws 理论,作为笔者学位论文相关内容的参考。

摘抄:

  • 性能主要取决于规模,而对模型结构的依赖较弱:模型性能最强烈地取决于规模,规模由三个因素组成:模型参数数量 N N N(不包括嵌入层)、数据集大小 D D D 以及训练使用的计算量 C C C。在合理的范围内,性能对其他架构超参数(如深度与宽度)的依赖非常弱。
  • 我们的结果强烈表明,更大的模型将继续表现更好,并且其样本效率也将比之前认为的更高。大模型可能比大数据更为重要

2) 2022_NeurIPS_A会_Training Compute-Optimal Large Language Models

这篇综述丰富了 Scaling Laws 理论,提出了与上篇综述不同的观点,作为笔者学位论文相关内容的参考。

作者在文中对综述 1) 的讨论:

Kaplan 等人展示了自回归语言模型(LM)的参数数量与其性能(以评估困惑度衡量)之间存在幂律关系。其中一个显著的结论是,大型模型不应训练到最低可能的损失以达到计算最优;他们认为,在计算预算增加的情况下,模型规模的增长速度应快于训练集的规模。因此,该领域一直在训练越来越大的模型,同时将训练集规模保持在约 3000 亿个 token,以期获得性能提升。虽然我们发现模型规模和训练集规模之间确实存在权衡,但我们估计大型模型应训练的 token 数量应远多于之前的建议。具体而言,在计算预算增加 10 倍的情况下,我们发现模型规模和训练 token 数量应按相同比例扩展。

摘抄:

  • 近年来,各种大型语言模型被提出。……训练越来越大的模型的趋势显而易见——迄今为止,语言模型规模的增加是推动许多语言建模任务最新技术水平提升的主要原因。然而,大型语言模型面临若干挑战,包括其巨大的计算需求(训练和推理成本随模型规模增加)以及获取更多高质量训练数据的需求。事实上,在这项工作中,我们发现更大规模的高质量数据集将在语言模型的进一步扩展中发挥关键作用。
  • 尽管最近有许多工作使得训练越来越大的模型成为可能,但我们的分析表明,需要更加关注数据集的扩展。推测而言,我们预计只有当数据是高质量时,扩展到越来越大的数据集才是有益的。这要求以高质量为重点,负责任地收集更大的数据集

深度学习框架

1) 2023_电子元器件与信息技术_普刊_国内外深度学习框架分析与研究

有助于了解深度学习框架的发展。

摘抄:

  • 深度学习框架被称作第四次技术革命的操作系统,不仅支撑着深度学习技术研发,还对相关的智能化领域的芯片设计有至关重要的影响。智能行业广泛认为深度学习框架和AI芯片是第四次技术革命中最重要的两项“基础设施”

  • 随着 TensorFlow 在全球范围内用户数量的剧增,其框架自身的缺点也逐渐暴露出来。

    • 首先,对于初学者搭建模型是十分困难的。研究人员需要认真考虑模型的架构,正确地计算好输入和输出的数据的维度和数量才能着手搭建;
    • 其次,框架过于复杂的系统设计和频繁变动的接口设计也极大地降低了用户体验;
    • 最后,框架是基于静态图处理编译,用户需要先定义图形,再进行计算,虽然效率较高,但调试难度增大
  • 国内外主流深度学习框架的发展:

    • 2002年,Torch,瑞士戴尔莫尔感知人工智能研究所,第一个机器学习库。
    • 2007年,Theano,加拿大蒙特利尔大学 MILA 小组,第一个深度学习框架。
    • 2013年9月,Caffe,加州大学伯克利分校在读博士贾扬清,12月正式开源。
    • 2015年11月,TensorFlow,Google,正式开源,一款真正由工业界推出的深度学习框架。
    • 2016年1月,MXNet,李沐、陈天奇等学生,测试版正式开源。
    • 2016年1月,CNTK,微软黄学东博士团队,正式开源。
    • 2016年8月,飞桨(PaddlePaddle),百度,国内首个开源深度学习框架。
    • 2016年11月,Caffe2,Facebook 贾扬清,2017年4月正式开源,工业级深度学习框架。
    • 2017年2月,TensorFlow 1.0,Google。
    • 2018年12月,PyTorch 1.0,Facebook 在 NeurIPS 大会上正式发布,专注于模型的研究和设计。
    • 2019年9月,TensorFlow 2.0,Google,默认采用动态图处理方式。
    • 2020年3月,MindSpore,华为,正式开源。
    • 2020年3月,天元(MegEngine),旷世科技,正式开源。
    • 2020年7月,Oneflow,一流科技,正式开源。
    • 2020年4月,计图(Jittor),清华大学计算机系胡事民教授团队,正式开源。
    • 2021年3月,飞桨2.0,百度,全面支持动态图编译,编程方式默认为动态图。

2) 2023_调研世界_普刊_深度学习框架发展综述

有助于了解深度学习框架的发展。

摘抄:

  • 随着深度学习理论与应用的快速发展,对于编程框架和平台的需求也日渐增强。在没有框架的情况下,开发者和使用者需要编写大量代码来完成复杂的计算操作,具有很高的学习成本和门槛。而框架通过将底层算法进行模块化封装极大提高了代码编写的效率并降低了使用门槛,推动了深度学习模型的发展和应用部署。深度学习框架已经成为了深度学习领域的“操作系统”。随着我国经济进入高质量发展阶段,深度学习框架作为人工智能的基础设施,也成为了新基建的核心之一。
  • TensorFlow 在工业界占有主流地位。……其静态图的特性使模型的运行部署效率更高,更受工业应用欢迎。……虽然 TensorFlow 框架是当前使用最广泛的深度学习框架,但也存在许多问题:……。第四,调试困难。由于 TensorFlow 采用了先定义再运行的静态图模式,故在调试上存在一定困难。为了解决这一缺点,TensorFlow 后续又推出了 Eager 模式,无需先构造计算图,可以直接对结果进行评估。
  • PyTorch 框架具有许多优点:第一,PyTorch 使用了动态图框架。动态图框架中计算图在运行过程中构建,因此动态图框架更易调试,具有更高的灵活性。……PyTorch 也存在一些不足,例如,动态图模式虽然更易调试,但在运行效率上低于静态图

图表:

MLSys 训练优化

1) 2020_大数据_T2刊_深度学习中的内存管理问题研究综述

这篇综述算是比较早对 GPU 内存优化进行总结的,分析了大规模深度学习发展面临的内存管理挑战,介绍了 DNN 的结构及训练过程,关注了内存交换、重计算、内存复用和模型压缩技术。虽然部分内容较老,但文中的很多表述还是值得引用和学习的。

摘抄:

  • 近年来,深度学习已经在多个领域取得了巨大的成功。深度神经网络向着更深更广的方向发展,训练和部署深度神经网络模型都将面对巨大的内存压力。加速设备有限的内存空间已经成为限制神经网络模型快速发展的重要因素,如何在深度学习中实现高效的内存管理成为深度学习发展的关键问题
  • 深度和宽度是构建深度神经网络最重要和有效的两个因素。神经网络的深度越深、功能层越多,越能有效地降低超参数选择的复杂性,提高模型的鲁棒性。与深度相比,宽度是构建网络的另一个重要因素,它通过不同大小的卷积积累了更多的特征图。
  • 深度学习应用是一种计算密集型和内存密集型的任务。……各种专用加速设备为深度神经网络的发展提供了强大的算力支撑。设计更深层次的深度神经网络可以达到更高的精度,但是这也给各种加速设备带来了极大的挑战。……这一限制阻碍了深度学习研究者去探索更先进的模型架构。
  • 神经网络需要经过训练才能用于推理或分类任务。训练通过执行正向传播算法和反向传播算法,学习和更新神经网络各层的权值。……正向传播的计算是一个序列化的过程,……
  • 机器学习框架极大地简化了神经网络的实现过程,成为帮助研究者开展研究的利器。但是这些机器学习框架在内存管理方面受到严重的限制
    1. 现有的机器学习框架在训练 DNN 时,DNN 所有层所需的内存空间必须能够被放在加速设备的内存中。……内存分配策略没有考虑到 DNN 分层训练的特点,这对内存资源造成了极大的浪费。
    2. 神经网络的输入通常成批地训练数据,这有助于网络模型更好地收敛到最优解,但也将显著增加内存占用。
  • 随着 DNN 的网络结构向着更深、更广的方向发展,训练 DNN 时所需的内存空间越来越大,单个加速设备的内存已经不能满足训练的需求。……模型并行可以显著地缓解单个加速设备的内存压力。然而,由于多 GPU 之间需要频繁地通信来更新模型参数,导致它的性能较差。因此,需要通过内存管理解决现有内存分配策略带来的内存浪费问题,使得深度学习系统能够充分利用加速设备的算力和有限的内存资源,保证大规模神经网络在单个加速设备中能够快速训练
  • 在训练过程中,加速设备的内存主要被 3 个部分消耗:存储正向传播中产生的特征映射、存储反向传播中的梯度映射以及卷积算法需要的额外内存空间。……在这 3 个部分中,后两个部分是临时内存,可以在当前计算完成后立即释放。正向传播和反向传播的计算都需要特征映射,只有在反向传播计算完成后,对应层的特征映射占用的内存空间才能够被释放。……特征映射在正向传播和反向传播中参与的两次计算之间存在很大的时间间隔,这也为内存管理带来很多可能。
  • 降低单个设备训练神经网络时的内存消耗
    1. 内存交换技术是指在加速设备内存和主存之间交换数据,通过在不使用变量时将其从加速设备的内存交换到主存的方式来降低加速设备的内存消耗,并在下一次访问变量之前将其交换回加速设备内存。加速设备的内存容量相对于主存来说要小很多。……内存交换能够交换几乎所有的设备内存数据,因此其能够大幅度地降低设备内存的占用率。在理想情况下,数据在主存和设备内存之间的通信可以隐藏在计算之下,从而最小化数据传输开销。……通过对神经网络训练过程中一些特征的观察,许多工作(vDNN、moDNN、Layrub、SuperNeurons、Capuchin)采用内存交换的方式进行训练时的内存管理,使得有限的 GPU 内存能够充分发挥作用,满足更深、更广的神经网络模型的训练需要。但是如何降低内存交换产生的性能损失还激励着研究者们不断探索新的内存交换策略,最终实现在保证训练性能的同时大幅降低设备内存占用的目的。
    2. 重计算技术的思想是将特征映射这样的中间结果在正向传播过程中及时地释放,在反向传播的计算需要用到特征映射时,再通过重新计算的方式生成,进而参与到当前计算中。这是一种利用计算来换 取内存空间的思想。……任何重计算方法(Sublinear、SuperNeurons、Capuchin、Checkmate)的有效性都取决于其定义的规则:缓存哪些变量以及如何重计算其他变量。目前的研究者围绕这一问题不断提出新的方法,以期望用最小的性能开销换取最大的内存空间
    3. 内存复用是指在生命周期不重叠的变量之间共享同一块内存。(Sublinear、Layrub、SuperNeurons)
    4. 在深度学习的训练阶段,通过压缩算法对变量进行压缩,能够有效降低变量占据的内存空间,减少加速设备内存的占用。……模型剪枝、参数量化等方法会造成模型训练精度的损失,在保持较高精度的同时减小模型占用的内存空间一直以来都是研究的热点。
  • 深度神经网络正朝着更深、更广的方向发展,训练和部署这些深度神经网络需要更大的内存空间,这对深度学习系统中的内存管理提出了新的挑战。如何在深度学习系统中进行高效的内存管理,从而满足更深、更广层次的神经网络模型的训练需求,是当前深度学习系统研究的重要问题
  • 大多数工作通过观察、分析 DNN 模型训练过程中的一些特征,从数据流图、层以及张量等不同的维度,应用上述的一种或多种技术方案,充分发挥各技术的优势,实现有效的内存管理。
  • 内存交换技术中交换单元的大小对系统的性能有较大的影响,先前的解决方案以页面为内存交换的基本单位,但是性能较差,现在最好的解决方案是以张量为内存交换的基本单位,在虚拟内存中能够以一个更合适的粒度对内存进行管理,从而实现更好的性能。但是以张量为粒度的方案并不一定是最优的,后续的研究也需要探索更多可能的方案。此外,内存管理策略也十分重要,内存管理策略决定了优化内存占用的效果。目前的研究都朝着这个方向努力,但是还没有很好的内存管理策略能够实现内存占用和计算性能的完美平衡

2) 2023_中国科学:信息科学_T1刊_并行智能训练技术:挑战与发展

这篇论文是 NUDT PDL 发的,作者关注的是分布式训练中的优化技术。我们重点学习内存交换和重计算相关的内容。

摘抄:

  • 海量数据的获得以及智能算力的提升推动人工智能迎来第三次发展浪潮。
  • 伴随人工智能技术的快速发展, 智能模型参数训练数据的规模呈爆炸式增长。
  • 人工智能飞速发展离不开大模型、大数据、大算力的 “暴力美学”。
  • 智能模型训练过程主要包括神经网络的前向和反向计算,其中涉及大量高维矩阵运算,通用 CPU 难以应对这类计算密集型任务,而 GPU,FPGA 等加速芯片并行计算的特性使其被广泛用于深度学习模型训练任务。因此,目前并行智能训练系统通常是异构的,包含了 CPU 和专用硬件加速芯片。这种异构计算系统由 CPU 访问主存或 I/O 设备读取数据,将数据传输给硬件加速器进行模型训练。
  • 随着异构加速设备的性能持续增长,智能模型训练的通信频率不断提高,同时智能模型参数量的增加也直接加大了参数通信的数据规模。上述两方面的因素导致了参数通信开销在系统中占比增加,参数通信开销成为了制约大规模并行智能训练效率提升的性能瓶颈。……智能模型训练中密集的参数通信严重影响了并行智能训练系统的吞吐率和可扩展性
  • 按照数据划分和模型划分两个计算任务划分维度,并行智能训练包括数据并行模型并行两种基础并行训练模式,以及混合多种并行模式的混合并行模式。根据智能模型特点,模型并行又演化出流水线并行张量并行专家并行等多种计算模式。
  • 内存溢出(out of memory, OOM)是大型模型训练中经常出现的错误。智能训练系统中设备高速内存的总量,成为制约智能训练系统对大型模型支撑能力的主要因素。
  • 在多计算设备参与的多进程并行智能训练中,内存优化技术有了新的空间。在数据并行训练中,零冗余优化器(ZeRO)内存优化技术将模型的优化器状态梯度参数划分至各个工作设备上,从而消除冗余的存储开销。ZeRO-Offload 在 ZeRO 的基础上,将在 GPU 上保存的优化器状态梯度的切分卸载至内存,并且在整个训练阶段将优化器状态维持在内存中。ZeRO-Infinity 则进一步将 NVMe 存储加入到数据并行训练系统之中,使模型参数可扩展到更大规模。
  • 人工智能技术发展对于国家经济和国防建设都具有重要意义。并行智能训练技术和框架软件,向下依托高性能智能训练硬件系统,向上支撑人工智能算法开发和运行,是人工智能技术持续发展的关键,是智能训练软件生态建设的核心。随着人工智能算法的快速演进,作为底层系统支撑技术,并行智能训练将面临更多严峻挑战,具有重要的研究价值和广泛的应用前景。

图表:

基于 Transformer 的预训练模型参数量已超过十亿 (billion) 数量级,而且模型规模的增长速度非常快,如图2所示,近年发布的预训练模型参数量增长了超过 1000 倍

如图2所示,与大规模模型的参数量增长速度相比,常用智能计算加速器的内存容量增长较为缓慢。因此,如何在保证训练效率的同时高效地利用内存空间,成为大规模智能模型训练的一大挑战。

显存交换(swap)是一种利用 CPU 内存来保存中间计算结果以节省 GPU 内存空间的方法,如图5(a)所示,其主要思想是在前向传播中将计算得到的激活值从 GPU 内存卸载到 CPU 内存中,在反向传播的时候再将所需要的激活值加载到 GPU 内存中。得益于 GPU 计算任务与传输任务的可并行性,swap 方法有不会占用 GPU 额外的计算资源的优点,但受限于 PCIe 链路的带宽,卸载与加载的时间开销往往较大。(vDNN、moDNN、SwapAdvisor)

重计算(recomputation)是一种以时间换空间的优化方法,如图5(b)所示,其主要思想是利用前向传播计算的中间结果(即模型激活值)在反向传播时才会被使用这一特点,在前向过程中将部分激活值直接丢弃,在反向传播需要时再重新进行前向传播的计算以获得所需的激活值。重计算的优点是能够立刻释放大量内存,但是其缺点同样也很突出,因为其在进行反向传播时需要再进行一次前向计算,这将产生额外的计算开销。(Sublinear、Checkmate、DTR)

深度学习框架为智能计算模型的构建、训练、评估等开发流程提供了基础的编程接口和运行环境。图6展示了深度学习框架随着深度学习的发展从工具包时代数据流时代再到大规模并行训练时代的发展历程。

智能训练框架为智能模型的开发提供编程接口运行环境,对于深度学习发展具有重要的推动作用。然而,随着训练数据和模型参数规模的增长,智能训练需要的计算设备规模越来越大,并行智能训练方式也越来越复杂,传统的 TensorFlow、PyTorch 等基础深度学习框架已经不能满足大规模智能模型的开发和训练需求。因此,数据并行训练框架和混合并行训练框架先后被提出,通过对并行智能训练方法进行封装抽象出简单易用的用户接口,降低并行智能训练的编程难度,进一步推动深度学习技术的发展。

3) 2023_软件学报_T1刊_面向深度学习训练的内存交换机制综述

这篇论文专注于分析内存交换,文中的理论分析部分很不错,而且从多个角度对不同的内存交换工作进行了比较,写得比较有深度,部分内容也有一些抽象。

摘抄:

  • 内存交换机制是近年来应对内存管理挑战的一种重要技术,其核心思想是利用深度学习训练内存需求的“时变”特征,通过在某一时间点将内存数据从专用计算加速设备内存中动态移出,并在数据被访问时从外部存储将其重新移回专用计算加速设备内存,以瞬时内存需求替代累积内存需求,达到深度学习训练累积内存可以超出单个专用计算加速设备的内存容量的效果,保障深度学习训练在此设备上的可用性与性能
    • 可用性目标:降低深度学习训练的瞬时内存需求。内存交换机制通过选择算子数据换出内存,保障深度学习瞬时内存需求低于专用计算加速设备的内存容量,不因内存不足而崩溃。
    • 性能目标:减少深度学习训练阻塞。内存交换机制通过为每一算子确定交换内存数据的时刻,减少深度学习训练因内存交换产生的阻塞,保障深度学习训练性能。
  • 为了实现可用性与性能目标,内存交换机制需要选择内存不足时换出的算子数据,确定其换入内存的时刻,最终产生可行的内存交换方案。在这一过程中,内存交换机制具体面临如下 3 方面的挑战。
    1. 如何确定从内存换出的算子数据。👉 内存交换机制需要结合算子运行特征构建换出机制,确定从内存换出的算子数据,满足可用性目标。
    2. 如何确定算子数据换入到内存的时刻。👉 内存交换机制需要结合数据依赖关系,构建换入机制,确定将算子数据换入到内存的时刻,满足性能目标。
    3. 如何避免算子换出与换入冲突。👉 内存交换机制需要结合考虑深度学习训练运行状况和内存交换优化策略等运行阶段因素,进行效用驱动的联合决策,避免算子换出与换入决策冲突,以最终满足可用性与性能目标。
  • 内存交换机制可以应用于大规模深度学习训练之中,以降低分布式深度学习训练对于专用计算设备数量的要求。……使用深度学习框架运行的深度学习训练可以利用内存交换机制,降低大规模深度学习训练对于内存的瞬时需求,保障深度学习训练的运行

内存换出机制:

  • 先出后入换出机制
    • 即时换出:深度学习框架在前向传播某一算子数据不再被使用时,换出其内存数据。(Capuchin、FlashNeuron、HALO)
    • 按需换出:深度学习框架在内存不足时,通过内存换出机制释放内存空间。
      • (moDNN、SuperNeurons)使用 LRU 算法换出最近最少使用的算子数据,而最近最少使用的算子通常是最先进行前向传播的算子
      • (Layrub、Dymem)使用引用计数描述运行阶段的依赖状况,在前向传播算子先出后入之上,当算子的引用计数减为 0 时移出其数据,避免换出即将被访问的内存数据
  • 大算子优先换出机制
    • 观察总结的内存占用状况:(vDNN、SuperNeurons、Layrub、HALO)在这一机制下,深度学习框架在选择换出的算子数据时,仅考虑算子数据的类别,而不考虑算子数据的实际数据量。
    • 动态获取的内存占用状况:(Capuchin、FlashNeuron)算子因处于模型的不同位置,其数据量可能存在较大的差异,深度学习框架可以结合观察总结的算子内存占用差异,限制动态选择换出算子的范围,在卷积等算子中选择占用更多内存空间的算子,降低动态选择的开销。
  • 周期性换出机制:深度学习框架基于算子迭代间的稳定性特征,在每次迭代中收集运行状况信息,周期性换出内存数据。
    • 试运行:(vDNN、FlashNeuron)
    • 构建预测模型
    • 运行一次迭代:(Capuchin)
    • 将换出决策写入算子计算图:(LMS)

获取运行时间信息(根据深度学习训练配置的稳定性进行区分):

  • 面向稳定深度学习训练配置的监测方法:深度学习框架在深度学习参数与计算资源配置不变时,通过监测训练阶段若干迭代的运行,获取在整个深度学习训练阶段中持续有效的算子运行时间信息。……内存使用的监测仅在深度学习训练开始的若干个迭代运行,因此具有较低的开销。但随着深度学习训练向云端的迁移,深度学习训练可能运行于训练集群中,由深度学习调度框架动态分配与调整训练资源。深度学习框架可能需要在大量参数、资源配置上进行试运行,并在运行时采取其他优化方案优化深度学习的内存占用,在这些情况下,深度学习训练的运行时间与内存需求均可能发生改变,频繁监测将产生较大的开销
  • 面向动态深度学习训练配置的预测方法:深度学习框架面向深度学习训练参数配置(批尺寸、算子实现等配置)与资源配置(GPU、内
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值