GithubHelp home page GithubHelp logo

Comments (28)

valkryhx avatar valkryhx commented on July 27, 2024 1

我是把device_map=auto 注释掉了 @Macvh

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024

支持,用的zero2

from medicalgpt.

valkryhx avatar valkryhx commented on July 27, 2024

昨天拜读了大佬的代码,我改了一下supervise_finetune.py 代码, 也可以支持ZERO stage 3。
在kaggle的双T4下也能跑 batch_size =4 的微调过程了。

from medicalgpt.

valkryhx avatar valkryhx commented on July 27, 2024

另外,我看到 supervised_finetuning.py 里 183行 有 peft_path 参数,
这个参数 是用于增量微调吗?
比如微调训练时传入 --peft_path ./lora_checkpoint_1000
那么 微调会继续修改这个lora小模型的参数 就像继续训练一样
是这样理解吗?

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024

另外,我看到 supervised_finetuning.py 里 183行 有 peft_path 参数, 这个参数 是用于增量微调吗? 比如微调训练时传入 --peft_path ./lora_checkpoint_1000 那么 微调会继续修改这个lora小模型的参数 就像继续训练一样 是这样理解吗?

是的,用于中断后,恢复训练用的。

from medicalgpt.

Macvh avatar Macvh commented on July 27, 2024

昨天拜读了大佬的代码,我改了一下supervise_finetune.py 代码, 也可以支持ZERO stage 3。 在kaggle的双T4下也能跑 batch_size =4 的微调过程了。

@valkryhx 请问大佬是怎么更改supervise_finetune.py的代码,我直接将deepspeed_config.json中的stage修改为3运行, 报下面这个错误:
DeepSpeed Zero-3 is not compatible with low_cpu_mem_usage=True or with passing a device_map

from medicalgpt.

valkryhx avatar valkryhx commented on July 27, 2024

另外,我看到 supervised_finetuning.py 里 183行 有 peft_path 参数, 这个参数 是用于增量微调吗? 比如微调训练时传入 --peft_path ./lora_checkpoint_1000 那么 微调会继续修改这个lora小模型的参数 就像继续训练一样 是这样理解吗?

是的,用于中断后,恢复训练用的。

请问大佬,train_loss 一般到多少算收敛了,我有个5000条的数据集,训练大概15轮,train_loss 到0.2左右,
但是感觉没学习到新的知识。

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024

不同的base model 的loss收敛不同,也与数据质量有关。

chatglm, loss 到1.3;
llama-plus-7b, loss 到1.5

from medicalgpt.

valkryhx avatar valkryhx commented on July 27, 2024

不同的base model 的loss收敛不同,也与数据质量有关。

chatglm, loss 到1.3; llama-plus-7b, loss 到1.5

感觉为了避免灾难性遗忘的问题 学习率是不是不能太高,比如使用1e-5 这种,能让loss下降到0.1,但是感觉sft轮次多了又会影响原始参数的分布,大佬有没有微调超参数的指导建议?谢谢您。

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024

我写过一个答疑:https://blog.csdn.net/mingzai624/article/details/130735366?spm=1001.2014.3001.5502

from medicalgpt.

valkryhx avatar valkryhx commented on July 27, 2024

我写过一个答疑:https://blog.csdn.net/mingzai624/article/details/130735366?spm=1001.2014.3001.5502

感谢您的指导!拜读了您的这篇博文,确实干货满满。有两个问题想请教您:
1.
文中所述的 二次预训练的数据格式
[
{
"content":"中华人民共和国最高人民法院 驳 回 申 诉 通 知 书(2022)最高法刑申122号 袁某银、袁某财:你们因原审被告人袁德银故意伤害一案,对江苏省南京市溧水.....
}
]

以及SFT阶段对话类数据格式

{"prompt": "是的。上下水管都好的", "response": "那就要检查线路了,一般风扇继电器是由电脑控制吸合的,如果电路存在断路,或者电脑坏了的话会出现继电器不吸合的情况!", "history": [["长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线", "用电脑能读数据流吗?水温多少"], ["95", "上下水管温差怎么样啊?空气是不是都排干净了呢?"]]}

这两种是LLAMA数据格式吗?在 MedicalGPT项目中使用这两种格式的输入分别对chatGLM2-6B模型进行增量预训练和对话SFT时,是否需要处理一下数据格式?

另外,我在文中看到LORA权重和原始模型参数合并的说法,这个是指直接使用LORA权重与原始模型的att层做加法吗? 类似如下代码的行为:
model = AutoModel... # base model # set load_in_8bit to False
for peft_model_id in peft_model_ids:
model = PeftModel.from_pretrained(model, peft_model_id)
model = model.merge_and_unload()

谢谢!

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024
  1. PT(预训练)的格式就是正常的百科文本;SFT的指令数据集分2种,单轮对话和多轮对话的,MedicalGPT当前只实现了单轮对话微调,多轮对话的微调在我写的另一个库 https://github.com/shibing624/textgen/blob/main/examples/gpt/training_llama_mydata_demo.py 中有实现,多轮训练集样本格式是 https://github.com/shibing624/textgen/blob/main/examples/data/json_files/multi_round_alpaca.json
  2. lora权重合并很简单,就把lora的权重参数赋值给base model 对应的dense层,具体实现参考peft的merge_and_unload方法

from medicalgpt.

valkryhx avatar valkryhx commented on July 27, 2024

感谢!

from medicalgpt.

valkryhx avatar valkryhx commented on July 27, 2024
  1. multi_round_alpaca.json

我看了您提供的多轮对话数据格式 multi_round_alpaca.json
,这种格式实际上和本项目SFT所用数据集格式一致,仍然是instruction-input-output三要素,
感觉可以直接用本项目的SFT代码进行对话微调了。

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024

需要mask掉labels里面的instruction,textgen里面写了,MedicalGPT还没写。

from medicalgpt.

valkryhx avatar valkryhx commented on July 27, 2024

大佬好 ,我看项目中run_sft.sh 启动训练时用到了 --weight_decay 0.05 参数 ,我把weight_decay设置为0,按理说LR不该下降。但是训练过程中仍然观察到LR 持续按照5%比例下降的情况,感觉参数没有生效?

我在项目的supervised_finetune.py 文件中没有看到weight_decay 的使用。请问这个参数是如何生效的?

我看了huggingface的Trainer类说明 ,https://huggingface.co/transformers/v4.2.2/main_classes/trainer.html
里面默认设定是 如果不向Trainer传入weight_decay , 那这个参数默认就是0.0 。
由于训练脚本中没有看到该参数的特别设定,是否可以启动训练脚本时不传入该参数, 从而让其默认为0.0呢?

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024
  1. weight_decay是权重衰减,跟lr有啥关系?
  2. 想指定为0,指定就可以了--weight_decay 0

from medicalgpt.

valkryhx avatar valkryhx commented on July 27, 2024
  1. weight_decay是权重衰减,跟lr有啥关系?
  2. 想指定为0,指定就可以了--weight_decay 0

确实如您所述,weight_decay 是L2正则项惩罚系数的一种,是我把它和lr_schedule_type弄混了。

另外,我看到您在项目中提到了华佗数据集,https://huggingface.co/datasets/FreedomIntelligence/HuatuoGPT-sft-data-v1/viewer/FreedomIntelligence--HuatuoGPT-sft-data-v1/train?row=0。

我看了下其中是以大部分是一问一答的形式, 也有少部分多轮对话的形式。对于问1_答1_问2_答2_...问N_答N 这种多轮对话语料,处理方式是否是 将【问1_答1_问2_答2_...问N】 拼接成 instruction , 将最后的【答N】作为output , 从而形成instruction-input(空)-output的标准alpaca格式呢?

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024
  1. alpaca:可以拆成一问一答,每个问题一条;
  2. alpaca不能处理多轮问答,所以最好改为vicuna的数据组织方法,支持多轮问答。

from medicalgpt.

valkryhx avatar valkryhx commented on July 27, 2024
  1. alpaca:可以拆成一问一答,每个问题一条;
  2. alpaca不能处理多轮问答,所以最好改为vicuna的数据组织方法,支持多轮问答。

好的。 今天看到chatglm2-6b项目的modeling_chatglm.py更新了 ,用您的supervised_finetune.py ,使用torchrun 单机多卡的例子 运行开始出错。
ValueError: DistributedDataParallel device_ids and output_device arguments only
work with single-device/multiple-device GPU modules or CPU modules, but got
device_ids [0], output_device 0, and module parameters {device(type='cuda',
index=0), device(type='cuda', index=1)}.

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024

我还没试,如果出错试试旧的。

from medicalgpt.

zhr0313 avatar zhr0313 commented on July 27, 2024

我在改deepspeed训练的时候,出现了supervised_finetuning.py: error: argument --deepspeed: invalid typing.Dict value: 'deepspeed_config.json'的错误,但路径是对的,大佬们有遇到过这个问题吗?

MASTER_PORT=$(shuf -n 1 -i 10000-65535)

ds --num_gpus=2 --master_port $MASTER_PORT supervised_finetuning.py
--deepspeed deepspeed_config.json
--model_type chatglm \

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024

句尾加 \

from medicalgpt.

zhr0313 avatar zhr0313 commented on July 27, 2024

ds --num_gpus=2 --master_port $MASTER_PORT supervised_finetuning.py
--deepspeed deepspeed_config.json
--model_type chatglm
不好意思 有加的,刚复制应该出问题了,并没有解决bug

from medicalgpt.

zhr0313 avatar zhr0313 commented on July 27, 2024

好像是这个comment把\ 屏蔽了

from medicalgpt.

1106301825 avatar 1106301825 commented on July 27, 2024

大佬,请问您的问题解决了吗?我使用deepspeed运行run_pt.sh也出现了同样的问题:DeepSpeed Zero-3 is not compatible with low_cpu_mem_usage=True or with passing a device_map. @Macvh

from medicalgpt.

shibing624 avatar shibing624 commented on July 27, 2024

大佬,请问您的问题解决了吗?我使用deepspeed运行run_pt.sh也出现了同样的问题:DeepSpeed Zero-3 is not compatible with low_cpu_mem_usage=True or with passing a device_map. @Macvh

不兼容

from medicalgpt.

BoRao78 avatar BoRao78 commented on July 27, 2024

大佬,请问您的问题解决了吗?我使用deepspeed运行run_pt.sh也出现了同样的问题:DeepSpeed Zero-3 is not compatible with low_cpu_mem_usage=True or with passing a device_map. @Macvh

不兼容

您好,您的意思是目前无法使用DeepSpeed Zero-3运行增量预训练吗?
我也遇到了相同的报错,移除device map,设置empty_init=False后参数初始化异常,不知该如何处理。
模型是ChatGLM2-6B,Zero-2训练显存不足。

from medicalgpt.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.