InstructGLM:基于ChatGLM-6B在指令数据集上进行微调

news2024/12/26 11:13:37

InstructGLM

基于ChatGLM-6B+LoRA在指令数据集上进行微调

https://github.com/yanqiangmiffy/InstructGLM

本项目主要内容:

  • 🚀 2023/4/9 发布了基于100万条由BELLE项目生成的中文指令数据的Lora权重,具体可见output/belle/chatglm-lora.pt
  • 🚀 2023/4/8 基于deepspeed支持多卡微调,速度相比单卡提升8-9倍具体设置可见 微调3 基于DeepSpeed进行Lora微调
  • 🚀 2023/3/28 开源了基于alpaca和belle数据指令微调后的lora权重,详情可见output
  • 🚀 2023/3/25 针对ChatGLM-6B模型基于LoRA技术进行微调
  • 🚀 2023/3/23 基于gradio的demo完善

Todo

  • deepspeed支持
  • 模型评估,如何评估微调后的模型效果

开源指令数据集

  • 斯坦福52k英文指令数据

instruction:52K 条指令中的每一条都是唯一的,答案由text-davinci-003模型生成得到的

  • BELLE项目生成的中文指令数据:0.5m&1m

1百万数据:https://huggingface.co/datasets/BelleGroup/generated_train_1M_CN

生成方式基于种子prompt,调用openai的api生成中文指令

  • GuanacoDataset 多语言指令数据集

Guanaco 是在 Meta 的 LLaMA 7B 模型上训练的指令跟随语言模型。在 Alpaca 模型原始 52K 数据的基础上,我们添加了额外的 98,369 个条目,涵盖英语、简体中文、繁体中文(台湾)、繁体中文(香港)、日语、德语以及各种语言和语法任务。通过使用这些丰富的数据重新训练和优化模型,Guanaco 在多语言环境中展示了出色的性能和潜力。项目链接可以查看
https://guanaco-model.github.io/

  • alpaca中文指令微调数据集

与原始alpaca数据json格式相同,数据生成的方法是机器翻译和self-instruct

  • 人工精调的中文对话数据集

加入除了alpaca之外的其他中文聊天对话
人工微调,部分并不中文化的问题,我们将重新询问chatgpt或文心一言,重新获取回答并覆盖掉alpaca的回答

  • firefly-train-1.1M , 一份高质量的包含1.1M中文多任务指令微调数据集,包含23种常见的中文NLP任务的指令数据。对于每个任务,由人工书写若干指令模板,保证数据的高质量与丰富度。

微调1:alpaca英文指令数据

斯坦福羊驼52k数据,原始数据格式如下:

{
    "instruction": "Evaluate this sentence for spelling and grammar mistakes",
    "input": "He finnished his meal and left the resturant",
    "output": "He finished his meal and left the restaurant."
}

数据集地址:https://github.com/tatsu-lab/stanford_alpaca

1.数据预处理

转化alpaca数据集为jsonl,这一步可以执行设置数据转换后格式,比如:

###Instruction:xxx###Input:xxxx###Response:xxx
python cover_alpaca2jsonl.py \
    --data_path data/alpaca_data.json \
    --save_path data/alpaca_data.jsonl 

对文本进行tokenize,加快训练速度,文本长度可根据运行资源自行设置

python tokenize_dataset_rows.py \
    --jsonl_path data/alpaca_data.jsonl \
    --save_path data/alpaca \
    --max_seq_length 320

2. 模型训练

python train_lora.py \
    --dataset_path data/alpaca \
    --lora_rank 8 \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 1 \
    --max_steps 52000 \
    --save_steps 1000 \
    --save_total_limit 2 \
    --learning_rate 2e-5 \
    --fp16 \
    --remove_unused_columns false \
    --logging_steps 50 \
    --output_dir output

微调2:BELLE中文指令数据

包含543314条由BELLE项目生成的中文指令数据,数据格式如下:

inputtarget
用一句话描述地球为什么是独一无二的。\n地球上有适宜生命存在的条件和多样化的生命形式

数据集地址:https://huggingface.co/datasets/BelleGroup/generated_train_0.5M_CN

1.数据预处理

转化bell数据集为jsonl


python cover_alpaca2jsonl.py \
    --dataset_name BelleGroup/generated_train_0.5M_CN \
    --save_path data/belle_data.jsonl 

文本长度统计

count    543314.000000
mean         83.536944
std          95.665178
min           4.000000
25%          33.000000
50%          51.000000
75%          88.000000
90%         194.000000
max        4410.000000
Name: input_len, dtype: float64

count    543314.000000
mean        121.079030
std         165.472722
min           1.000000
25%          27.000000
50%          67.000000
75%         151.000000
90%         296.000000
max        9463.000000
Name: target_len, dtype: float64

分词处理

python tokenize_dataset_rows.py \
    --jsonl_path data/belle_data.jsonl \
    --save_path data/belle \
    --max_seq_length 320

转换后的数据:

                                           input_ids  seq_len                                                                                                                   
0  [20005, 92863, 20012, 20005, 83864, 87784, 871...       20
1  [20005, 92863, 20012, 20005, 91432, 86523, 885...       80
2  [20005, 92863, 20012, 104069, 85056, 86334, 89...       61
3  [20005, 92863, 20012, 91492, 89122, 83866, 852...       24
4  [20005, 92863, 20012, 20005, 83834, 99899, 927...       24

2. 模型训练

  • 基于原始chatglm-6b训练
python train_lora.py \
    --dataset_path data/belle \
    --lora_rank 8 \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 1 \
    --max_steps 52000 \
    --save_steps 1000 \
    --save_total_limit 2 \
    --learning_rate 2e-5 \
    --fp16 \
    --remove_unused_columns false \
    --logging_steps 50 \
    --output_dir output
  • 基于alpaca的lora继续微调
python train_lora.py \
    --dataset_path data/belle \
    --lora_rank 8 \
    --per_device_train_batch_size 8 \
    --gradient_accumulation_steps 1 \
    --max_steps 52000 \
    --save_steps 10000 \
    --save_total_limit 2 \
    --learning_rate 2e-5 \
    --fp16 \
    --remove_unused_columns false \
    --logging_steps 50 \
    --output_dir output/belle \
    --is_resume True \
    --resume_path output/alpaca/chatglm-lora.pt

微调3:基于DeepSpeed进行Lora微调

支持多卡+zero方案,训练速度可提高8倍左右

accelerate launch --config_file config/default_config.yaml train_new.py

实验环境

  • 安装所需要的包:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 显卡:2xA100 80G

实验结果

  • 训练好的lora权重
└─output
    ├─alpaca:基于52k微调的lora权重
    ├─belle::基于52k微调的lora权重+belle微调的权重52000steps
    └─belle_raw:belle微调的权重104000steps


链接:https://pan.baidu.com/s/1c-zRSEUn4151YLoowPN4YA?pwd=hxbr
提取码:hxbr
--来自百度网盘超级会员V3的分享
  • alpaca数据微调效果

  • belle数据微调效果

Reference

非常感谢以下作者的无私开源

  • https://github.com/mymusise/ChatGLM-Tuning
  • https://huggingface.co/BelleGroup/BELLE-7B-2M
  • https://github.com/LianjiaTech/BELLE
  • https://huggingface.co/datasets/BelleGroup/generated_train_0.5M_CN
  • https://huggingface.co/datasets/JosephusCheung/GuanacoDataset
  • https://guanaco-model.github.io/
  • https://github.com/carbonz0/alpaca-chinese-dataset
  • https://github.com/THUDM/ChatGLM-6B
  • https://huggingface.co/THUDM/chatglm-6b
  • https://github.com/lich99/ChatGLM-finetune-LoRA

Bugs

  • gcc版本升级
yum install centos-release-scl -y
yum install devtoolset-9 -y

#临时覆盖系统原有的gcc引用
scl enable devtoolset-9 bash

# 查看gcc版本
gcc -v

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring Boot】SpringBoot设计了哪些可拓展的机制?

文章目录前言SpringBoot核心源码拓展Initializer拓展监听器ApplicationListenerBeanFactory的后置处理器 & Bean的后置处理器AOP其他的拓展点前言 当我们引入注册中心的依赖,比如nacos的时候,当我们启动springboot,这个服务就会根据配置文…

【UE Sequencer系列】05-解决角色动画造成的位移问题

步骤 在上一篇博客制作的动画中,角色反击的动画部分会造成角色瞬移的问题,如下所示: 为了解决这个问题,我们可以做如下操作: 1.首先我的瞬移现象发生在第698帧到699帧的时候,我对第698帧的角色的transfor…

小朋友台灯什么品牌好?盘点儿童护眼台灯排行榜

小朋友自晚上学习时,有台灯肯定比没有台灯好,只要是合格的、能用的台灯,能有一个稳定又亮堂的环境,也不会给眼睛带来伤害。 这几年在台灯品类中出现“护眼灯”,主打是预防或缓解眼疲劳的,在普通台灯的基础是…

电子模块|外控集成 LED 光源 WS2812模块---硬件介绍

电子模块|外控集成 LED 光源 WS2812模块模块简介模块特点机械尺寸模块简介 WS2812是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路&#xff…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的直方图算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的直方图算法增强(C#)Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合OpenCV使用图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回调中…

如何能基于prompt tuning v2训练好一个垂直领域的chatglm-6b

如何能基于prompt tuning v2训练好一个垂直领域的chatglm-6b 首先先抛出一个问题,是不是所有的文本生成数据集都适合用chatglm 6B的模型进行微调。那我们今天找到了三个数据集,分别为百科数据集、法律问答数据集、论文题目与摘要数据集、专利名称与专利…

stable-diffusion-webui-colab部署记录

stable-diffusion-webui-colab 该模型可以在网上云端部署stable-diffusion,减少本地部署的繁琐步骤降低配置要求的依赖。 一、进入stable-diffusion-webui-colab 1.网址:https://github.com/camenduru/stable-diffusion-webui-colab 在分支中选择driv…

java 坐标体系与绘图

目录 一、坐标体系 1.像素 : 2.坐标系 : 二、绘图 1.机制 : 2.实例 : 3.原理 : 4.常用绘图方法 : 1 setColor(Color c) : 设置画笔颜色 2 drawLine(int x1, int y1, int x2, int y2) : 画直线 3 drawRect(int x, int y, int width, int height) : 画矩形边框 4 fillRec…

【密码学复习】第六讲 HASH函数和MAC(三)

H是一个Hash函数 K表示密钥 B表示计算消息摘要时消息分块的字节长度(对MD5和SHA-1是512比特,64字节) L表示消息摘要按字节计算的长度(对MD5是16字节) ipad表示0x36重复B次,opad表示0x5c重复B次。 K可以…

腾讯云轻量服务器价格表(2023版)

2023腾讯云轻量应用服务器2核2G4M带宽88元一年、2核4G6M带宽159元/年、4核8G10M优惠价425元、8核16G14M价格1249、16核32G20M服务器2499元一年,今天分享2023腾讯云服务器配置及精准报价。 腾讯云轻量应用服务器优惠价格表 腾讯云服务器分为轻量应用服务器和云服务器…

Games106学习记录第一课

本文地址:https://blog.csdn.net/t163361/article/details/130139998 最近准备申请新星创作者,需要2000个粉丝关注,觉得文章有用的,请点一下左侧边栏的关注,谢谢。 前段时间看到Games106课程,讲的是流水线…

【天梯赛—不想坑队友系列】L1-002 打印沙漏(java)

题目链接 PTA | 程序设计类实验辅助教学平台 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ************ *****所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符…

c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%

c/c:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式% 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c的话, 我所知道的周边的会c的同学,可手握10…

Linux主机用WordPress搭建网站

文章目录一、搭建过程1.1、切换到超户1.2、更新1.3、安装一些包1.4、安装wordpress1.5、配置MariaDB1.6、创建WordPress数据库1.7、配置WordPress1.8、登录WordPress1.9、安装phpMyAdmin一、搭建过程 1.1、切换到超户 sudo su1.2、更新 apt-get update -y1.3、安装一些包 a…

我在windows10下,使用CMake gui 编译krita源码

系列文章目录 文章目录系列文章目录前言一、krita编译说明二、使用步骤前言 我在windows10下,使用CMake gui 编译krita源码 where is the source code:E:/krita-dev/krita where to build the binaries:E:/krita-dev/krita_camke current generator:MinGW Makefile…

成为程序员后才知道的6件事,第5点看完很心酸!

曾几时,总觉得IT精英外表光鲜亮丽,尤其是程序员咔咔咔打代码,月入几个w,不光挣得多,上班期间还能玩电脑游戏。但是,真正当了程序员之后,OMG!我再也不这样想了!好多事都是当了程序员才…

【C语言深入】带你了解C语言中的可变参数列表

【C语言深入】带你了解C语言中的可变参数列表一、可变参数函数的使用方式1、使用方式2、自定义可变把参数函数2.1、三个宏一个类型2.2、实现方式二、可变参数列表的原理1、va_start1.1、_ADDRESSOF1.2、关于临时拷贝的一个小知识点1.3、_INTSIZEOF2、va_arg3、va_end一、可变参…

23种设计模式总结(大白话,适合小白)

文章目录什么是设计模式?设计模式的分类创建型模式创建型类类型工厂方法模式创建型对象型抽象工厂模式生成器模式原型模式单例模式结构型模式结构型类类型适配器模式结构型对象型桥接模式组合模式装饰器模式外观模式享元模式代理模式行为型模式行为型对象型命令模式…

【C++PrimerPlus】第五章 循环和关系表达式

文章目录5.1 for循环5.1.1 for循环的组成部分5.1.2 回到for循环5.1.3 修改步长5.1.4 使用for循环访问字符串5.1.5 递增运算符 ()和递减运算符(--)5.1.6 副作用和顺序点5.1.7 前缀格式与后缀格式5.1.8 递增/递减和指针5.1.9 组合赋值运算符5.1.10 复合语句![](https://img-blog.…

Qt Quick - ToolTip

Qt Quick - ToolTip使用总结一、概述二、附带的ToolTip三、延迟和超时四、自定义ToolTip五、定制化一、概述 ToolTip 其实就是ToolTip,所谓ToolTip其实就是一段简短的文本,告知用户控件的功能。它通常置于父控件之上或之下。提示文本可以是任何富文本格…