Bitsandbytes 文件

概覽

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

概述

8 位最佳化器 在不降低任何效能的情況下減少了 32 位最佳化器的記憶體佔用,這意味著你可以更快地訓練具有許多引數的大型模型。8 位最佳化器的核心是分塊量化,它實現了量化精度、計算效率和穩定性。

bitsandbytes 透過基類 Optimizer8bit 提供 8 位最佳化器,並額外為 2 狀態(例如 Adam)和 1 狀態(例如 Adagrad)最佳化器分別提供 Optimizer2StateOptimizer1State。要提供自定義的最佳化器超引數,請使用 GlobalOptimManager 類來配置最佳化器。

Optimizer8bit

class 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

class 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 alpha = 0.0 t_alpha: typing.Optional[int] = None t_beta3: typing.Optional[int] = None )

__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 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

< >

( 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, 預設為 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-狀態更新最佳化器類。

實用工具

class bitsandbytes.optim.GlobalOptimManager

< >

( )

一個用於啟用自定義最佳化器配置的全域性最佳化器管理器。

override_config

< >

( parameters key = None value = None key_value_dict = None )

引數

  • parameters (torch.Tensorlist(torch.Tensors)) — 輸入引數。
  • key (str) — 要覆蓋的超引數。
  • value — 超引數值。
  • key_value_dict (dict) — 一個包含多個要覆蓋的鍵值對的字典。

使用特定的超引數覆蓋初始最佳化器配置。

輸入引數的最佳化器配置的鍵值對被覆蓋。這可以是最佳化器引數,如 betaslr,也可以是 8 位特定引數,如 optim_bitspercentile_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)
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.