Adam-mini:内存占用减半,性能更优的深度学习优化器

简介: 论文提出一种新的优化器Adam-mini,在不牺牲性能的情况下减少Adam优化器的内存占用。

Adam(W)目前为训练LLM的主流优化器,但其内存开销较大,这是因为Adam优化器需要存储一阶动量m和二阶动量v,总内存占用至少是模型大小的两倍,这对现有的高端显卡也是一种负担。论文提出一种新的优化器Adam-mini,在不牺牲性能的情况下减少Adam优化器的内存占用。

Adam-mini

Adam-mini通过减少学习率资源来降低内存占用的具体方法如下:

  1. 参数分块:Adam-mini首先将模型参数按照Hessian矩阵的结构划分为多个块。Hessian矩阵通常具有近似块对角结构,每个块代表一组参数。论文提出的分块策略基于Hessian结构,将每个块内的参数视为一个整体进行处理。
  2. 块内平均学习率:对于每个参数块,Adam-mini不再为每个参数单独分配学习率,而是为整个块分配一个平均的学习率。具体方法是计算块内所有参数的梯度平方的平均值,然后基于这个平均值来计算该块的学习率。这一过程显著减少了所需的学习率数量。
  3. 内存节省:由于Adam-mini使用的学习率数量大大减少,所需的二阶动量(即Adam中的v参数)的存储也相应减少。论文中的实验表明,这种方法可以减少45%到50%的内存占用。
  4. 具体算法:- 在初始化时,将模型参数分块。- 对于每个参数块,计算块内梯度平方的平均值,并更新块的学习率。- 使用更新后的学习率进行参数更新。

这种方法不仅减少了内存占用,还通过减少GPU和CPU之间的通信开销,提高了训练效率。例如,在Llama2-7B模型的预训练中,Adam-mini在两块A800-80GB GPU上实现了比AdamW高49.6%的吞吐量,并节省了33%的训练时间。

算法示例

 # Adam-mini 的伪代码
 defadam_mini(params, grads, lr, beta1, beta2, epsilon, weight_decay):
     # 初始化动量和二阶动量
     m= {}
     v= {}
     forparaminparams:
         m[param] =np.zeros_like(param)
         v[param] =np.zeros_like(param)

     # 参数分块
     param_blocks=partition_parameters(params)

     forblockinparam_blocks:
         # 获取当前块的梯度
         grad_block= [grads[param] forparaminblock]

         # 更新动量
         m_block= (1-beta1) *grad_block+beta1*m_block
         m_block_hat=m_block/ (1-beta1**t)

         # 更新二阶动量(平均值)
         v_block= (1-beta2) *np.mean([g**2forgingrad_block]) +beta2*v_block
         v_block_hat=v_block/ (1-beta2**t)

         # 更新参数
         forparaminblock:
             param_update=lr*m_block_hat/ (np.sqrt(v_block_hat) +epsilon)
             params[param] -=param_update+weight_decay*params[param]

     returnparams

通过这种方法,Adam-mini成功地减少了学习率资源的使用,从而大幅降低了内存占用,并在多种任务中表现出色。

性能表现

1、内存和吞吐量性能

Adam-mini在预训练Llama2-7B模型时的性能:

  • 内存占用:Adam-mini显著降低了内存占用。例如,在Llama2-7B预训练时,Adam-mini减少了45%到50%的内存消耗。
  • 吞吐量:由于内存减少,Adam-mini能够支持更大的每GPU批次大小,从而提高了吞吐量。在两块A800-80GB GPU上,Adam-mini实现了比AdamW高49.6%的吞吐量,节省了33%的训练时间。

2、预训练性能

  • TinyLlama-1B:图7(a)显示了TinyLlama-1B的验证损失曲线。Adam-mini的表现与AdamW相当,但内存占用更低。
  • GPT2系列:图8展示了GPT2不同规模模型的训练曲线,包括GPT2-125M、GPT2-330M、GPT2-770M和GPT2-1.5B。Adam-mini在所有这些模型上的表现均与AdamW相当,而Adafactor、CAME等方法在这些任务中的表现较差。

通过这些实验结果,论文证明了Adam-mini不仅在内存占用和计算效率上优于传统的AdamW,还能在不同任务中保持或提升模型性能。这些结果表明,Adam-mini是一个有效且高效的优化器,适用于大规模模型的训练和微调。

非LLM任务的表现

Adam-mini在多种非LLM任务中均表现出色,能够在减少内存占用的同时,保持或提升模型性能。这些结果证明了Adam-mini在图像识别、扩散模型训练和图卷积网络等任务中的广泛适用性和有效性。

图像分类:在ImageNet上训练ResNet18,Adam-mini的测试精度与AdamW相当。

扩散模型训练:在CelebA数据集上训练扩散模型,Adam-mini的训练损失低于AdamW。

图神经网络:在OGB-arxiv数据集上训练Graph Convolution Network (GCN)和Graph Attention Network (GAT),Adam-mini的验证精度优于或相当于AdamW。

总结

Adam-mini基于Hessian矩阵的结构,将模型参数划分为多个块,每个块使用单一的平均学习率,从而大幅减少了需要存储的学习率数量。在非LLM任务中的实验结果进一步验证了Adam-mini的广泛适用性。Adam-mini不仅在内存占用和计算效率方面具有优势,还能在多种任务中保持或提升模型性能,是一个有效且高效的优化器。

https://avoid.overfit.cn/post/fdf7a6cfd34f4158aaac31a6ed3cc9b6

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
9月前
|
存储 缓存 网络协议
阿里云内存型实例规格性能、价格、适用场景与选型指南参考
阿里云服务器ECS(Elastic Compute Service)提供了多样化的内存型实例规格族,专为需要高性能内存资源的应用场景设计。从最新的r8a系列到经过优化的re6p系列,阿里云内存型实例旨在提供稳定、高效且安全的计算环境。这些实例不仅具备强大的计算性能与内存配比,还通过支持ESSD云盘和高效网络协议,显著提升了存储I/O能力和网络带宽,适用于大数据分析、高性能数据库、内存密集型应用等多种场景。本文将详细解析阿里云ECS中的多个内存型实例规格族,包括它们的核心特点、适用场景、实例规格及具体指标数据,为用户在选型时提供参考。
阿里云内存型实例规格性能、价格、适用场景与选型指南参考
|
12月前
|
机器学习/深度学习 数据采集 自然语言处理
深度学习实践技巧:提升模型性能的详尽指南
深度学习模型在图像分类、自然语言处理、时间序列分析等多个领域都表现出了卓越的性能,但在实际应用中,为了使模型达到最佳效果,常规的标准流程往往不足。本文提供了多种深度学习实践技巧,包括数据预处理、模型设计优化、训练策略和评价与调参等方面的详细操作和代码示例,希望能够为应用实战提供有效的指导和支持。
|
5月前
|
消息中间件 存储 关系型数据库
千亿消息“过眼云烟”?Kafka把硬盘当内存用的性能魔法,全靠这一手!
Apache Kafka 是由 LinkedIn 开发并捐赠给 Apache 基金会的分布式消息队列系统,具备高吞吐、可扩展和容错能力。其核心设计围绕主题、分区、分段和偏移量展开,通过顺序写入磁盘和 Page Cache 提升性能,广泛应用于大数据实时处理场景。
226 0
|
8月前
|
存储 缓存 分布式计算
高内存场景必读!阿里云r7/r9i/r8y/r8i实例架构、性能、价格多维度对比
阿里云针对高性能需求场景,一般会在活动中推出内存型r7、内存型r9i、内存型r8y和内存型r8i这几款内存型实例规格的云服务器。相比于活动内的经济型e和通用算力型u1等实例规格,这些内存型实例在性能上更为强劲,尤其适合对内存和计算能力有较高要求的应用场景。这些实例规格的云服务器在处理器与内存的配比上大多为1:8,但它们在处理器架构、存储性能、网络能力以及安全特性等方面各有千秋,因此适用场景也各不相同。本文将为大家详细介绍内存型r7、r9i、r8y、r8i实例的性能、适用场景的区别以及选择参考。
|
7月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
717 0
|
弹性计算 安全 数据库
【转】云服务器虚拟化内存优化指南:提升性能的7个关键策略
作为云计算服务核心组件,虚拟化内存管理直接影响业务系统性能表现。本文详解了内存优化方案与技术实践,助您降低30%资源浪费。
255 0
【转】云服务器虚拟化内存优化指南:提升性能的7个关键策略
|
9月前
|
存储 分布式计算 安全
阿里云服务器内存型实例怎么选?r7/r8y/r8i实例性能、适用场景与选择参考
在选择阿里云服务器时,针对内存密集型应用和数据库应用,内存型实例因其高内存配比和优化的性能表现,成为了众多用户的热门选择。在目前阿里云的活动中,内存型实例主要有内存型r7、内存型r8y和内存型r8i实例可选。为了帮助大家更好地了解这三款实例的区别,本文将详细对比它们的实例规格、CPU、内存、计算、存储、网络等方面的性能,并附上活动价格对比,以便用户能够全面了解它们之间的不同,以供选择和参考。
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
611 158
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
663 174