README.md 2.84 KB
Newer Older
zhaoying1's avatar
zhaoying1 committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# ChatGLM3-6B-base 微调示例

本目录提供 ChatGLM3-6B-base 模型的微调示例,目前,仅包含了Lora微调。

如果将模型下载到了本地,本文和代码中的 `THUDM/chatglm3-6b-base` 字段均应替换为相应地址以从本地加载模型。

运行示例需要 `python>=3.10`,除基础的 `torch` 依赖外,示例代码运行还需要依赖 

```bash
pip install requirements.txt
```
## 多轮对话格式

`base`模型不具备对话能力,仅能够生成单轮回复。如果你希望使用多轮对话模型,使用`Chat`模型进行微调。


## 数据集要求

格式上,请使用`alpaca`数据集。

```bash

{"context": "hello", "target": "hi,I am ChatGLM3"}

```
其中,`context`是对话的上文,也就是模型的输入,`target`是对话的下文,也就是模型的输出。

## 微调模型

以下脚本提供了微调模型的参考方式。
```bash
./scripts/finetune_lora.sh  # 使用Lora微调
```

### 提示

1. 微调代码在开始训练前,会先打印首条训练数据的预处理信息,显示为

    ```log
    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` 是否符合预期。若不符合,可能需要调整代码或数据。
2. 参考显存用量
   - 按照官方脚本的默认参数运行,每一张显卡占用显存为 `23GB`
3. 若尝试后发现显存不足,可以考虑
    - 尝试降低 `DEV_BATCH_SIZE` 并提升 `GRAD_ACCUMULARION_STEPS`
    - 尝试降低 `MAX_SEQ_LEN`,但是这可能会影响模型的性能

## 注意事项
+ 基座模型不具备对话能力,仅能够生成单轮回复。如果你希望使用多轮对话模型,使用Chat模型进行微调。
+ 请注意,运行本脚本,你还需要安装本目录下的 `requirements.txt` 中的所有内容。