ChatGLM3 自己训练微调制作数据代码,与训练、训练完成后模型合并、解译代码完整版

本文主要是介绍ChatGLM3 自己训练微调制作数据代码,与训练、训练完成后模型合并、解译代码完整版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ChatGLM3 自己训练微调制作数据代码,与训练完成后模型合并解译代码

import jsonkeyword = '这年轻人'# 摘自百度百科
description = "这年轻人,男,1993年出生于陕西省湖北市潼关县。2015年毕业于中国背景大学。2016年加入西安旧东方,当选(旧东方)当时最年轻的英语教研主管;2019年加入旧东方在线,是高三英语名师并成为高三英语学科最年轻的负责人,被称为“中关村王杰伦”。现是东方甄选高级合伙人、旧东方教育科技集团董事长文化助理,兼任新东方文旅集团副总裁。"#对 prompt 使用一些简单的数据增强的方法,以便更好地收敛。
def get_prompt_list(keyword):return [f'{keyword}', f'你知道{keyword}吗?',f'{keyword}是谁?',f'介绍一下{keyword}',f'你听过{keyword}吗?',f'谁是{keyword}?',f'{keyword}是?',f'你认识{keyword}吗?',f'{keyword}的资料',f'{keyword}简介']# ChatGLM3 自己训练微调制作数据代码,与训练完成后模型合并解译代码# 对话数据格式
data = [{"conversations": [{"role": "system","content": "You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the user's instructions carefully. Respond using markdown."},{"role": "user","content": x},{"role": "assistant","content": description}]}for x in get_prompt_list(keyword)
]# 保存到 formatted_data/my_data_qa.jsonl
with open("formatted_data/my_data_qa.jsonl", "w") as f:for e in data:f.write(json.dumps(e, ensure_ascii=False) + "\n")

模型合并代码

import torch
from peft import PeftModel
from transformers import AutoTokenizer, AutoModel
#加载原模型
base_model = '/media/DATA/XXX/large_model/weights'
base_model = AutoModel.from_pretrained(base_model, trust_remote_code=True).cuda(3)
#加载微调的模型
lora_model_path = '/media/DATA/XXX/large_model/Chat_weitiao/ChatGLM3/finetune_demo/output/checkpoint-3000'
lora_model = PeftModel.from_pretrained(base_model,lora_model_path, torch_dtype=torch.float16)
lora_model.to("cpu")
#合并
merged_model = lora_model.merge_and_unload()
#合并的模型存储
new_model_directory = '/media/DATA/XXX/large_model/Chat_weitiao/ChatGLM3/finetune_demo/output/fintrue_chatglm3'
merged_model.save_pretrained(new_model_directory, max_shard_size="2048MB", safe_serialization=True)

后推理代码

from transformers import AutoModel, AutoTokenizer  # 导入transformers库的AutoModel和AutoTokenizer#加载模型
new_model_directory = '/media/DATA/XXX/large_model/Chat_weitiao/ChatGLM3/finetune_demo/output/fintrue_chatglm3'
tokenizer = AutoTokenizer.from_pretrained(new_model_directory, trust_remote_code=True)
model = AutoModel.from_pretrained(new_model_directory, trust_remote_code=True).cuda(3)
model.eval()
#输入
#instruction = "你现在是一个信息抽取模型,请你帮我抽取出关系内容为\"性能故障\", \"部件故障\", \"组成\"和 \"检测工具\"的相关三元组,三元组内部用\"_\"连接,三元组之间用\\n分割。文本:"
input = "被称为“中关村周杰伦"
#验证
response, _ = model.chat(tokenizer, input, history=None)
print(response)

第二种

#!/usr/bin/env python
# -*- coding: utf-8 -*-from pathlib import Path
from typing import Annotated, Unionimport typer
from peft import AutoPeftModelForCausalLM, PeftModelForCausalLM
from transformers import (AutoModelForCausalLM,AutoTokenizer,PreTrainedModel,PreTrainedTokenizer,PreTrainedTokenizerFast,
)ModelType = Union[PreTrainedModel, PeftModelForCausalLM]
TokenizerType = Union[PreTrainedTokenizer, PreTrainedTokenizerFast]app = typer.Typer(pretty_exceptions_show_locals=False)def _resolve_path(path: Union[str, Path]) -> Path:return Path(path).expanduser().resolve()def load_model_and_tokenizer(model_dir: Union[str, Path]) -> tuple[ModelType, TokenizerType]:model_dir = _resolve_path(model_dir)if (model_dir / 'adapter_config.json').exists():model = AutoPeftModelForCausalLM.from_pretrained(model_dir, trust_remote_code=True, device_map='auto')tokenizer_dir = model.peft_config['default'].base_model_name_or_pathelse:model = AutoModelForCausalLM.from_pretrained(model_dir, trust_remote_code=True, device_map='auto')tokenizer_dir = model_dirtokenizer = AutoTokenizer.from_pretrained(tokenizer_dir, trust_remote_code=True)return model, tokenizer@app.command()
def main(model_dir: Annotated[str, typer.Argument(help='')],prompt: Annotated[str, typer.Option(help='')],
):model, tokenizer = load_model_and_tokenizer(model_dir)response, _ = model.chat(tokenizer, prompt)print(response)if __name__ == '__main__':app()

训练解译指令

CUDA_VISIBLE_DEVICES=3  python finetune_hf.py formatted_data/ /media/DATA/zhulifu/large_model/weights/ configs/lora.yaml
CUDA_VISIBLE_DEVICES=2  python finetune_hf.py formatted_data/ /media/DATA/zhulifu/large_model/weights/ configs/ptuning_v2.yaml

训练代码

# -*- coding: utf-8 -*-import dataclasses as dc
import functools
from collections.abc import Callable, Mapping, Sequence
from pathlib import Path
from typing import Annotated, Any, Optional, Unionimport jieba
import numpy as np
import ruamel.yaml as yaml
import torch
import typer
from datasets import Dataset, DatasetDict, NamedSplit, Split, load_dataset
from nltk.translate.bleu_score import SmoothingFunction, sentence_bleu
from peft import (PeftConfig,PeftModelForCausalLM,get_peft_config,get_peft_model
)
from rouge_chinese import Rouge
from torch import nn
from transformers import (AutoModelForCausalLM,AutoTokenizer,EvalPrediction,GenerationConfig,PreTrainedModel,PreTrainedTokenizer,PreTrainedTokenizerFast,Seq2SeqTrainingArguments

这篇关于ChatGLM3 自己训练微调制作数据代码,与训练、训练完成后模型合并、解译代码完整版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/802330

相关文章

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum