Bitsandbytes 文件
概覽
並獲得增強的文件體驗
開始使用
概述
bitsandbytes.functional
API 提供了該庫功能的底層構建塊。
何時使用 bitsandbytes.functional
- 當您需要直接控制量化操作及其引數時。
- 用於構建利用低位算術的自定義層或操作。
- 與其他生態系統工具整合。
- 用於需要非標準量化或效能最佳化的實驗或研究目的。
LLM.int8()
bitsandbytes.functional.int8_linear_matmul
< 原始碼 >( A: Tensor B: Tensor out: typing.Optional[torch.Tensor] = None dtype = torch.int32 ) → torch.Tensor
引數
- A (
torch.Tensor
) — 第一個矩陣運算元,資料型別為torch.int8
。 - B (
torch.Tensor
) — 第二個矩陣運算元,資料型別為torch.int8
。 - out (
torch.Tensor
, 可選) — 用於儲存結果的預分配張量。 - dtype (
torch.dtype
, 可選) — 輸出的期望資料型別。預設為torch.int32
。
返回
torch.Tensor
操作的結果。
引發
NotImplementedError
或 RuntimeError
NotImplementedError
— 在當前環境中不支援該操作。RuntimeError
— 當由於任何其他原因無法完成時引發。
執行 8 位整數矩陣乘法。
應用線性變換,使得 `out = A @ B.T`。在可能的情況下,利用整數張量核心硬體來加速操作。
bitsandbytes.functional.int8_mm_dequant
< 原始碼 >( A: Tensor row_stats: Tensor col_stats: Tensor out: typing.Optional[torch.Tensor] = None bias: typing.Optional[torch.Tensor] = None ) → torch.Tensor
對量化的 int8 矩陣乘法結果執行反量化。
bitsandbytes.functional.int8_vectorwise_dequant
< 原始碼 >( A: Tensor stats: Tensor ) → 資料型別為 torch.float32
的 torch.Tensor
將資料型別為 torch.int8
的張量反量化為 torch.float32
。
bitsandbytes.functional.int8_vectorwise_quant
< 原始碼 >( A: Tensor threshold = 0.0 ) → Tuple[torch.Tensor, torch.Tensor, Optional[torch.Tensor]]
引數
- A (資料型別為
torch.float16
的torch.Tensor
) — 輸入張量。 - threshold (
float
, 可選) — 用於離群特徵稀疏分解的可選閾值。當為 0.0 時,不保留任何離群值。預設為 0.0。
返回
Tuple[torch.Tensor, torch.Tensor, Optional[torch.Tensor]]
一個包含量化張量和相關統計資訊的元組。
- 資料型別為
torch.int8
的torch.Tensor
: 量化後的資料。 - 資料型別為
torch.float32
的torch.Tensor
: 量化尺度。 - 資料型別為
torch.int32
的torch.Tensor
, 可選: 包含離群特徵的列索引列表。
根據 `LLM.int8()` 演算法將資料型別為 `torch.float16` 的張量量化為 `torch.int8`。
更多資訊,請參閱 LLM.int8() 論文。
4 位
bitsandbytes.functional.dequantize_4bit
< 原始碼 >( A: Tensor quant_state: typing.Optional[bitsandbytes.functional.QuantState] = None absmax: typing.Optional[torch.Tensor] = None out: typing.Optional[torch.Tensor] = None blocksize: int = 64 quant_type = 'fp4' ) → torch.Tensor
引數
- A (
torch.Tensor
) — 量化的輸入張量。 - quant_state (
QuantState
, 可選) — 由 `quantize_4bit` 返回的量化狀態。如果未提供 `absmax`,則此項為必需。 - absmax (
torch.Tensor
, 可選) — 包含縮放值的張量。如果未提供 `quant_state`,則此項為必需,否則將被忽略。 - out (
torch.Tensor
, 可選) — 用於儲存結果的張量。 - blocksize (
int
, 可選) — 塊的大小。預設為 64。有效值為 64、128、256、512、1024、2048 和 4096。 - quant_type (
str
, 可選) — 要使用的資料型別:`nf4` 或 `fp4`。預設為 `fp4`。
返回
torch.Tensor
反量化後的張量。
引發
ValueError
ValueError
— 當輸入資料型別或塊大小不受支援時引發。
反量化一個打包的 4 位量化張量。
透過將輸入張量劃分為 `blocksize` 大小的塊來進行反量化。這些塊內的絕對最大值用於縮放非線性反量化。
bitsandbytes.functional.dequantize_fp4
< 原始碼 >( A: Tensor quant_state: typing.Optional[bitsandbytes.functional.QuantState] = None absmax: typing.Optional[torch.Tensor] = None out: typing.Optional[torch.Tensor] = None blocksize: int = 64 )
bitsandbytes.functional.dequantize_nf4
< 原始碼 >( A: Tensor quant_state: typing.Optional[bitsandbytes.functional.QuantState] = None absmax: typing.Optional[torch.Tensor] = None out: typing.Optional[torch.Tensor] = None blocksize: int = 64 )
bitsandbytes.functional.gemv_4bit
< 原始碼 >( A: Tensor B: Tensor out: typing.Optional[torch.Tensor] = None transposed_A = False transposed_B = False state = None )
bitsandbytes.functional.quantize_4bit
< 原始碼 >( A: Tensor absmax: typing.Optional[torch.Tensor] = None out: typing.Optional[torch.Tensor] = None blocksize = 64 compress_statistics = False quant_type = 'fp4' quant_storage = torch.uint8 ) → Tuple[torch.Tensor
, QuantState
]
引數
- A (
torch.Tensor
) — 輸入張量。支援 `float16`、`bfloat16` 或 `float32` 資料型別。 - absmax (
torch.Tensor
, 可選) — 用於儲存絕對最大值的張量。 - out (
torch.Tensor
, 可選) — 用於儲存結果的張量。 - blocksize (
int
, 可選) — 塊的大小。預設為 64。有效值為 64、128、256、512、1024、2048 和 4096。 - compress_statistics (
bool
, 可選) — 是否額外量化絕對最大值。預設為 False。 - quant_type (
str
, 可選) — 要使用的資料型別:`nf4` 或 `fp4`。預設為 `fp4`。 - quant_storage (
torch.dtype
, 可選) — 用於儲存結果的張量的資料型別。預設為 `torch.uint8`。
返回
Tuple[torch.Tensor
, QuantState
]
包含量化結果的元組。
torch.Tensor
:包含打包的 4 位值的量化張量。QuantState
: 用於撤銷量化的狀態物件。
引發
ValueError
ValueError
— 當輸入資料型別不受支援時引發。
將張量 A 量化為 4 位值的塊。
透過將張量 A 分成獨立量化的塊來對其進行量化。
bitsandbytes.functional.quantize_fp4
< 原始碼 >( A: Tensor absmax: typing.Optional[torch.Tensor] = None out: typing.Optional[torch.Tensor] = None blocksize = 64 compress_statistics = False quant_storage = torch.uint8 )
bitsandbytes.functional.quantize_nf4
< 原始碼 >( A: Tensor absmax: typing.Optional[torch.Tensor] = None out: typing.Optional[torch.Tensor] = None blocksize = 64 compress_statistics = False quant_storage = torch.uint8 )
class bitsandbytes.functional.QuantState
< 原始碼 >( absmax shape = None code = None blocksize = None quant_type = None dtype = None offset = None state2 = None )
用於處理 Params4bit 和類似類的量化狀態元件的容器
返回張量和字串的字典,用於透過 _save_to_state_dict() 進行序列化。引數:packed — 返回適用於 safetensors 儲存的 state_dict 的 dict[str, torch.Tensor]
將 state_dict 的元件解包到 QuantState 中,並在必要時將其轉換為字串、torch.dtype、整數等。
qs_dict: 基於 state_dict,只包含相關鍵,並去除了字首。
鍵為 quant_state.bitsandbytes__[nf4/fp4]
的專案可能包含次要且非張量的量化狀態專案。
動態 8 位量化
8 位最佳化器量化中使用的基元。
更多細節請參見《深度學習中平行計算的 8 位近似》
bitsandbytes.functional.dequantize_blockwise
< 原始碼 >( A: Tensor quant_state: typing.Optional[bitsandbytes.functional.QuantState] = None absmax: typing.Optional[torch.Tensor] = None code: typing.Optional[torch.Tensor] = None out: typing.Optional[torch.Tensor] = None blocksize: int = 4096 nested = False ) → torch.Tensor
引數
- A (
torch.Tensor
) — 量化的輸入張量。 - quant_state (
QuantState
, 可選) — 由quantize_blockwise
返回的量化狀態。如果未提供absmax
,則為必需。 - absmax (
torch.Tensor
, 可選) — 包含縮放值的張量。如果未提供quant_state
,則為必需,否則將被忽略。 - code (
torch.Tensor
, 可選) — 描述低位資料型別的對映。預設為有符號 8 位動態型別。更多細節,請參見《深度學習中平行計算的 8 位近似》[https://arxiv.org/abs/1511.04561]。當提供quant_state
時,此引數將被忽略。 - out (
torch.Tensor
, 可選) — 用於儲存結果的張量。 - blocksize (
int
, 可選) — 塊的大小。預設為 4096。有效值為 64、128、256、512、1024、2048 和 4096。當提供quant_state
時,此引數將被忽略。
返回
torch.Tensor
反量化後的張量。資料型別由 quant_state.dtype
指定,預設為 torch.float32
。
引發
ValueError
ValueError
— 當輸入資料型別不受支援時引發。
按塊對張量的值進行反量化。
透過將輸入張量劃分為 `blocksize` 大小的塊來進行反量化。這些塊內的絕對最大值用於縮放非線性反量化。
bitsandbytes.functional.quantize_blockwise
< 原始碼 >( A: Tensor code: typing.Optional[torch.Tensor] = None absmax: typing.Optional[torch.Tensor] = None out: typing.Optional[torch.Tensor] = None blocksize = 4096 nested = False ) → Tuple[torch.Tensor, QuantState]
引數
- A (
torch.Tensor
) — 輸入張量。支援float16
、bfloat16
或float32
資料型別。 - code (
torch.Tensor
, 可選) — 描述低位資料型別的對映。預設為有符號 8 位動態型別。更多細節,請參見《深度學習中平行計算的 8 位近似》[https://arxiv.org/abs/1511.04561]。 - absmax (
torch.Tensor
, 可選) — 用於儲存 absmax 值的張量。 - out (
torch.Tensor
, 可選) — 用於儲存結果的張量。 - blocksize (
int
, 可選) — 塊的大小。預設為 4096。有效值為 64、128、256、512、1024、2048 和 4096。 - nested (
bool
, 可選) — 是否對 absmax 值進行額外量化。預設為 False。
返回
Tuple[torch.Tensor, QuantState]
包含量化結果的元組。
torch.Tensor
: 量化後的張量。QuantState
: 用於撤銷量化的狀態物件。
引發
ValueError
ValueError
— 當輸入資料型別不受支援時引發。
按塊對張量的值進行量化。
輸入張量透過將其劃分為大小為 blocksize
的塊進行量化。然後計算這些塊內的絕對最大值,用於縮放非線性量化。
實用工具
bitsandbytes.functional.get_ptr
< 原始碼 >( A: typing.Optional[torch.Tensor] ) → Optional[ct.c_void_p]
獲取張量第一個元素的記憶體地址。