ymcui / Chinese-LLaMA-Alpaca-2

中文LLaMA-2 & Alpaca-2大模型二期项目 + 64K超长上下文模型 (Chinese LLaMA-2 & Alpaca-2 LLMs with 64K long context models)
Apache License 2.0
7.04k stars 581 forks source link

用200多条指令对Chinese-LLaMA-Alpaca-2指令精调后效果很差,几乎所有问题都回答的不对。 #419

Closed baijingtao closed 8 months ago

baijingtao commented 9 months ago

提交前必须检查以下项目

问题类型

效果问题

基础模型

Chinese-Alpaca-2 (7B/13B)

操作系统

Linux

详细描述问题

# 请在此处粘贴运行代码(请粘贴在本代码块里)

训练情况 "epoch": 5.91, "eval_loss": 0.5640538334846497, "eval_runtime": 11.5168, "eval_samples": 150, "eval_samples_per_second": 13.024, "eval_steps_per_second": 13.024, "perplexity": 1.7577838394521335, "train_loss": 0.8281261014177445, "train_runtime": 960.3745, "train_samples": 382, "train_samples_per_second": 2.387, "train_steps_per_second": 0.294

lora

依赖情况(代码类问题务必提供)

# 请在此处粘贴依赖情况(请粘贴在本代码块里)

运行日志或截图

# 请在此处粘贴运行日志(请粘贴在本代码块里)
baijingtao commented 9 months ago

lora和原模型合并后推理回答的问题和精调数据基本毫无关联

ymcui commented 9 months ago

模型怎么训的,怎么合并的?对应的命令。

baijingtao commented 9 months ago

模型怎么训的,怎么合并的?对应的命令。

精调使用项目中 run_sft.sh 脚本,脚本参数如下: l1

精调数据集格如下: l2

执行精调脚本后得到lora模型如下: l3 通过merge_llama2_with_chinese_lora_low_mem.py脚本合并lora到基础模型,命令如下: python merge_llama2_with_chinese_lora_low_mem.py --base_model /opt/python_app/LLaMa/model/alpaca --lora_model /opt/python_app/lora/sft_lora_model --output_type huggingface --output_dir /opt/python_app/LLaMa/model/alpacaV2 其中alpaca 目录为hf格式基础模型目录 sft_lora_model 为执行精调脚本后得到的lora模型目录,格式如下: l4 最后使用合并好的模型进行推理,问精调训练集中的问题,得到的结果几乎完全不相干,请大佬不吝赐教,小弟跪谢

zollty commented 9 months ago

@baijingtao 你测试时保持和精调时问题相同了吗?我8条数据精调都有一定效果,会不会是你的提问和你训练的数据关联性不够?或者特征不明显,导致没有匹配到你训练的那部分模型权重。 我的精调数据如下:

{"input":"","instruction": "类型#上衣*材质#棉*颜色#蓝色*风格#潮*衣样式#polo*衣领型#polo领*衣袖长#短袖*衣款式#拼接", "output": "想要在人群中脱颖而出吗?那么最适合您的莫过于这款polo衫短袖,采用了经典的polo领口和柔软纯棉面料,让您紧跟时尚潮流。再配合上潮流的蓝色拼接设计,使您的风格更加出众。就算单从选料上来说,这款polo衫的颜色沉稳经典,是这个季度十分受大众喜爱的风格了,而且兼具舒适感和时尚感。"}
{"input":"","instruction": "类型#上衣*版型#h*材质#蚕丝*风格#复古*图案#条纹*图案#复古*图案#撞色*衣样式#衬衫*衣领型#小立领", "output": "小女人十足的条纹衬衣,缎面一点点的复古,还有蓝绿色这种高级气质复古色,真丝材质,撞色竖条纹特别的现代感味道,直h型的裁剪和特别的衣长款式,更加独立性格。双层小立领,更显脸型。"}

测试结果: 问:类型#上衣版型#宽松颜色#粉红色图案#字母图案#文字图案#线条衣样式#卫衣*衣款式#不规则

答: 宽松的卫衣版型包裹着整个身材,宽大的衣身与身材形成鲜明的对比描绘出纤瘦的身形。下摆与袖口的不规则剪裁设计,彰显出时尚前卫的形态。被剪裁过的样式呈现出布条状自然地垂坠下来,别具有一番设计感。线条分明的字母样式有着花式的外观,棱角分明加上具有少女元气的枣红色十分有年轻活力感。粉红色的衣身把肌肤衬托得很白嫩又健康。

baijingtao commented 9 months ago

@baijingtao 你测试时保持和精调时问题相同了吗?我8条数据精调都有一定效果,会不会是你的提问和你训练的数据关联性不够?或者特征不明显,导致没有匹配到你训练的那部分模型权重。 我的精调数据如下:

{"input":"","instruction": "类型#上衣*材质#棉*颜色#蓝色*风格#潮*衣样式#polo*衣领型#polo领*衣袖长#短袖*衣款式#拼接", "output": "想要在人群中脱颖而出吗?那么最适合您的莫过于这款polo衫短袖,采用了经典的polo领口和柔软纯棉面料,让您紧跟时尚潮流。再配合上潮流的蓝色拼接设计,使您的风格更加出众。就算单从选料上来说,这款polo衫的颜色沉稳经典,是这个季度十分受大众喜爱的风格了,而且兼具舒适感和时尚感。"}
{"input":"","instruction": "类型#上衣*版型#h*材质#蚕丝*风格#复古*图案#条纹*图案#复古*图案#撞色*衣样式#衬衫*衣领型#小立领", "output": "小女人十足的条纹衬衣,缎面一点点的复古,还有蓝绿色这种高级气质复古色,真丝材质,撞色竖条纹特别的现代感味道,直h型的裁剪和特别的衣长款式,更加独立性格。双层小立领,更显脸型。"}

测试结果: 问:类型#上衣_版型#宽松_颜色#粉红色_图案#字母_图案#文字_图案#线条_衣样式#卫衣*衣款式#不规则

答: 宽松的卫衣版型包裹着整个身材,宽大的衣身与身材形成鲜明的对比描绘出纤瘦的身形。下摆与袖口的不规则剪裁设计,彰显出时尚前卫的形态。被剪裁过的样式呈现出布条状自然地垂坠下来,别具有一番设计感。线条分明的字母样式有着花式的外观,棱角分明加上具有少女元气的枣红色十分有年轻活力感。粉红色的衣身把肌肤衬托得很白嫩又健康。

保持一直了,两个文件是一模一样的,不知道是哪个步骤出错了,头疼会不会是我的peft板本问题,我的是0.6.2

zollty commented 9 months ago

@baijingtao 我猜测是提问和训练的数据关联性不够,或者特征不明显,导致没有匹配到训练的那部分模型权重。所以微调那一丁点的合并权重,并不足以改变原模型,所以并没有起到明显作用。

baijingtao commented 9 months ago

@baijingtao 我猜测是提问和训练的数据关联性不够,或者特征不明显,导致没有匹配到训练的那部分模型权重。所以微调那一丁点的合并权重,并不足以改变原模型,所以并没有起到明显作用。

可是我提问是完全复制的训练数据中的问题,会不会是合并的时候出现了某些差错呢

zollty commented 9 months ago

@baijingtao 我猜测是提问和训练的数据关联性不够,或者特征不明显,导致没有匹配到训练的那部分模型权重。所以微调那一丁点的合并权重,并不足以改变原模型,所以并没有起到明显作用。

可是我提问是完全复制的训练数据中的问题,会不会是合并的时候出现了某些差错呢

可以不合并,直接用。你试试:https://github.com/ymcui/Chinese-LLaMA-Alpaca-2/wiki/inference_with_transformers_zh#使用lora模型

baijingtao commented 9 months ago

训练好得lora模型的adapter_config.json 文件下面有下面两个参数么(下图红框) l5 这两个参数删掉就可以正常合并,运行,不删掉就会报错 LoraConfig.init() got an unexpected keyword argument 'enable_lora'
说不认识这两个参数

baijingtao commented 9 months ago

问题已解决,是因为peft版本过高,原来用的是0.6.2 ,后降低为0.5.0可以成功 感谢 @zollty @ymcui @

baijingtao commented 9 months ago

@ymcui Chinese-LLaMA-Alpaca-2指令精调合并lora后感觉回答的内容没有以前多了,请问这个大概是什么原因引起的呢,是因为我精调的内容太少么

ymcui commented 9 months ago

@ymcui Chinese-LLaMA-Alpaca-2指令精调合并lora后感觉回答的内容没有以前多了,请问这个大概是什么原因引起的呢,是因为我精调的内容太少么

你是指回复长度变短了是吗?这个和你的训练数据有关。如果你的训练数据就是很短的,那么模型也会拟合你数据的回复偏好。如需回复更长:1)显示地使用prompt告诉模型需要生成更长的回复;2)加长训练数据的回复长度。

baijingtao commented 9 months ago

拉拉 来乐 @ymcui 这是原模型和合并精调后lora后的模型对同样问题的回复,我的lora模型会影响到原模型是因为精调训练数据,还是因为有参数可以控制么,请大佬赐教

ymcui commented 9 months ago

拉拉 来乐 @ymcui 这是原模型和合并精调后lora后的模型对同样问题的回复,我的lora模型会影响到原模型是因为精调训练数据,还是因为有参数可以控制么,请大佬赐教

我在上一条回复中已经提到了。如果你的训练数据很短,那你训出来的模型也是倾向于回复的短。调超参或者prompt只能是缓解,不是根本原因。

baijingtao commented 9 months ago

拉拉 来乐 @ymcui 这是原模型和合并精调后lora后的模型对同样问题的回复,我的lora模型会影响到原模型是因为精调训练数据,还是因为有参数可以控制么,请大佬赐教

我在上一条回复中已经提到了。如果你的训练数据很短,那你训出来的模型也是倾向于回复的短。调超参或者prompt只能是缓解,不是根本原因。

谢谢大佬解答,我还有一些疑惑,lora不是冻结了原模型的权重参数,是额外增价的新的网络层,按理说应该是不影响原模型情况下增加了扩展,我这么理解是不对的么,合并lora为什么会影响到原来的模型呢 ?

ymcui commented 9 months ago

拉拉 来乐 @ymcui 这是原模型和合并精调后lora后的模型对同样问题的回复,我的lora模型会影响到原模型是因为精调训练数据,还是因为有参数可以控制么,请大佬赐教

我在上一条回复中已经提到了。如果你的训练数据很短,那你训出来的模型也是倾向于回复的短。调超参或者prompt只能是缓解,不是根本原因。

谢谢大佬解答,我还有一些疑惑,lora不是冻结了原模型的权重参数,是额外增价的新的网络层,按理说应该是不影响原模型情况下增加了扩展,我这么理解是不对的么,合并lora为什么会影响到原来的模型呢 ?

这个理解不是很准确。LoRA相当于在原模型(base)的基础上学习一个增量信息,但你不能简单地认为这个增量信息和原来的模型是独立的(不像积木一样,组件之间互不干涉)。因为最终决策还是要base+lora,所以两者是统一的整体。

baijingtao commented 9 months ago

拉拉 来乐 @ymcui 这是原模型和合并精调后lora后的模型对同样问题的回复,我的lora模型会影响到原模型是因为精调训练数据,还是因为有参数可以控制么,请大佬赐教

我在上一条回复中已经提到了。如果你的训练数据很短,那你训出来的模型也是倾向于回复的短。调超参或者prompt只能是缓解,不是根本原因。

谢谢大佬解答,我还有一些疑惑,lora不是冻结了原模型的权重参数,是额外增价的新的网络层,按理说应该是不影响原模型情况下增加了扩展,我这么理解是不对的么,合并lora为什么会影响到原来的模型呢 ?

这个理解不是很准确。LoRA相当于在原模型(base)的基础上学习一个增量信息,但你不能简单地认为这个增量信息和原来的模型是独立的(不像积木一样,组件之间互不干涉)。因为最终决策还是要base+lora,所以两者是统一的整体。

懂了,谢谢您。如果我增强我精调训练数据长度,比如回答增加到100字以上,模型拟合了我的倾向,那如果我想让模型回答更多的字数,那还要进一步再增长回复么,有其他更优雅的方式么,对此您有什么建议么?

baijingtao commented 9 months ago

@ymcui 多有打扰,深表歉意,再次咨询下,咱们合并lora的时候有提供可以控制lora的权重参数,或者代码里有这块逻辑么,比如推理的时候base80% ,lora 20% 这样使lora对base模型的影响变小一些

ymcui commented 9 months ago

@ymcui 多有打扰,深表歉意,再次咨询下,咱们合并lora的时候有提供可以控制lora的权重参数,或者代码里有这块逻辑么,比如推理的时候base80% ,lora 20% 这样使lora对base模型的影响变小一些

你这样操作不能保证lora会按相应系数进行衰减。建议你还是学习一下lora的基础知识,这样有助于进一步理解lora和base模型之间的关系。

baijingtao commented 9 months ago

@ymcui 多有打扰,深表歉意,再次咨询下,咱们合并lora的时候有提供可以控制lora的权重参数,或者代码里有这块逻辑么,比如推理的时候base80% ,lora 20% 这样使lora对base模型的影响变小一些

你这样操作不能保证lora会按相应系数进行衰减。建议你还是学习一下lora的基础知识,这样有助于进一步理解lora和base模型之间的关系。

谢谢回复,请问有推荐得学习资料么,我现在有点蒙了

baijingtao commented 9 months ago

@ymcui 清问Chinese-LLaMA-Alpaca-2可以先根据自己业务的领域做预训练 ,然后在做指令精调么,这样效果会不会更好一些

ymcui commented 9 months ago

@ymcui 清问Chinese-LLaMA-Alpaca-2可以先根据自己业务的领域做预训练 ,然后在做指令精调么,这样效果会不会更好一些

效果是受多方面因素影响的,所以还请自行尝试。这不属于正确性相关的问题,无法给出明确回复。

qaz2709 commented 8 months ago

loss收敛了吗?我用了四条指令精调alpaca模型,跑了几次实验。 1 一个epoch也是无任何效果, 2 训练的epoch改成了800,loss为0(实际上40的时候就收敛了)。然后就完全过拟合了数据。无论什么输入都是相同的输出 3 改为6epoch后,loss没有降到0,但是模型已经在我想要的指令上给了我想要的结果。不过也对其他指令效果有损失。

Kris-rod commented 8 months ago

问题已解决,是因为peft版本过高,原来用的是0.6.2 ,后降低为0.5.0可以成功 感谢 @zollty @ymcui @

你好,我遇到了和你一样的问题,给定数据去做指令精调也合并的模型,但是没有任何效果,我的peft版本就是0.50.0,但模型对于我的回答仍旧没有效果,我使用的是web交互版本的界面。能否给予解答一下呢,万分感激。

github-actions[bot] commented 8 months ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your consideration.

github-actions[bot] commented 8 months ago

Closing the issue, since no updates observed. Feel free to re-open if you need any further assistance.