本目录提供 ChatGLM3-6B-base 模型的微调示例,目前,仅包含了Lora微调。
如果将模型下载到了本地,本文和代码中的 THUDM/chatglm3-6b-base
字段均应替换为相应地址以从本地加载模型。
运行示例需要 python>=3.10
,除基础的 torch
依赖外,示例代码运行还需要依赖
pip install requirements.txt
base
模型不具备对话能力,仅能够生成单轮回复。如果你希望使用多轮对话模型,使用Chat
模型进行微调。
格式上,请使用alpaca
数据集。
{"context": "hello", "target": "hi,I am ChatGLM3"}
其中,context
是对话的上文,也就是模型的输入,target
是对话的下文,也就是模型的输出。
以下脚本提供了微调模型的参考方式。
./scripts/finetune_lora.sh # 使用Lora微调
-
微调代码在开始训练前,会先打印首条训练数据的预处理信息,显示为
Sanity Check >>>>>>>>>>>>> '[gMASK]': 64790 -> -100 'sop': 64792 -> -100 '<|system|>': 64794 -> -100 '': 30910 -> -100 '\n': 13 -> -100 'Answer': 20115 -> -100 'the': 267 -> -100 'following': 1762 -> -100 ... 'know': 683 -> -100 'the': 267 -> -100 'response': 3010 -> -100 'details': 3296 -> -100 '.': 30930 -> -100 '<|assistant|>': 64796 -> -100 '': 30910 -> 30910 '\n': 13 -> 13 'I': 307 -> 307 'need': 720 -> 720 'to': 289 -> 289 'use': 792 -> 792 ... '': 0 -> -100 '': 0 -> -100 (有若干个) <<<<<<<<<<<<< Sanity Check
字样,每行依次表示一个 detokenized string, token_id 和 target_id。可在日志中查看这部分的
loss_mask
是否符合预期。若不符合,可能需要调整代码或数据。 -
参考显存用量
- 按照官方脚本的默认参数运行,每一张显卡占用显存为
23GB
。
- 按照官方脚本的默认参数运行,每一张显卡占用显存为
-
若尝试后发现显存不足,可以考虑
- 尝试降低
DEV_BATCH_SIZE
并提升GRAD_ACCUMULARION_STEPS
- 尝试降低
MAX_SEQ_LEN
,但是这可能会影响模型的性能
- 尝试降低
- 基座模型不具备对话能力,仅能够生成单轮回复。如果你希望使用多轮对话模型,使用Chat模型进行微调。
- 请注意,运行本脚本,你还需要安装本目录下的
requirements.txt
中的所有内容。