Bitsandbytes文档

概览

Hugging Face's logo
加入Hugging Face社区

并获得增强文档体验的访问权限

开始使用

概述

8位优化器 将32位优化器的内存占用降低,而不降低性能,这意味着您可以使用大量参数的模型加快训练速度。8位优化器的核心是块状量化,它实现了量化精度、计算效率和稳定性。

bitsandbytes通过基类 Optimizer8bit 提供8位优化器,并另外提供 Optimizer2StateOptimizer1State 分别用于2状态(例如,Adam)和1状态(例如,Adagrad)优化器。为了提供自定义优化器超参数,使用 GlobalOptimManager 类配置优化器。

Optimizer8bit

bitsandbytes.optim.optimizer.Optimizer8bit

< >

( params defaults optim_bits = 32 is_paged = False )

__init__

< >

( params defaults optim_bits = 32 is_paged = False )

参数

  • params (torch.tensor) — 要优化的输入参数。
  • optim_bits (int, 默认为 32) — 优化器状态的大小(以位为单位)。
  • is_paged (bool, 默认为 False) — 优化器是否为分页优化器。

基于 8 位优化的基础类。

Optimizer2State

bitsandbytes.optim.optimizer.Optimizer2State

< >

( optimizer_name params lr = 0.001 betas = (0.9, 0.999) eps = 1e-08 weight_decay = 0.0 optim_bits = 32 args = None min_8bit_size = 4096 percentile_clipping = 100 block_wise = True max_unorm = 0.0 skip_zeros = False is_paged = False )

__init__

< >

( optimizer_name params lr = 0.001 betas = (0.9, 0.999) eps = 1e-08 weight_decay = 0.0 optim_bits = 32 args = None min_8bit_size = 4096 percentile_clipping = 100 block_wise = True max_unorm = 0.0 skip_zeros = False is_paged = False )

参数

  • optimizer_name (str) — 优化器的名称。
  • params (torch.tensor) — 优化器需要优化的输入参数。
  • lr (float, 默认为 1e-3) — 学习率。
  • betas (tuple, 默认为 (0.9, 0.999)) — 优化器的beta值。
  • eps (float, 默认为 1e-8) — 优化器的epsilon值。
  • weight_decay (float,默认为0.0) — 优化器的权重衰减值。
  • optim_bits (int,默认为32) — 优化器状态位数。
  • args (object,默认为None) — 包含额外参数的对象。
  • min_8bit_size (int,默认为4096) — 8位优化参数张量元素的最小数量。
  • percentile_clipping (int, 默认100) — 通过跟踪最后100个梯度范数并按一定百分位数裁剪梯度来自适应裁剪阈值,以改善稳定性。
  • block_wise (bool, 默认=True) — 是否独立量化每个张量块以减少异常值的影响并提高稳定性。
  • max_unorm (float, 默认0.0) — 各块归一化的最大值。
  • skip_zeros (bool, 默认=False) — 是否跳过稀疏梯度和模型的零值以确保正确的更新。

基于2状态更新优化器基类。

( 优化器名称 参数 学习率 = 0.001 贝塔值 = (0.9, 0.0) epsilon = 1e-08 权重衰减 = 0.0 优化位数 = 32 参数列表 = None 最小8位大小 = 4096 百分位数裁剪 = 100 按块处理 = True 最大归一化 = 0.0 跳过零值 = False 分页 = False )

__init__

< >

( 优化器名称 参数 学习率 = 0.001 β值 = (0.9, 0.0) ε = 1e-08 权重衰减 = 0.0 优化位数 = 32 参数列表 = None 最小8位大小 = 4096 百分位数剪裁 = 100 分块优化 = True 最大未归一化 = 0.0 跳过零值 = False 分页标志 = False )

参数

  • 优化器名称 (str) — 优化器的名称。
  • 参数 (torch.tensor) — 用来优化的输入参数。
  • lr (float, 默认为 1e-3) — 学习率。
  • betas (tuple, 默认为 (0.9, 0.0)) — 优化器的beta值。
  • eps (float, 默认为 1e-8) — 优化器的epsilon值。
  • weight_decay (float, 默认为 0.0) — 优化器的权重衰减值。
  • optim_bits (int, 默认值 32) — 优化器状态的位数量。
  • args (object, 默认值 None) — 包含额外参数的对象。
  • min_8bit_size (int, 默认值 4096) — 8位优化参数张量元素的最小数量。
  • percentile_clipping (int, 默认值 100) — 通过追踪最近的100个梯度范数来自动调整剪裁阈值,并在一定百分位数处剪裁梯度以提高稳定性。
  • block_wise (bool, 默认为 True) — 是否独立量化每个张量块以减少异常值影响并提高稳定性。
  • max_unorm (float, 默认为 0.0) — 标准化每个块时的最大值。
  • skip_zeros (bool, 默认为 False) — 跳过稀疏梯度模型的零值以确保正确的更新。
  • is_paged (bool, 默认为 False) — 优化器是否为分页优化器。

基1状态更新优化器类。

实用工具

bitsandbytes.optim.GlobalOptimManager

< >

( )

全局优化器管理器,用于启用自定义优化器配置。

覆盖配置

< >

( 参数 密钥 = None = None 密钥值字典 = None )

参数

  • parameters (torch.Tensorlist(torch.Tensors)) — 输入参数。
  • key (str) — 要覆盖的超参数值。value — 超参数值。
  • key_value_dict (dict) — 要覆盖的多个键值对的字典。

使用特定的超参数覆盖初始优化器配置。

覆盖输入参数优化器配置的键值,这可以是诸如 betaslr 这类的优化器参数,也可以是如 optim_bitspercentile_clipping 这样的特定于 8 位参数。

示例

import torch
import bitsandbytes as bnb

mng = bnb.optim.GlobalOptimManager.get_instance()

model = MyModel()
mng.register_parameters(model.parameters()) # 1. register parameters while still on CPU

model = model.cuda()
# use 8-bit optimizer states for all parameters
adam = bnb.optim.Adam(model.parameters(), lr=0.001, optim_bits=8)

# 2. override: the parameter model.fc1.weight now uses 32-bit Adam
mng.override_config(model.fc1.weight, 'optim_bits', 32)
< > 在GitHub上更新