0基础快速上手---大语言模型微调(web端)

0基础快速上手大语言模型微调—基于“第2届·百度搜索创新大赛——搜索答案组织”微调结果分析

文章目录

  • 0基础快速上手大语言模型微调---基于“第2届·百度搜索创新大赛——搜索答案组织”微调结果分析
    • 微调实战经历
    • 开始微调!
      • 准备微调框架
        • 加载数据集
      • 正片开始--微调
        • web网页进行微调
    • 合并模型并导出
    • 心得分享
      • 参考资料

微调实战经历

本次微调经验分享依据于我们在2023年参加的“第2届·百度搜索创新大赛——搜索答案组织”整个比赛过程。
我们团队选择的基座模型是ChatGLM3-6B-Base模型,训练数据集为官方提供的数据集(9000条),训练方法为LORA sft 监督微调。
最终结果:score 36.12--ROUGE-L 41.03--BLEU-4 31.22,东三省排名第1名,全国最终排名为44/220.

本博主大语言模型系列:
Chatglm3-6B Chat/Base保姆级本地部署以及工具调用
国产大模型LLM 魔搭社区|阿里云服务器部署

开始微调!

准备微调框架

目前对于大语言模型微调可以分为下面几个思路:全量微调,LoRA,P-Tuning微调
框架环境搭建

git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -r requirements.txt

推荐python=3.10,如果要在 Windows 平台上开启量化 LoRA(QLoRA),需要安装预编译的 bitsandbytes 库, 支持 CUDA 11.1 到 12.1

pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.39.1-py3-none-win_amd64.whl
加载数据集

在data文件夹下面创建xxx.json命名格式的数据集json文件,本人设置的是baidutrain.json
json文件格式如下:

[
   {
        "query": "王者荣耀钻石夺宝幸运值满是多少",
        "refs": [
            "积分夺宝幸运值满值为360点,钻石夺宝幸运值满值为200点,但是夺宝幸运值满了之后还需要一抽才能获得水晶,所以积分夺宝361抽必定获得水晶,钻石夺宝201抽必定获得水晶。",
            "王者钻石夺宝幸运值满是200。",
            "1、最高的幸运值上限是200,每抽一次会获得1点幸运值。王者荣耀里面的钻石夺宝幸运值达到200就满了,也就是说当幸运值满200时,再夺宝一次是必出一个王者水晶的,拥有王者水晶可以到水晶商店里面去兑换物品了,兑换的物品都是永久的。",
            "幸运值满值是360,玩家在抽361的时候是保底必出水晶,这个保底是人人都能抽出水晶的,也就是100%可以让玩家得到水晶,荣耀水晶的概率是0.8%,但是玩家们如果在不断增加抽奖的次数,那么抽出水晶的概率也会增加,想要抽出水晶的玩家可以将361次当做保底的次数。",
            "玩家获取王者水晶之后,可以使用该道具兑换王者商店中的奖励,包含了回城特效、英雄、中级品质的皮肤等奖励。"
        ],
        "answer": "《王者荣耀》钻石夺宝幸运值满值为200点。\n\n钻石夺宝幸运值满200后再抽一次必出一个王者水晶,玩家获取王者水晶之后,可以使用该道具兑换王者商店中的奖励,其中包含了回城特效、英雄、中级品质的皮肤等,兑换的物品永久有效。"
    },
    {
        "query": "王手是什么意思",
        "refs": [
            "一、原神王手。 王手这个词出现在PV短片《雪姬逢椿》中。 王手是小神里说的,小神里很可爱,说王手二字的声音也不错。 所以玩家说王手二字让我氪了648。 二、王手原意。 王手是日本将棋的说法,与中国象棋将军的用法相似。 意思是将军(棋步),将军。",
            "一、原神王手 在PV短片——「雪霁逢椿」中出现了王手这个词。 王手是由小神里说出的,小神里十分可爱,说王手二字时声音也好听。 所以玩家就表示王手二字让我氪了648。 二、王手原本意思 王手是日本将棋的说法,和中国象棋将军的用法差不多。 是将军(的棋步),将一军的意思。",
            "王手是日本将棋的说法,与中国象棋将军的用法相似。意思是将军(棋步),将军。",
            "其中的王手是指,如能下了能擒拿对方王将的一手,类似于象棋里的将军。称之为王手。",
            "王手,男,浙江温州市人。1981年开始发表小说。近年小说散见于《收获》《人民文学》《当代》《钟山》《花城》《作家》《山花》等刊,出版中短篇小说集《火药枪》《柯依娜一个人》《狮身人面》"
        ],
        "answer": "王手是指下了这步棋能擒拿对方王将的一手,类似于象棋里的将军,是日本将棋中的一种说法。\n\n此外,王手还是中国作家协会会员,一级作家,出版中短篇小说集《火药枪》《柯依娜一个人》等。"
    }
]

一定要将数据集所在的json文件加载到dataset_info.json中!!!!!!!!

"baidu_train":{
    "file_name": "train.json""columns": {
      "prompt": "", #系统prompt
      "query": "refs"+"input", # 输入
      "response": "output", # 输出
      "history": "" #历史对话
    }
  }

正片开始–微调

web网页进行微调

开启web页面

python src/train_web.py

之后就进入这个页面
语言:进行英文/中文切换
模型名称:自己想要选择的模型
模型路径:本地模型路径
数据集:选择自己准备训练的数据集
学习率越大越好,推荐1e-4
高级设置:可以自定义模型微调之后产生的节点信息
LoRA参数设置:推荐LoRA秩=8/16
预览命令:看见web端所设置的脚本各个参数
断点名称:设置微调之后的模型输入文件夹
##0基础快速上手---大语言模型微调(web端)_第1张图片

合并模型并导出

模型路径选择自己的基座模型 模型断点选择自己刚才导出的微调模型文件
切换到Export模块,在导出目录选择自己想要导出模型的路径,选择适合自己模型的最大分块大小!大功告成!

心得分享

在web上面直接训练十分简单,但是GPU可能不允许你这么操作,因此我们可能需要租用服务器进行训练。下面文章将会介绍在Paddle 飞桨平台进行模型训练。
书启下文 0基础快速上手—大语言模型微调(shell版)

下面我将本次比赛微调训练的得分的过程分享给大家

基座模型 微调方法 得分
ChatGLM3-6B Chat 不进行微调 26.54
ChatGLM3-6B Chat 改善prompt 27.52
ChatGLM3-6B Chat ptuning 28.86
ChatGLM3-6B Chat 奖励模型训练 26.78
ChatGLM3-6B Chat 监督模型训练 30.54
ChatGLM3-6B Base 监督模型训练 34.14
ChatGLM3-6B Base 监督模型训练+prompt 36.12

如果以上有什么不对,请批评指正,也欢迎各位大佬分享更高效的微调方法

参考资料

LLaMA Board: 通过一站式网页界面快速上手 LLaMA Factory

你可能感兴趣的:(语言模型,人工智能,paddle,nlp,python,自然语言处理,前端)