Adan
Adan 是一种专为深度学习模型优化设计的自适应优化算法,全称为 Adaptive Nesterov Momentum Algorithm。它通过改进梯度更新的方式,显著提升了训练速度和效率,特别是在大规模深度模型(如语言模型、视觉模型等)中表现出色。相比传统的优化器(如 Adam 或 SGD),Adan 在收敛速度和最终性能上都有明显优势。
Adan 主要解决了深度学习模型训练过程中优化效率低下的问题,尤其是在处理复杂任务(如文本生成 3D 模型、扩散模型等)时,传统优化器可能需要大量调参或更长的训练时间。Adan 通过引入自适应动量机制和梯度裁剪等技术,不仅提高了优化的稳定性,还减少了内存占用,使得训练过程更加高效。
这款优化器非常适合从事深度学习研究的研究人员和开发者使用,尤其是那些专注于计算机视觉、自然语言处理和生成式 AI 的用户。如果你正在训练大型模型(如 GPT-2 或 MoE),或者希望在有限资源下获得更快的训练效果,Adan 将是一个非常实用的选择。
技术亮点方面,Adan 提供了 FusedAdan 版本,进一步降低了内存消耗;同时,它已经被多个主流框架(如 PyTorch、NVIDIA NeMo 和 Huggingface Timm)支持,开箱即用,方便集成到现有项目中。无论是学术研究还是工业应用,Adan 都能为你的模型训练带来显著提升。
使用场景
一位深度学习工程师正在开发一个基于 Transformer 的文本生成模型,用于智能客服系统。为了提升模型性能,他需要训练一个超大规模的语言模型,但遇到了优化效率和收敛速度的瓶颈。
没有 Adan 时
- 使用传统优化器(如 AdamW)时,模型在训练初期收敛速度较慢,导致需要更多的时间来调整超参数。
- 在处理超大规模模型时,显存占用过高,容易出现内存不足的问题,限制了批量大小的选择。
- 模型在复杂任务上的最终性能未能达到预期,可能是因为优化器对梯度更新不够精细,导致局部最优解。
- 训练过程中梯度裁剪和权重衰减等操作需要手动调整,增加了调试的工作量。
- 面对 MoE(混合专家模型)等特殊架构时,优化器的表现不稳定,进一步拖慢了开发进度。
使用 Adan 后
- Adan 的自适应 Nesterov 动量算法显著加快了模型的收敛速度,减少了训练初期的调参需求。
- FusedAdan 版本降低了显存占用,使得工程师能够使用更大的批量大小,从而提高训练效率。
- 更精细的梯度更新机制帮助模型在复杂任务上取得了更高的性能,达到了预期目标。
- 内置的梯度裁剪和权重衰减功能减少了手动配置的工作量,让工程师可以专注于模型设计。
- Adan 对 MoE 和 GPT2 等架构的支持更加稳定,确保了优化过程的一致性和可靠性。
通过 Adan,工程师不仅大幅缩短了模型训练时间,还提升了最终性能,为智能客服系统的上线提供了有力保障。
运行环境要求
- Linux
- macOS
- Windows
需要 GPU,显存大小未说明,CUDA 版本未说明
未说明

快速开始
Adan: 用于更快优化深度模型的自适应 Nesterov 动量算法
这是 Adan 的官方 PyTorch 实现。请在此处查看论文 here。如果你觉得我们的 Adan 对你的项目有帮助或启发,请引用这篇论文并为本仓库点亮星星。谢谢!
@article{xie2024adan,
title={Adan: Adaptive Nesterov Momentum Algorithm for Faster Optimizing Deep Models},
author={Xie, Xingyu and Zhou, Pan and Li, Huan and Lin, Zhouchen and Yan, Shuicheng},
journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
year={2024},
publisher={IEEE}
}
支持的项目
- Adan 的黎曼版本(Radan),包含在 Manify 中 —— 一个非欧几里得机器学习库。
- Adan 在 NVIDIA 提供的框架 NeMo 中得到支持。
- Adan 是高保真文本到3D生成项目的默认优化器。更多详情请参见 Consistent3D。
- Adan 是 Masked Diffusion Transformer V2 的默认优化器。更多详情请参见 MDT V2。
- Adan 在 Meta AI 提供的项目 D-Adaptation 中得到支持。
- Adan 将在 百度飞桨 提供的项目 Paddle 中得到支持。
- Adan 在 Huggingface 提供的 Timm 中得到支持。
- Adan 是文本到3D项目 DreamFusion Project 的默认优化器。更多结果请参见 这里。
- Adan 在 OpenMMLab 项目中的 MMClassification 中得到支持。使用 Adan 训练 ViT-B 的日志和示例请参见 这里。
- TF 的实现(第三方)请参考 DenisVorotyntsev/Adan。
- JAX 版本(第三方)已在 Deepmind/optax 中实现并得到支持。
新闻
- :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 中的优化器 betas (默认值: 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 对
beta1、beta2和beta3相对鲁棒,尤其是对beta2。如果你想要更好的性能,可以先调整beta3,然后再调整beta1。 - 在单节点上,Adan 的 GPU 内存消耗略高于 Adam/AdamW。然而,这个问题可以通过使用 ZeroRedundancyOptimizer 来解决,该工具会在分布式数据并行进程中共享优化器状态以减少每进程的内存占用。具体来说,当在两个以上的 GPU 上使用
ZeroRedundancyOptimizer时,Adan 和 Adam 几乎消耗相同的内存量。
3) 更多详细步骤和结果
请参考以下链接获取详细步骤。在这些详细步骤中,我们甚至包括了用于可重复性的 docker 镜像。
- ViTs、ResNets 和 ConvNext 的 说明。
- MAE 的 说明。
- BERT 的 说明。
- Transformer-XL 的 说明。
- GPT2 的 说明。
- 文本到3D DreamFusion 的 结果。
各项任务的结果
大型语言模型的结果
专家混合模型 (MoE)
为了研究 Adan 优化器在大型语言模型(LLMs)中的有效性,我们使用 MoE 模型 进行了预训练实验。实验使用了 RedPajama-v2 数据集,并设置了三种配置,每种配置包含 8 个专家:8x0.1B(总计 0.5B 可训练参数)、8x0.3B(2B 可训练参数)和 8x0.6B(4B 可训练参数)。这些模型分别使用采样数据进行训练,数据量分别为 10B、30B、100B 和 300B 个 token。
| 模型规模 | 8x0.1B | 8x0.1B | 8x0.1B | 8x0.3B | 8x0.3B | 8x0.3B | 8x0.6B |
|---|---|---|---|---|---|---|---|
| Token 数量 | 10B | 30B | 100B | 30B | 100B | 300B | 300B |
| AdamW | 2.722 | 2.550 | 2.427 | 2.362 | 2.218 | 2.070 | 2.023 |
| Adan | 2.697 | 2.513 | 2.404 | 2.349 | 2.206 | 2.045 | 2.010 |
GPT2-345m
我们提供了基于来自 BigCode 的数据集对 GPT2-345m 进行预训练的配置和日志,并通过零样本学习在 HumanEval 数据集上进行了评估。HumanEval 用于衡量从函数文档字符串合成程序的功能正确性。它包含 164 个原创编程问题,评估语言理解、算法和简单数学能力,其中一些问题类似于简单的软件面试题。我们在评估过程中设置 Temperature = 0.8。
| 步数 | pass@1 | pass@10 | pass@100 | 下载 | |
|---|---|---|---|---|---|
| GPT2-345m (Adam) | 300k | 0.0840 | 0.209 | 0.360 | log&config |
| GPT2-345m (Adan) | 150k | 0.0843 | 0.221 | 0.377 | log&config |
Adan 在仅一半成本的情况下获得了可比的结果。
视觉任务的结果
为了方便您使用 Adan,我们提供了在 ImageNet-1k 上进行实验的配置和日志文件。
| 模型 | 轮次 | 训练设置 | 准确率 (%) | 配置 | 批量大小 | 下载 |
|---|---|---|---|---|---|---|
| ViT-S | 150 | I | 80.1 | config | 2048 | log/model |
| ViT-S | 150 | II | 79.6 | config | 2048 | log/model |
| ViT-S | 300 | I | 81.1 | config | 2048 | log/model |
| ViT-S | 300 | II | 80.7 | config | 2048 | log/model |
| ViT-B | 150 | II | 81.7 | config | 2048 | log/model |
| ViT-B | 300 | II | 82.6 | config | 2048 | log/model |
| ResNet-50 | 100 | I | 78.1 | config | 2048 | log/model |
| ResNet-50 | 200 | I | 79.7 | config | 2048 | log/model |
| ResNet-50 | 300 | I | 80.2 | config | 2048 | log/model |
| ResNet-101 | 100 | I | 80.0 | config | 2048 | log/model |
| ResNet-101 | 200 | I | 81.6 | config | 2048 | log/model |
| ResNet-101 | 300 | I | 81.9 | config | 2048 | log/model |
| ConvNext-tiny | 150 | II | 81.7 | config | 2048 | log//model |
| ConvNext-tiny | 300 | II | 82.4 | config | 2048 | log/model |
| MAE-small | 800+100 | --- | 83.8 | config | 4096/2048 | log-pretrain/log-finetune/model |
| MAE-Large | 800+50 | --- | 85.9 | config | 4096/2048 | log-pretrain/log-finetune/model |
NLP 任务结果
BERT-base
我们提供了在 Bookcorpus 和 Wikipedia 数据集上预训练并在 GLUE 任务上微调的 BERT-base 模型的配置文件和日志文件。请注意,我们在文件夹 ./NLP/BERT 中为 BERT-base 提供了配置、日志文件以及详细的说明。
| 预训练 | 配置 | 批量大小 | 日志 | 模型 |
|---|---|---|---|---|
| Adan | config | 256 | log | model |
| 在 GLUE 任务上的微调 | 指标 | 结果 | 配置 |
|---|---|---|---|
| CoLA | Matthew's 相关系数 | 64.6 | config |
| SST-2 | 准确率 | 93.2 | config |
| STS-B | Pearson 相关系数 | 89.3 | config |
| QQP | 准确率 | 91.2 | config |
| MNLI | 匹配准确率/不匹配准确率 | 85.7/85.6 | config |
| QNLI | 准确率 | 91.3 | config |
| RTE | 准确率 | 73.3 | config |
关于 GLUE 任务的微调,请参阅其对应配置文件中的总批量大小。
Transformer-XL-base
我们提供了在 WikiText-103 数据集上训练的 Transformer-XL-base 的配置和日志。该实验的总批量大小为 60*4。
| 步数 | 测试困惑度 | 下载 | |
|---|---|---|---|
| 基线 (Adam) | 200k | 24.2 | log&config |
| Transformer-XL-base | 50k | 26.2 | log&config |
| Transformer-XL-base | 100k | 24.2 | log&config |
| Transformer-XL-base | 200k | 23.5 | log&config |
大型语言模型的结果
GPT2-345m
我们提供了在来自 BigCode 的数据集上预训练并在 HumanEval 数据集上通过零样本学习评估的 GPT2-345m 的配置和日志。HumanEval 用于衡量从文档字符串合成程序的功能正确性。它包含 164 个原创编程问题,评估语言理解、算法和简单数学,其中一些可与简单的软件面试问题相媲美。我们在评估期间设置 Temperature = 0.8。
| 步数 | pass@1 | pass@10 | pass@100 | 下载 | |
|---|---|---|---|---|---|
| GPT2-345m (Adam) | 300k | 0.0840 | 0.209 | 0.360 | log&config |
| GPT2-345m (Adan) | 150k | 0.0843 | 0.221 | 0.377 | log&config |
Adan 以一半的成本获得了相当的结果。
扩散模型的结果
我们展示了由 DreamFusion 项目 支持的文本到 3D 任务的结果。更多可视化结果可以在这里找到 here。
使用 Adam 和 Adan 从文本提示 Sydney opera house, aerial view 生成的示例:
内存和效率
优化器的峰值内存和运行时间的简要比较如下。持续时间是 200 次 optimizer.step() 的总时间。我们进一步详细比较了 Adam 和 FusedAdan 在 GPT-2 上的表现。更多结果请参见 这里。
| 模型 | 模型大小 (MB) | Adam 峰值 (MB) | Adan 峰值 (MB) | FusedAdan 峰值 (MB) | Adam 时间 (ms) | Adan 时间 (ms) | FusedAdan 时间 (ms) |
|---|---|---|---|---|---|---|---|
| ResNet-50 | 25 | 7142 | 7195 | 7176 | 9.0 | 4.2 | 1.9 |
| ResNet-101 | 44 | 10055 | 10215 | 10160 | 17.5 | 7.0 | 3.4 |
| ViT-B | 86 | 9755 | 9758 | 9758 | 8.9 | 12.3 | 4.3 |
| Swin-B | 87 | 16118 | 16202 | 16173 | 17.9 | 12.8 | 4.9 |
| ConvNext-B | 88 | 17353 | 17389 | 17377 | 19.1 | 15.6 | 5.0 |
| Swin-L | 196 | 24299 | 24316 | 24310 | 17.5 | 28.1 | 10.1 |
| ConvNext-L | 197 | 26025 | 26055 | 26044 | 18.6 | 31.1 | 10.2 |
| ViT-L | 304 | 25652 | 25658 | 25656 | 18.0 | 43.2 | 15.1 |
| GPT-2 | 758 | 25096 | 25406 | 25100 | 49.9 | 107.7 | 37.4 |
| GPT-2 | 1313 | 34357 | 38595 | 34363 | 81.8 | 186.0 | 64.4 |
版本历史
dreamfusion-demo2023/01/06常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
