添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用finetune_continue脚本,2080ti单卡,跑了120个小时(跑到17298了。),出来的adapter_model.bin,使用generate.sh脚本加载进行问答,基本不能用。感觉这刚开始炼丹还不是一般的难。看着大神的医疗问答样例,感觉差距太遥远了,深刻求指导。

看了下checkpoint-17200里边的trainer_state.json,发现loss是一直有降,最后情况如下:
"epoch": 9.28,
"learning_rate": 2.1804861030352364e-06,
"loss": 0.8621,
"step": 17180
"epoch": 9.29,
"learning_rate": 1.8316083265495987e-06,
"loss": 0.8583,
"step": 17200
"epoch": 9.29,
"eval_loss": 0.8552559018135071,
"eval_runtime": 72.3139,
"eval_samples_per_second": 13.829,
"eval_steps_per_second": 1.729,
"step": 17200
"max_steps": 17298,
"num_train_epochs": 11,
"total_flos": 2.8694665234353226e+19,
"trial_name": null,
"trial_params": null

数据是整理了N多的诗词,定了几个专用prompts, 如prompt_list = ["扮演一位诗词专家,背诵如下诗篇全文", "扮演一位诗词专家,指出如下诗句出处", "扮演一位诗词专家,介绍如下诗词解读", "扮演一位诗词专家,介绍下如下诗人"]。组装了43万6千多的语料。形状如下
"instruction": "扮演一位诗词专家,背诵如下诗篇全文",
"input": "宋·李清照 武陵春 (风住沉香花已尽)",
"output": "风住沉香花已尽,日晚倦梳头。物是人非事事休,欲语泪先流。闻说双溪春尚好,也拟泛轻舟。只恐双溪舴艋(zé měng)舟,载不东许多愁。"
"instruction": "扮演一位诗词专家,背诵如下诗篇全文",
"input": "宋·李清照 声声慢 (寻寻觅觅)",
"output": "寻寻觅觅,冷冷清清,凄凄惨惨戚戚。乍暖还寒时候,最难将息。三杯两盏淡酒,怎敌它,万来风急。雁过也,正伤心,却是旧时相识。满地黄花堆积,憔悴损,如今有谁堪摘?守着窗儿,独自怎生得黑!梧桐更兼细雨,到黄昏,点点滴滴。这次第,怎一个愁字了得!"

几个问题困扰中,求大神指导:
1、是训练次数不足么?(我现在把诗文减少到347首,做了只用一条指令的347条全文背诵的语料,再从checkpoint-5800处重跑,这个应该可以重复尝试多次数据了。但是又要跑120小时。。。当然过程当中应该会过拟合吧?中间停了就好。重新验证中)
2、是语料准备有问题么?格式、指令或者其它一些未注意的地方?
3、训练参数需要调整或者设置?

@grantchenhuarong
1、第一个是你问题的定义。我们医疗问答的问题定义较为简单,你需要把问题定义的更清楚一点,可以参考 这里 ,写了几个简单的抽象问题定义。比如你可以写instruction:“扮演一位诗词专家,根据指定诗人的风格写出指定主题的诗句“,input:“诗人:李清照,主题:风住沉香花已尽”,类似这样,可以定义的更清楚一点。
2、训练进程的问题:我们垂料训练的代码是根据我们一个epoch 70w数据来训练的(一个epoch 70w/128=5400个step)。所以你把你自己的数据拼接进去也会走5400个step左右,会进行5400*(你的数据大小)/ 128个epoch,比如你的数据大小347,会进行14639个epoch,这样显然是会过拟合的,一般来说进行十几轮epoch就行了,你可以把save_step设置小一点,在每个epoch测测,这个还得看实际效果。
3、finetune_other_continue是用来训练额外数据的,这里的设置是防止跳过额外数据。
4、代码是随时可以中途断掉的,我们支持断点重训,指定最后一个checkpoint,再用finetune_continue继续训练就行了

finetune_other_continue 以checkpoint-11600为基础,参数如下:

#DATA_PATH="./sample/merge_sample.json" #"../dataset/instruction/guanaco_non_chat_mini_52K-utf8.json"
DATA_PATH="./data/instructions.json"
OUTPUT_PATH="lora-Vicuna"
MODEL_PATH="/data/ftp/models/llama/7b"
lora_checkpoint="./lora-Vicuna/checkpoint-11600"
from_data_beginning=True # False
TEST_SIZE=1

python finetune.py
--data_path $DATA_PATH
--output_path $OUTPUT_PATH
--model_path $MODEL_PATH
--eval_steps 200
--save_steps 200
--test_size $TEST_SIZE
--resume_from_checkpoint $lora_checkpoint
--ignore_data_skip $from_data_beginning

训练出来的checkpoint-17000,使用generate.sh加载后,回答类似如下信息

input:李白的静夜思
output:
Gi:`+b[#CE7jod<F_=1 Z5!|'RtP*A&u6-smelg{,%H3"O]/8^DaW
Mqy$wxz>~rkV(c2L?BY4}I0.NQJvp@Kf;UXhT9S)n Mediabestandenoreferrer PortályederbördITableViewnederbördtatywnaObrázky߬ demselIABotabestanden ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⥤ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ]{' ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ челов╌ ⁇ ⁇

这个真的就很糟糕了,不知道问题出在哪里了。。。求指教。

1、重新下载了新版的huggingface的llama-7b模型,对齐了bos_token_id,eos_token_id,重新再训练一下。
2、也将fintune.sh当中加载lora模型参数的代码变更了下,确实将checkpoint-11600叠加上来了。

语料还是固定指令的350首诗,目前看训练速度是比之前快一多半。原来到17298 steps需要116小时,目前看只要60小时左右。
中间将保存的steps改成50了,尽早看看新的训练效果。

目前训练语料357首诗文,构造如下
跑的微调脚本如下python finetune.py --data_path ./data/instructions.json --output_path ./lora-Vicuna/shici4/ --model_path /data/ftp/models/llama/7b-hf/ --eval_steps 50 --save_steps 50 --test_size 1 --resume_from_checkpoint ./lora-Vicuna/checkpoint-11600 --ignore_data_skip True

请大神帮忙分析下问题出在哪?
1、语料不足?
2、语料格式整理问题?
3、训练欠拟合,继续?
4、测试集只定了1,有无影响?
5、Anything else?

基本上训练语料的内容,都没有体现出来。。。有些困惑了。lora只能作为引子,去勾兑出llama底层模型中的数据么?如果原先训练的底层模型,它文字接龙创作出来的东西,其实也很难被有限的新增语料引导么?

那针对私域垂直领域知识模型,是否只能从头开始训练底层模型?这难度可不是一般的大啊。。。

@grantchenhuarong 我刚才用300多个诗词快速的试了一下,应该就是训练量的问题。在20多个epoch左右已经能有一定的效果了。对于这种小数据来说你可以把batch size开小一点收敛的快一点(是batch size不是mirco batch size)。
然后你这种重复复制数据的办法是不可取的,你要扩充数据尽量是不同的数据。模型的记忆能力其实很强的。你可以用这里的古诗词数据: https://huggingface.co/datasets/zhangqiaobit/chinese_poetrys

谢谢大佬的回应哈,有几个问题咨询一下:
1、您说的20多个epoch,不是指steps,而是覆盖一次全量数据的训练度么?
2、我的batch_size用的默认的128,micro batch size是默认的4。需要调小到多小?
3、还有您是用 continue.sh,还是使用others_continue.sh脚本的参数执行的呀?
4、所给的数据,你是构造单指令微调的方式么?可否参考一下语料的构造方式?
5、您说的有一定效果,是指的能按指令出语料的应答数据么?符合度有多高呀?

1、step也可以看,epoch也可以看,你可以看到你输出栏里面是有epoch的(你首尾减一减就是跑了多少个epoch),一个epoch就是全部数据训一遍
2、我调成batch size=16是这个效果,mirco batch size相当于是per gpu batch size(你可以搜搜是什么意思)
3、当然是other_continue那个
4、我就是按照我上面说的构建方式,这个不能偷懒的,构建的越好模型理解的越好

"instruction": "请扮演一个古诗词生成器,根据给定的题目使用对应的诗人风格生成一首诗。", "input": "题目是古歌,诗人是两汉乐府,生成的诗词为:", "output": "高田种小麦,终久不成穗。男儿在他乡,焉得不憔悴。"

5、40个epoch左右基本已经能背出来了,然后你测不是数据内东西也是有效果的,这是我随便测的一个效果

请扮演一个古诗词生成器,根据给定的题目使用对应的诗人风格生成一首诗。题目是中秋赏月,诗人是两汉乐府,生成的诗词为:
>秋风起云兮日照渐。草木黄落兮华露徘徊。微风南吹兮万叶翩翩道。色郁郁感兮游鸡鸣声。清丝飞芳兮雀鸣鸣声。美月高飞兮行行飞逢。回顾思兮悠悠心嘉。

当然这个训练量还是不够的

个人经验是叠加的Lora训练轮次越多,增加语料越多,对原有网络模型结构参数调整的就会越多,损失的通用能力就越多。你也可以自己测试下生成的权重文件的。这边给一个训练对对子的例子参考哈,几个epoch之后,通用能力已经惨不忍睹了。多实践几回就会晓得了,祝炼丹路顺利哈。

下边这个是原有模型的一个测试,你对比对比就清楚了,所以有道友说最好通用语料+专用语料一块混着再炼丹。这块我还没开始尝试,你也可以先试试。

继续训练中,目前执行到11250,加载generate.sh,交互效果不太好。 image 目前训练语料357首诗文,构造如下 image 跑的微调脚本如下python finetune.py --data_path ./data/instructions.json --output_path ./lora-Vicuna/shici4/ --model_path /data/ftp/models/llama/7b-hf/ --eval_steps 50 --save_steps 50 --test_size 1 --resume_from_checkpoint ./lora-Vicuna/checkpoint-11600 --ignore_data_skip True

请大神帮忙分析下问题出在哪? 1、语料不足? 2、语料格式整理问题? 3、训练欠拟合,继续? 4、测试集只定了1,有无影响? 5、Anything else?

你好,我也是初学者,现在也是采用Lora训练Llama-7B模型,数据量500条,BATCH_SIZE = 16,Step 500/16/2个GPU = 15.625, --eval_steps 16 --save_steps 16 --test_size 1,70W/0.05W = 1400 epoch(计划跑30~60个 epoch ,然后终止运行),现在只跑了不到10个epoch,就卡住了,进度条一直是69%,好几个小时都没有动静,查看对应的2个GPU的计算利用率基本是0%,显存利用率也没有到50%,麻烦帮忙看看 @grantchenhuarong @Facico