lora微调chatglm3
时间: 2025-01-04 20:33:54 浏览: 48
### 使用LoRA技术对ChatGLM3大语言模型进行微调
#### 准备工作
为了使用LoRA技术对ChatGLM3-6B模型进行微调,需先安装必要的Python包。这包括`transformers`和`peft`库。
```bash
pip install transformers peft
```
#### 加载预训练模型与Tokenizer
加载由清华大学开源的ChatGLM3-6B模型及其对应的分词器是第一步操作。此模型特别适合处理中英文混合的任务,并且已经过大量数据训练,在多种自然语言处理任务上有良好表现[^2]。
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name_or_path = "THUDM/chatglm3-6b"
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True).half().cuda()
```
#### 应用LoRA适配器
接下来利用PEFT库中的PeftModel类来创建并配置低秩适应器(LoRA),以便能够以更少的新参数调整大型预训练模型性能。这种方法允许仅更新少量额外引入的小矩阵而非整个网络权重,极大地减少了计算资源消耗和时间成本[^1]。
```python
from peft import get_peft_model, LoraConfig, TaskType
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
inference_mode=False,
r=8, # LoRA attention dimension
lora_alpha=32,
lora_dropout=0.1
)
model = get_peft_model(model, lora_config)
```
#### 数据准备与Fine-tuning过程
准备好用于fine-tune的数据集之后,就可以定义PyTorch DataLoader对象以及优化算法实例化Optimizer来进行实际训练流程了。这里假设已经有了一个名为`train_dataset`的对象表示要用来训练的数据集合。
```python
import torch
from torch.utils.data import DataLoader
from transformers import default_data_collator
training_args = {
'output_dir': './results',
'per_device_train_batch_size': 4,
'gradient_accumulation_steps': 2,
'learning_rate': 1e-4,
'num_train_epochs': 3,
}
optimizer = torch.optim.AdamW(params=model.parameters(), lr=training_args['learning_rate'])
data_loader = DataLoader(train_dataset, batch_size=training_args['per_device_train_batch_size'], collate_fn=default_data_collator)
for epoch in range(training_args['num_train_epochs']):
model.train()
total_loss = 0
for step, batch in enumerate(data_loader):
outputs = model(**batch.to('cuda'))
loss = outputs.loss
loss.backward()
optimizer.step()
optimizer.zero_grad()
total_loss += loss.item()
avg_loss = total_loss / (step + 1)
print(f'Epoch {epoch}, Loss: {avg_loss}')
```
完成上述步骤后即可保存经过LoRA微调后的模型供后续推理或其他用途使用。
阅读全文
相关推荐

















