跳转至

83 自定义 CUDA 函数的轻量级包装器 —— bitsandbytes篇

自定义 CUDA 函数的轻量级包装器 —— bitsandbytes篇

来自:AiGC面试宝典

Image

宁静致远

2024年01月27日19:14

· 自定义 CUDA 函数的轻量级包装器 —— bitsandbytes 篇 · 一、什么是 bitsandbytes? · 二、如何才能使用 bitsandbytes? · 三、如何使用 bitsandbytes? · 致谢

一、 什么是 bitsandbytes?

bitsandbytes 是自定义 CUDA 函数的轻量级包装器,特别是 8 比特优化器、矩阵乘法和量化函数。主要特征如下:

· 具有混合精度分解的 8 比特矩阵乘法

· LLM.int8() 推理

· 8 比特优化器:Adam、AdamW、RMSProp、LARS、LAMB、Lion(节省75%内存)

稳定的嵌入层:通过更好的初始化和标准化提高稳定性

· 8 比特量化:分位数、线性和动态量化

· 快速的分位数估计:比其他算法快 100 倍

二、 如何才能使用 bitsandbytes?

量化模型的唯一条件是包含 $ \underline{\text{torch.nn.Linear}} $ 层,因此量化对于任何模态都可以实现开箱即用。用户可以开箱即用地加载诸如 Whisper、ViT、Blip2 之类的 8 比特或 4 比特(FP4/NF4)模型。

三、 如何使用 bitsandbytes?

使用 NF4 量化加载 4 比特模型的示例:

from transformers import BitsAndBytesConfig

nf4_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.bfloat16 )

model_nf4 = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=nf4_config)

使用 FP4 量化加载 4 比特模型的示例:

import torch

from transformers import BitsAndBytesConfig


quantization_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16 )

知识星球