Bitsandbytes 文件
概覽
並獲得增強的文件體驗
開始使用
概述
8 位最佳化器 在不降低任何效能的情況下減少了 32 位最佳化器的記憶體佔用,這意味著你可以更快地訓練具有許多引數的大型模型。8 位最佳化器的核心是分塊量化,它實現了量化精度、計算效率和穩定性。
bitsandbytes 透過基類 Optimizer8bit
提供 8 位最佳化器,並額外為 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 位最佳化器類。
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 位最佳化的引數張量的最小元素數。 - percentile_clipping (
int
, 預設為 100) — 透過跟蹤最近 100 次的梯度範數,並在某個百分位數處裁剪梯度,自動調整裁剪閾值以提高穩定性。 - block_wise (
bool
, 預設為True
) — 是否獨立量化張量的每個塊,以減少異常值影響並提高穩定性。 - max_unorm (
float
, 預設為 0.0) — 用於歸一化每個塊的最大值。 - skip_zeros (
bool
, 預設為False
) — 是否為稀疏梯度和模型跳過零值,以確保正確更新。 - is_paged (
bool
, 預設為False
) — 最佳化器是否為分頁最佳化器。 - alpha (
float
, 預設為 0.0) — AdEMAMix 最佳化器的 alpha 值。 - t_alpha (
Optional[int]
, 預設為None
) — 使用 AdEMAMix 進行 alpha 排程時的迭代次數。 - t_beta3 (
Optional[int]
, 預設為None
) — 使用 AdEMAMix 進行 beta 排程時的迭代次數。
基礎的 2 狀態更新最佳化器類。
Optimizer1State
class bitsandbytes.optim.optimizer.Optimizer1State
< source >( 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__
< source >( 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
, 預設為 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-狀態更新最佳化器類。
實用工具
一個用於啟用自定義最佳化器配置的全域性最佳化器管理器。
override_config
< 原始碼 >( parameters key = None value = None key_value_dict = None )
使用特定的超引數覆蓋初始最佳化器配置。
輸入引數的最佳化器配置的鍵值對被覆蓋。這可以是最佳化器引數,如 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)