GLM4-9B-chat模型微调

github地址:https://github.com/THUDM/GLM-4

一、环境:

操作系统: Ubuntu 22.04

CUDA: 11.8

GPU: 4090 24G

创建conda环境:

conda create -n glm4 python=3.10.14

conda activate glm4

cd /home/data/chatglm4-finetune

二、数据准备

使用“豆包”生成一些用于train的数据集和test的数据集

代码格式如下:

{"messages": [{"role": "user", "content": "《阿长与〈山海经〉》中,作者对阿长的情感经历了怎样的变化?"},{"role": "assistant", "content": "答案:作者对阿长的情感经历了从厌恶、不耐烦到感激、怀念的变化。"}]}
{"messages": [{"role": "user", "content": "《老王》中,作者是如何刻画老王的形象的?"},{"role": "assistant", "content": "答案:通过外貌描写、语言描写、动作描写等,如“他面如死灰,两只眼上都结着一层翳”“他说:‘我送钱先生看病,不要钱。’”“他一手拿着布,一手攥着钱,滞笨地转过身子”等,展现了老王的穷苦、善良和老实。"}]}
{"messages": [{"role": "user", "content": "《台阶》中,台阶在文中有什么象征意义?"},{"role": "assistant", "content": "答案:台阶象征着父亲的理想和追求,也象征着农村社会的等级观念和传统观念。"}]}
{"messages": [{"role": "user", "content": "《卖油翁》中,这个故事告诉我们一个什么道理?"},{"role": "assistant", "content": "答案:这个故事告诉我们熟能生巧的道理,同时也说明了人不应骄傲自满,要谦虚谨慎。"}]}
{"messages": [{"role": "user", "content": "《叶圣陶先生二三事》中,叶圣陶先生的“写话”主张是什么?"},{"role": "assistant", "content": "答案:叶圣陶先生主张“写成文章,在这间房里念,要让那间房里的人听着,是说话,不是念稿,才算及了格”。"}]}
{"messages": [{"role": "user", "content": "《驿路梨花》中,“梨花”在文中多次出现,有什么作用?"},{"role": "assistant", "content": "答案:“梨花”在文中多次出现,起到了贯穿全文的线索作用,同时也象征着助人为乐的精神。"}]}
{"messages": [{"role": "user", "content": "《最苦与最乐》中,作者是怎样论述“责任”与“苦乐”的关系的?"},{"role": "assistant", "content": "答案:作者认为人生最苦的事是身上背着一种未来的责任,因为受那良心责备不过,要逃躲也没处逃躲;而责任完了是人生第一件乐事,因为这种快乐是从苦中得来的,是更真实的快乐。"}]}
{"messages": [{"role": "user", "content": "《陋室铭》中,作者是从哪些方面来描写陋室的?"},{"role": "assistant", "content": "答案:作者从陋室的环境、交往人物和日常生活等方面来描写陋室,如“苔痕上阶绿,草色入帘青”描写了陋室的环境,“谈笑有鸿儒,往来无白丁”描写了交往人物,“可以调素琴,阅金经”描写了日常生活。"}]}
{"messages": [{"role": "user", "content": "《爱莲说》中,作者用了什么写作手法来表现莲花的品质?"},{"role": "assistant", "content": "答案:作者用了托物言志的写作手法,通过对莲花的描写和赞美,表达了自己不慕名利、洁身自好的高尚品质。"}]}
{"messages": [{"role": "user", "content": "《紫藤萝瀑布》中,作者是怎样由紫藤萝花联想到人生的?"},{"role": "assistant", "content": "答案࿱
微调GLM-4-9B-Chat模型需要以下几个步骤: 1. **准备环境**: - 安装必要的库和工具,如Python、PyTorch、Transformers等。 - 确保有足够的计算资源,建议使用GPU进行微调。 2. **获取模型和数据集**: - 下载GLM-4-9B-Chat的预训练模型- 准备用于微调的数据集,数据集应包含输入和期望的输出。 3. **数据预处理**: - 对数据集进行清洗和格式化,确保数据格式与模型输入要求一致。 - 将数据集分为训练集和验证集。 4. **配置微调参数**: - 设置微调的参数,如学习率、批次大小、训练轮数等。 - 选择合适的优化器和学习率调度器。 5. **微调模型**: - 使用Transformers库中的Trainer API进行模型微调- 在训练过程中监控损失值和评估指标,确保模型收敛。 6. **评估和保存模型**: - 在验证集上评估微调后的模型性能。 -微调后的模型保存到本地或云存储中。 7. **部署和使用**: -微调后的模型部署到服务器或云端。 - 使用API或命令行工具进行推理和测试。 以下是一个简单的代码示例,展示了如何使用Transformers库微调GLM-4-9B-Chat模型: ```python from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments from datasets import load_dataset # 加载预训练模型和分词器 model_name = "path_to_pretrained_model" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) # 准备数据集 dataset = load_dataset("path_to_dataset") train_dataset = dataset["train"] eval_dataset = dataset["validation"] # 数据预处理 def preprocess_function(examples): inputs = tokenizer(examples["text"], truncation=True, padding="max_length") labels = tokenizer(examples["label"], truncation=True, padding="max_length") inputs["labels"] = labels["input_ids"] return inputs train_dataset = train_dataset.map(preprocess_function, batched=True) eval_dataset = eval_dataset.map(preprocess_function, batched=True) # 配置训练参数 training_args = TrainingArguments( output_dir="./glm-4-9b-chat-finetuned", evaluation_strategy="epoch", learning_rate=2e-5, per_device_train_batch_size=4, per_device_eval_batch_size=4, num_train_epochs=3, weight_decay=0.01, ) # 初始化Trainer trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=eval_dataset, ) # 微调模型 trainer.train() # 保存模型 trainer.save_model("./glm-4-9b-chat-finetuned") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值