ChatGLM-6B
ChatGLM-6B copied to clipboard
请问大佬如何对ChatGLM-6B做多次P-tuning
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 我们可以在脚本中使用以下命令来实现断点继续微调。
--resume_from_checkpoint YOUR_CHECKPOINT_PATH
我感到非常困惑,在官方的文档中找不到这个参数的相关描述。但我是从ptuing/train.py
的train()
方法得到启发的。
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
中添加了它,实验证明它确实从指定断点路径中载入了先前的训练参数。
希望能够帮到您!
ptuing/train.py
line133: if model_args.ptuning_checkpoint is not None:
你只需要在main.py添加--ptuning_checkpoint /path/to/checkpoint/ 就可以继续ptuning了