当前位置: 首页 > news >正文

GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(一)

GPT实战系列-如何使用P-Tuning本地化训练ChatGLM2等LLM模型?

文章目录

  • GPT实战系列-如何使用P-Tuning本地化训练ChatGLM2等LLM模型?
      • P-Tuning微调训练概述
        • 1、预训练模型或者是torch模型
        • 2、训练器的超参数
        • 3、数据预处理工具
        • 4、加载数据
        • 5、分词处理
        • 6、数据预处理,如填充,前后缀
        • 7、训练参数配置
        • 8、执行训练
      • 软件依赖
      • 数据处理

P-Tuning v2 将 ChatGLM2-6B 模型需要微调的参数量,减少到原来的 0.1%,再通过模型量化、Gradient Checkpoint 等方法,最低只需要 7GB 显存即可运行。

本文试图分析程序结构和代码,解释序列转换生成模型的微调训练。为了篇幅不要过长,下期解读训练代码。

P-Tuning微调训练概述

训练过程函数分为五个部分:训练参数配置,训练数据预处理,训练数据加载,执行迭代训练,训练评估与测试。

训练参数配置
训练数据预处理
训练数据加载
训练执行迭代
训练评估与测试

把训练任务参数配置传递给Trainer:

1、预训练模型或者是torch模型
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased")
2、训练器的超参数

TrainingArguments包含可以更改的模型超参数,如学习率、批大小和要训练的epoch数量。如果不指定任何训练参数,则使用默认值:

from transformers import TrainingArguments
training_args = TrainingArguments(output_dir="path/to/save/folder/",learning_rate=2e-5,per_device_train_batch_size=8,per_device_eval_batch_size=8,num_train_epochs=2,
)
3、数据预处理工具

如分词器、图像处理器、特征提取器或处理器:

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
4、加载数据
from datasets import load_dataset
dataset = load_dataset("rotten_tomatoes")  # doctest: +IGNORE_RESULT
5、分词处理

创建一个函数对数据集进行分词,并使用map将其应用到整个数据集上:

def tokenize_dataset(dataset):return tokenizer(dataset["text"])
dataset = dataset.map(tokenize_dataset, batched=True)
6、数据预处理,如填充,前后缀

使用DataCollatorWithPadding从数据集中创建一批示例:

from transformers import DataCollatorWithPadding
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
7、训练参数配置

在Trainer中使用所有这些类:

from transformers import Trainer
trainer = Trainer(model=model,args=training_args,train_dataset=dataset["train"],eval_dataset=dataset["test"],tokenizer=tokenizer,data_collator=data_collator,
)  # doctest: +SKIP
8、执行训练

调用train()开始训练:

trainer.train()

对于使用序列到序列模型的任务(如翻译或摘要),请使用Seq2SeqTrainer和Seq2SeqTrainingArguments类。

可以通过继承Trainer中的方法来自定义训练循环。允许自定义特性,如损失函数、优化器和调度器(scheduler)。请查看 Trainer参考文档,了解哪些方法可以被子类化。

软件依赖

需要pip安装中文分词器,中文评价指标,数据集管理

pip install rouge_chinese nltk jieba datasets

数据处理

训练数据形式的转换,本训练测试以广告数据集作为样例讲解。

ADGEN数据集任务的数据形式,输入(content),生成输出(summary)

{"content": "类型#上衣*版型#宽松*版型#显瘦*图案#线条*衣样式#衬衫*衣袖型#泡泡袖*衣款式#抽绳","summary": "这件衬衫的款式非常的宽松,利落的线条可以很好的隐藏身材上的小缺点,穿在身上有着很好的显瘦效果。领口装饰了一个可爱的抽绳,漂亮的绳结展现出了十足的个性,配合时尚的泡泡袖型,尽显女性甜美可爱的气息。"
}

End



GPT专栏文章:

GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案

GPT实战系列-ChatGLM2模型的微调训练参数解读

GPT实战系列-如何用自己数据微调ChatGLM2模型训练

GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案

GPT实战系列-Baichuan2本地化部署实战方案

决策引擎:
Falcon构建轻量级的REST API服务

决策引擎-利用Drools实现简单防火墙策略

http://www.lryc.cn/news/233552.html

相关文章:

  • 【Python】爬虫代理IP的使用+建立代理IP池
  • JS-项目实战-新增水果库存功能实现
  • mysql 常见操作指令
  • Vue3 生命周期
  • rocketmq 安装dashboard1.0.0 mq消息控制台安装 rocketmq控制台安装 rocketmq-dashboard-1.0.0编译安装
  • 常见的数据结构有哪些?
  • Spring中有哪几种方法获取HttpSession对象
  • springboot开启Redis缓存支持
  • 2.4 矩阵的运算法则
  • 让文字在盒子中水平居中与垂直居中
  • 聊一聊前端面临的安全威胁与解决对策
  • 【matlab学习】现代控制
  • Debezium报错处理系列之九十九:ConnectException: Source offset ‘file‘ parameter is missing
  • 基于深度学习的活体人脸识别检测算法matlab仿真
  • Angular 由一个bug说起之二:trackBy的一点注意事项
  • 单片机FLASH下载算法的制作
  • [nlp] 损失缩放(Loss Scaling)loss sacle
  • Django框架之视图层
  • 商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
  • AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析
  • CANoe-Logging模块如何抓取总线数据
  • Unity中Shader的矩阵加减法
  • IIC总线概述和通信时序代码详细图文解析
  • EtherCAT 伺服控制功能块实现
  • 如何基于OpenCV和Sklearn算法库开展机器学习算法研究
  • 在 Node.js 中发出 HTTP 请求的 5 种方法
  • pipeline agent分布式构建
  • MySQL(17):触发器
  • 挖掘PostgreSQL事务的“中间态”----更加严谨的数据一致性?
  • 多种方法实现conda环境迁移