ChatGLM-6B icon indicating copy to clipboard operation
ChatGLM-6B copied to clipboard

请问大佬如何对ChatGLM-6B做多次P-tuning

Open FuXiaoyang0715 opened this issue 1 year ago • 2 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

Current Behavior

一般来讲,就是准备自己的训练集、验证集和测试集来做一次Ptuning。然后在evaluate.sh中做推理即可。

Expected Behavior

那么现在就有一个需求,就是我想做多次微调,并且是在上一次微调的基础上再次做微调。比如第一次微调后,得到对应的第一次的checkpoints,当然此时模型原有的权重都是冻结的,不变的。现在我想对一批新数据去在第一次微调后的结果上做二次微调,那么肯定也会得到二次微调后的checkpoints,模型本身的权重还是冻结的,多次微调则可以按照这样的方式进行多次,比如可以随时的输入文本来让模型不断地学习,其实也就是堆叠微调,在上一次的基础上去做微调,不断的微调,同时模型还应该掌握之前拥有的能力。 综上表述: 有以下几个问题 (1)二次微调如何在模型原本的已经具有的权重和一次微调后的权重上做? (2)如果在二次微调中因为特殊原因中断了,那么该怎么办,当然此时可能保留的有checkpoints1000,checkpoints2000等,但是中断导致checkpoints3000不见了

Steps To Reproduce

Environment

- OS:22.04
- Python:3.8
- Transformers:4.27.1
- PyTorch:1.12
- CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) :

Anything else?

No response

FuXiaoyang0715 avatar Oct 10 '23 06:10 FuXiaoyang0715

您好!@FuXiaoyang0715 我们可以在脚本中使用以下命令来实现断点继续微调。

--resume_from_checkpoint YOUR_CHECKPOINT_PATH

我感到非常困惑,在官方的文档中找不到这个参数的相关描述。但我是从ptuing/train.pytrain()方法得到启发的。

def train(
        self,
        resume_from_checkpoint: Optional[Union[str, bool]] = None,
        trial: Union["optuna.Trial", Dict[str, Any]] = None,
        ignore_keys_for_eval: Optional[List[str]] = None,
        **kwargs,
    )

我从函数的参数列表中得到了这个resume_from_checkpoint,并在train.sh中添加了它,实验证明它确实从指定断点路径中载入了先前的训练参数。 希望能够帮到您!

AkagawaTsurunaki avatar Oct 12 '23 01:10 AkagawaTsurunaki

ptuing/train.py line133: if model_args.ptuning_checkpoint is not None: 你只需要在main.py添加--ptuning_checkpoint /path/to/checkpoint/ 就可以继续ptuning了

Li-jiaxian avatar Oct 23 '23 10:10 Li-jiaxian