attribt LV
发表于 2025-4-24 05:58:38
以下以在本地环境基于Linux系统为例,给出一个相对详细的ChatGLM微调保姆式教程(这里假设你已安装好Python等基础环境,且有一定编程基础):
1. 准备环境
安装依赖:
创建一个新的虚拟环境(推荐使用`venv`或`conda`)。以`venv`为例:
```bash
python3 m venv chatglm_venv
source chatglm_venv/bin/activate
```
安装相关依赖库,主要是`transformers`、`torch`等。你可以使用`pip`安装:
```bash
pip install torch torchvision torchaudio
pip install transformers datasets sentencepiece
```
如果需要在GPU上运行,要根据你的CUDA版本安装对应的`torch`版本,具体可参考[PyTorch官方文档](https://pytorch.org/getstarted/locally/)。
2. 准备数据集
格式要求:
ChatGLM微调数据集一般要求是文本格式,常见的是每行一个样本。每个样本通常是一个JSON格式的字符串,例如:
```json
{"prompt": "你好,今天天气如何", "response": "我不清楚实时天气情况呢"}
```
`prompt`是输入的问题,`response`是对应的回答。
获取或创建数据集:
可以从公开的数据集网站获取相关数据集,如Hugging Face的`datasets`库中就有很多可用数据集;也可以自己创建数据集,按照上述格式将数据整理到一个文本文件中。
3. 下载预训练模型
从Hugging Face Hub或其他可靠来源下载ChatGLM的预训练模型。以Hugging Face为例:
```python
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm6b", trust_remote_code=True).half().cuda()
```
上述代码会将模型和分词器下载到本地的Hugging Face缓存目录(通常是`~/.cache/huggingface/transformers`)。
4. 微调代码编写
以下是一个基于`transformers`库的简单微调示例代码:
```python
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer
from datasets import load_dataset
加载预训练模型和分词器
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm6b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("THUDM/chatglm6b", trust_remote_code=True).half().cuda()
加载数据集
dataset = load_dataset(text, data_files=your_dataset.txt)
def preprocess_function(examples):
inputs = [example["prompt"] for example in examples["text"]]
targets = [example["response"] for example in examples["text"]]
model_inputs = tokenizer(inputs, padding="max_length", truncation=True)
将targets编码并添加到输入中
labels = tokenizer(targets, padding="max_length", truncation=True)
model_inputs["labels"] = labels["input_ids"]
return model_inputs
tokenized_dataset = dataset.map(preprocess_function, batched=True)
定义训练参数
training_args = TrainingArguments(
output_dir=./results,
overwrite_output_dir=True,
num_train_epochs=3,
per_device_train_batch_size=2,
save_steps=10_000,
save_total_limit=2,
)
创建Trainer实例
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"]
)
开始微调
trainer.train()
```
5. 运行微调
将上述代码保存为一个`.py`文件(例如`finetune_chatglm.py`),然后在命令行中运行:
```bash
python finetune_chatglm.py
```
6. 保存和使用微调模型
微调完成后,模型会自动保存到`output_dir`指定的目录(这里是`./results`)。你可以在后续使用中加载微调后的模型:
```python
tokenizer = AutoTokenizer.from_pretrained("./results")
model = AutoModelForCausalLM.from_pretrained("./results").half().cuda()
```
以上教程只是一个基础示例,实际微调过程中你可能需要根据具体需求对数据集格式、微调参数等进行更多调整和优化 。同时,不同的硬件环境和数据集情况也可能会带来一些额外的问题需要解决。 |
|