You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
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,交互效果不太好。
目前训练语料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-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