Bitsandbytes 文档
概述
并获取增强的文档体验
开始使用
概述
8-bit 优化器 减少了 32-bit 优化器的内存占用,且不会降低任何性能,这意味着您可以更快地训练具有许多参数的大型模型。8-bit 优化器的核心是块状量化,它可以实现量化精度、计算效率和稳定性。
bitsandbytes 通过基础 Optimizer8bit
类提供 8-bit 优化器,并额外为 2 状态优化器(例如 Adam
)和 1 状态优化器(例如 Adagrad
)提供 Optimizer2State
和 Optimizer1State
。要提供自定义优化器超参数,请使用 GlobalOptimManager
类来配置优化器。
Optimizer8bit
class bitsandbytes.optim.optimizer.Optimizer8bit
< source >( params defaults optim_bits = 32 is_paged = False )
__init__
< source >( params defaults optim_bits = 32 is_paged = False )
基础 8-bit 优化器类。
Optimizer2State
class bitsandbytes.optim.optimizer.Optimizer2State
< source >( 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 alpha = 0.0 t_alpha: typing.Optional[int] = None t_beta3: typing.Optional[int] = None )
__init__
< source >( 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 alpha = 0.0 t_alpha: typing.Optional[int] = None t_beta3: typing.Optional[int] = None )
参数
- 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-bit 优化。 - percentile_clipping (
int
, defaults to 100) — Adapts clipping threshold automatically by tracking the last 100 gradient norms and clipping the gradient at a certain percentile to improve stability。 - block_wise (
bool
, defaults toTrue
) — 是否独立量化张量的每个块,以减少异常值影响并提高稳定性。 - max_unorm (
float
, defaults to 0.0) — 用于归一化每个块的最大值。 - skip_zeros (
bool
, defaults toFalse
) — 是否跳过稀疏梯度和模型的零值,以确保正确更新。 - is_paged (
bool
, defaults toFalse
) — 优化器是否为分页优化器。 - alpha (
float
, defaults to 0.0) — AdEMAMix 优化器的 alpha 值。 - t_alpha (
Optional[int]
, defaults toNone
) — 使用 AdEMAMix 进行 alpha 调度的迭代次数。 - t_beta3 (
Optional[int]
, defaults toNone
) — 使用 AdEMAMix 进行 beta 调度的迭代次数。
基础的 2 状态更新优化器类。
Optimizer1State
类 bitsandbytes.optim.optimizer.Optimizer1State
< 源码 >( optimizer_name params lr = 0.001 betas = (0.9, 0.0) 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.0) 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
, defaults to 1e-3) — 学习率。 - betas (
tuple
, defaults to (0.9, 0.0)) — 优化器的 beta 值。 - eps (
float
, defaults to 1e-8) — 优化器的 epsilon 值。 - weight_decay (
float
, defaults to 0.0) — 优化器的权重衰减值。 - optim_bits (
int
, defaults to 32) — 优化器状态的位数。 - args (
object
, defaults toNone
) — 包含附加参数的对象。 - min_8bit_size (
int
, defaults to 4096) — 参数张量进行 8 位优化的最小元素数量。 - percentile_clipping (
int
, defaults to 100) — 通过跟踪最近 100 个梯度范数并按一定百分位数裁剪梯度来自动调整裁剪阈值,以提高稳定性。 - block_wise (
bool
, defaults toTrue
) — 是否独立量化张量的每个块,以减少异常值影响并提高稳定性。 - max_unorm (
float
, defaults to 0.0) — 用于归一化每个块的最大值。 - skip_zeros (
bool
, defaults toFalse
) — 是否跳过稀疏梯度和模型的零值,以确保正确更新。 - is_paged (
bool
, defaults toFalse
) — 优化器是否为分页优化器。
基础的 1 状态更新优化器类。
实用工具
一个全局优化器管理器,用于启用自定义优化器配置。
override_config
< 源码 >( 参数 键 = 无 值 = 无 键值字典 = 无 )
使用特定超参数覆盖初始优化器配置。
输入参数的优化器配置的键值对将被覆盖。这可以是优化器参数(如 betas
或 lr
),也可以是 8 位特定的参数(如 optim_bits
或 percentile_clipping
)。
示例
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)