高效量化和低精度训练工具库,减少模型训练和推理的计算资源消耗 https://github.com/TimDettmers/bitsandbytes
天问 033cf9d6e8 Update 'README.md' | 6 months ago | |
---|---|---|
README.md | 6 months ago |
高效量化和低精度训练工具库,减少模型训练和推理的计算资源消耗
可以通过 pip 安装 BitsAndBytes:
pip install bitsandbytes
以下是使用 BitsAndBytes 进行 8 位量化和混合精度训练的基本示例:
import torch
from bitsandbytes.optim import Adam8bit
# 定义一个简单的模型
model = torch.nn.Linear(10, 2)
# 将模型移动到 GPU 上
model.cuda()
# 使用 8 位量化的 Adam 优化器
optimizer = Adam8bit(model.parameters(), lr=0.001)
# 生成一些随机输入数据
inputs = torch.randn(16, 10).cuda()
targets = torch.randint(0, 2, (16,)).cuda()
# 定义损失函数
criterion = torch.nn.CrossEntropyLoss()
# 前向传播
outputs = model(inputs)
loss = criterion(outputs, targets)
# 反向传播和优化
loss.backward()
optimizer.step()
python
Copy code
import torch
from torch.cuda.amp import autocast, GradScaler
from bitsandbytes.optim import AdamW
# 定义一个简单的模型
model = torch.nn.Linear(10, 2)
# 将模型移动到 GPU 上
model.cuda()
# 使用 AdamW 优化器
optimizer = AdamW(model.parameters(), lr=0.001)
# 混合精度训练的梯度缩放器
scaler = GradScaler()
# 生成一些随机输入数据
inputs = torch.randn(16, 10).cuda()
targets = torch.randint(0, 2, (16,)).cuda()
# 定义损失函数
criterion = torch.nn.CrossEntropyLoss()
# 前向传播和反向传播
with autocast():
outputs = model(inputs)
loss = criterion(outputs, targets)
# 缩放损失
scaler.scale(loss).backward()
# 优化器步骤
scaler.step(optimizer)
scaler.update()