Project Icon

low-bit-optimizers

4位优化器技术减少内存占用 提升大规模模型训练能力

Low-bit Optimizers项目实现了一种4位优化器技术,可将优化器状态从32位压缩至4位,有效降低神经网络训练的内存使用。通过分析一阶和二阶动量,该项目提出了改进的量化方法,克服了现有技术的限制。在多项基准测试中,4位优化器实现了与全精度版本相当的准确率,同时提高了内存效率,为大规模模型训练开辟了新途径。

低比特优化器

论文《具有4位状态的内存高效优化器》的官方实现。

优化器状态是训练神经网络时内存消耗的主要来源,限制了在给定内存预算内可训练的最大模型。将优化器状态从32位浮点数压缩到更低位宽是减少训练内存占用的有效方法,而当前可实现的最低位宽是8位。在这项工作中,我们通过对一阶和二阶动量进行详细的实证分析,将优化器状态位宽降低到4位。具体来说,我们发现动量具有复杂的离群值模式,当前的分块量化无法准确近似。我们使用更小的块大小,并提出同时利用行和列信息来实现更好的量化。我们进一步发现了量化二阶动量时的零点问题,并通过排除零点的线性量化器解决了这个问题。我们的4位优化器在广泛的基准测试中进行了评估,包括自然语言理解、机器翻译、图像分类和指令微调。在所有任务中,我们的优化器都能达到与全精度对应版本相当的精度,同时具有更好的内存效率。

安装

要求 Python >= 3.7 + CUDA >= 11.0 + torch >= 1.13.0

安装运行:

git clone https://github.com/thu-ml/low-bit-optimizers.git
pip install -v -e .

使用方法

使用4位优化器

要开始使用4位优化器,只需将现有的优化器替换为我们的4位优化器之一:4位AdamW、4位Factor或4位AdamW(融合版)。

import lpmm

# 注释掉或删除旧的优化器
# optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, betas=(0.9, 0.999))

# 使用4位AdamW
optimizer = lpmm.optim.AdamW(model.parameters(), lr=1e-3, betas=(0.9, 0.999))

# 或者,使用4位Factor
optimizer = lpmm.optim.AdamW(model.parameters(), lr=1e-3, betas=(0.9, 0.999), factor_second_moment=True)

# 或者,使用4位AdamW(融合版)
optimizer = lpmm.optim.AdamW(model.parameters(), lr=1e-3, betas=(0.9, 0.999), fused=True)

目前支持的优化器有Adam(AdamW)和SGD。

修改量化超参数

要修改非融合优化器的量化配置(例如,归一化函数、量化映射、位数等),创建一个新的配置文件,并使用qconfig参数将其文件路径传递给优化器。示例配置可以在lpmm/configs目录中找到。 默认情况下,非融合优化器的量化配置在lpmm/configs/default.yml中指定,而融合优化器的配置在lpmm/configs/2nd_moment_group_128.yml中指定。融合优化器的配置目前是固定的,无法更改。

要使用新的配置文件,请参照以下示例:

config_path = f"configs/default.yml" # 配置文件路径
optimizer = lpmm.optim.AdamW(model.parameters(), lr=1e-3, betas=(0.9, 0.999), qconfig=config_path)

常用的超参数及其可能的值包括:

  • SCALE_TYPE(归一化函数): tensor, dim0, dim1, group, rank1
  • QUANT_TYPE(量化映射): nonlinear, power-1, power-2
  • BITS: 4, 5, 6, 7, 8
  • ENABLE(是否量化状态): True, False

我们建议使用BITS = 4或8。

覆盖特定参数的量化启用

要使用32位精度而不是量化来优化某些参数,请使用override_quantize_enable方法,如下所示:

optimizer = lpmm.optim.AdamW(model.parameters(), lr=1e-3, betas=(0.9, 0.999))
optimizer.override_quantize_enable(module, param_name, enable=False)

在这个例子中,module是包含参数的模块,param_name是你希望用32位精度优化的参数名称。设置enable=False将防止对指定参数进行量化。

项目侧边栏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号