Project Icon

Adan

快速优化深度学习模型的新方法

Adan是一种新型优化算法,结合适应性学习率和Nesterov动量,旨在加速深度学习模型训练。它在计算机视觉、自然语言处理和大规模语言模型等多个领域表现优异。相比Adam和AdamW,Adan通常能使用更大的学习率,训练速度提升5-10倍,同时保持或提高模型精度。目前,Adan已被NVIDIA NeMo、Meta AI D-Adaptation等多个知名深度学习框架和项目采用。

Adan: 自适应 Nesterov 动量算法,用于更快地优化深度模型

这是 Adan 的官方 PyTorch 实现。论文可以在这里查看。如果您发现我们的 adan 对您的项目有帮助或启发,请引用这篇论文并为这个仓库点星。谢谢!

@article{xie2024adan,
  title={Adan: 自适应 Nesterov 动量算法,用于更快地优化深度模型},
  author={Xie, Xingyu and Zhou, Pan and Li, Huan and Lin, Zhouchen and Yan, Shuicheng},
  journal={IEEE 模式分析与机器智能汇刊},
  year={2024},
  publisher={IEEE}
}

支持的项目

新闻

  • :fire::fire::fire: 在大型语言模型(如 MoE 和 GPT2)上的结果已发布。
  • 内存占用更少的 FusedAdan 已发布。

安装

python3 -m pip install git+https://github.com/sail-sg/Adan.git

默认安装 FusedAdan。如果您想使用原始的 Adan,请通过以下方式安装:

git clone https://github.com/sail-sg/Adan.git
cd Adan
python3 setup.py install --unfused

使用方法

为了方便您使用 Adan,我们简要提供了一些直观的说明,然后提供一些通用的实验技巧,最后为论文中的每个实验提供更多细节(如具体命令和超参数)。

1) 使用 Adan 的两个步骤

步骤 1. 通过在配置中添加以下超参数来添加 Adan 依赖的超参数:

parser.add_argument('--max-grad-norm', type=float, default=0.0, help='如果 l2 范数大于此超参数,则裁剪梯度(默认:0.0,不进行梯度裁剪)')
parser.add_argument('--weight-decay', type=float, default=0.02,  help='权重衰减,类似于 AdamW 中使用的值(默认:0.02)')
parser.add_argument('--opt-eps', default=None, type=float, metavar='EPSILON', help='优化器 epsilon,用于避免二阶矩为零的不良情况(默认:None,在 adan 中使用优化器默认值 1e-8)')
parser.add_argument('--opt-betas', default=None, type=float, nargs='+', metavar='BETA', help='Adan 中的优化器 beta 值(默认:None,在 Adan 中使用优化器默认值 [0.98, 0.92, 0.99])')
parser.add_argument('--no-prox', action='store_true', default=False, help='是否像 AdamW 那样执行权重衰减(默认为 False)')

opt-betas:为保持与我们的使用习惯一致,论文中的 $\beta$ 实际上是代码中的 $(1-\beta)$。

foreach (bool):如果为 True,Adan 将使用 torch._foreach 实现。它更快但使用略多的内存。

no-prox:它决定了带权重衰减的参数的更新规则。默认情况下,Adan 按照论文中算法 1 所示的方式更新参数:

$$\boldsymbol{\theta}_{k+1} = ( 1+\lambda \eta)^{-1} \left[\boldsymbol{\theta}_k - \boldsymbol{\eta}_k \circ (\mathbf{m}_k+(1-{\color{blue}\beta_2})\mathbf{v}_k)\right]$$

但也可以像 Adamw 那样更新参数:

$$\boldsymbol{\theta}_{k+1} = ( 1-\lambda \eta)\boldsymbol{\theta}_k - \boldsymbol{\eta}_k \circ (\mathbf{m}_k+(1-{\color{blue}\beta_2})\mathbf{v}_k).$$

步骤 2. 创建 Adan 优化器如下。在这一步中,我们可以直接使用以下命令替换原始优化器:

from adan import Adan
optimizer = Adan(param, lr=args.lr, weight_decay=args.weight_decay, betas=args.opt_betas, eps = args.opt_eps, max_grad_norm=args.max_grad_norm, no_prox=args.no_prox)

2) 实验技巧

  • 为了简化Adan,除论文中的表12外的所有实验中,我们没有使用Adan的重启策略。但表12显示重启策略可以进一步略微提高Adan的性能。
  • Adan通常允许使用更大的峰值学习率,这往往会导致其他优化器(如Adam和AdamW)失败。例如,除了MAE预训练和LSTM外的所有实验中,Adan使用的学习率是Adam/AdamW的5-10倍
  • Adan对beta1beta2beta3相对鲁棒,尤其是对beta2。如果你想要更好的性能,可以先调整beta3,然后再调整beta1
  • 在单节点上,Adan比Adam/AdamW略微增加了GPU内存消耗。然而,这个问题可以通过使用ZeroRedundancyOptimizer来解决,它在分布式数据并行进程中共享优化器状态以减少每个进程的内存占用。具体来说,当在两个以上的GPU上使用ZeroRedundancyOptimizer时,Adan和Adam消耗的内存几乎相同。

3) 更多详细步骤和结果

请参考以下链接获取详细步骤。在这些详细步骤中,我们甚至包含了docker镜像以便复现。

各种任务的结果

大型语言模型的结果

专家混合系统(MoE)

为了研究Adan优化器对LLM的有效性,我们使用MoE模型进行了预训练实验。这些实验使用了RedPajama-v2数据集,有三种配置,每种包含8个专家:8x0.1B(共0.5B可训练参数)、8x0.3B(2B可训练参数)和8x0.6B(4B可训练参数)。这些模型分别用10B、30B、100B和300B个token的采样数据进行训练。

模型大小8x0.1B8x0.1B8x0.1B8x0.3B8x0.3B8x0.3B8x0.6B
Token数量10B30B100B30B100B300B300B
AdamW2.7222.5502.4272.3622.2182.0702.023
Adan2.6972.5132.4042.3492.2062.0452.010

GPT2-345m

我们提供了在BigCode数据集上预训练的GPT2-345m的配置和日志,并通过零样本学习在HumanEval数据集上进行评估。HumanEval用于衡量从文档字符串合成程序的功能正确性。它包含164个原创编程问题,评估语言理解、算法和简单数学,其中一些可与简单的软件面试问题相媲美。我们在评估时设置Temperature = 0.8

步骤pass@1pass@10pass@100下载
GPT2-345m (Adam)300k0.08400.2090.360日志&配置
GPT2-345m (Adan)150k0.08430.2210.377日志&配置

Adan仅用一半的成本就获得了可比的结果

视觉任务的结果

为了方便您使用Adan,我们提供了ImageNet-1k实验的配置和日志文件。

模型训练轮数训练设置准确率 (%)配置文件批量大小下载链接
ViT-S150I80.1配置2048日志/模型
ViT-S150II79.6配置2048日志/模型
ViT-S300I81.1配置2048日志/模型
ViT-S300II80.7配置2048日志/模型
ViT-B150II81.7配置2048日志/模型
ViT-B300II82.6配置2048日志/模型
ResNet-50100I78.1配置2048日志/模型
ResNet-50200I79.7配置2048日志/模型
ResNet-50300I80.2配置2048日志/模型
ResNet-101100I80.0配置2048日志/模型
ResNet-101200I81.6配置2048日志/模型
ResNet-101300I81.9配置2048日志/模型
ConvNext-tiny150II81.7配置2048日志/模型
ConvNext-tiny300II82.4配置2048日志/模型
MAE-small800+100---83.8配置4096/2048预训练日志/微调日志/模型
MAE-Large800+50---85.9配置4096/2048预训练日志/微调日志/模型

自然语言处理任务结果

BERT-base

我们提供了在Bookcorpus和Wikipedia数据集上预训练并在GLUE任务上微调的BERT-base模型的配置和日志文件。请注意,我们在./NLP/BERT文件夹中提供了BERT-base的配置、日志文件和详细说明

预训练配置批量大小日志模型
Adan配置256日志模型
在GLUE任务上微调评估指标结果配置
--------------------:-----------:-----::--------------------------------------------------:
CoLAMatthew相关系数64.6配置
SST-2准确率93.2配置
STS-B皮尔逊相关系数89.3配置
QQP准确率91.2配置
MNLI匹配准确率/不匹配准确率85.7/85.6配置
QNLI准确率91.3配置
RTE准确率73.3配置

关于GLUE任务的微调,请参阅相应配置文件中的总批量大小。

Transformer-XL-base

我们提供了在WikiText-103数据集上训练的Transformer-XL-base的配置和日志。此实验的总批量大小为60*4

步数测试困惑度下载
基准(Adam)200k24.2日志&配置
Transformer-XL-base50k26.2日志&配置
Transformer-XL-base100k24.2日志&配置
Transformer-XL-base200k23.5日志&配置

大型语言模型的结果

GPT2-345m

我们提供了在来自BigCode的数据集上预训练的GPT2-345m的配置和日志,并通过零样本学习在HumanEval数据集上进行评估。HumanEval用于衡量从文档字符串合成程序的功能正确性。它包含164个原始编程问题,评估语言理解、算法和简单数学,其中一些可与简单的软件面试问题相媲美。我们在评估时设置温度 = 0.8

步数pass@1pass@10pass@100下载
GPT2-345m (Adam)300k0.08400.2090.360日志&配置
GPT2-345m (Adan)150k0.08430.2210.377日志&配置

Adan仅用一半的成本就获得了可比的结果

扩散模型的结果

我们展示了由DreamFusion项目支持的文本到3D任务的结果。更多可视化结果可以在这里找到。 以下是使用Adam和Adan从文本提示"悉尼歌剧院,鸟瞰图"生成的示例:

视频1

视频2

内存和效率

以下是优化器峰值内存和运行时间的简要比较。持续时间是200次optimizer.step()的总时间。我们进一步详细比较了GPT-2上的Adam和FusedAdan。更多结果请参见这里

模型模型大小 (MB)Adam 峰值 (MB)Adan 峰值 (MB)FusedAdan 峰值 (MB)Adam 时间 (ms)Adan 时间 (ms)FusedAdan 时间 (ms)
ResNet-50257142719571769.04.21.9
ResNet-1014410055102151016017.57.03.4
ViT-B869755975897588.912.34.3
Swin-B8716118162021617317.912.84.9
ConvNext-B8817353173891737719.115.65.0
Swin-L19624299243162431017.528.110.1
ConvNext-L19726025260552604418.631.110.2
ViT-L30425652256582565618.043.215.1
GPT-275825096254062510049.9107.737.4
GPT-2131334357385953436381.8186.064.4
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号