# GLM-130B 训练日志

## 模型信息

- 130B：70 layers，12288 hidden size，32768 ffn hidden size, 150000 vocab size
   - MP = 4, PP = 8
- GLM + Rotary Positional Embedding + GeGLU + DeepNorm
- FP32 softmax with QKV scaling（no PB-Relax）
- Shrink embedding gradient with $\alpha=0.1$
- Global batch size: 4224

## 环境版本

- PyTorch 1.11 / CUDA 11.3
- LargeScale@400893da37bb5cbe22c29e41c02a052369cc72ce
- DeepSpeed 0.6.1
- apex@master

## 测速

- 96 nodes, BSZ=176 * 24=4224
   - glm-130B-2022.05.05-19:34:16：134TFLOPS, 88.5s/iter, 48samples/s,
- 96 nodes, BSZ=256 * 24=6144
   - glm-130B-2022.05.05-19:43:13：141TFLOPS, 122.5s/iter, 50samples/s

## 2022-05-06 04:00 开始训练

- glm-130B-2022.05.05-19:53:15

## 2022-05-07 20:14 节点故障

坏掉 n30041, n30157 两个点，更改保存间隔为 100step，从 4000 step 开始训练

- glm-130B-2022.05.07-13:44:59

## 2022-05-10 00:00 提升 alpha

加入 `--shrink-embedding-gradient-steps 6000 500` 从 6000 step 开始训练

- glm-130B-2022.05.09-16:02:04

## 2022-05-11 12:13 节点故障

坏掉 n30115 节点，从 7300 step 开始训练

- glm-130B-2022.05.11-05:55:32

## 2022-05-20 00:03 节点故障

坏掉 n30066 节点，从 15400 step 开始训练

- glm-130B-2022.05.19-19:56:19

再换一批节点，从 15600 step 开始训练

- glm-130B-2022.05.20-01:58:57

## 2022-05-21 12:40 换节点

训练效率一直只有 127T 左右，怀疑之前加入的 n30076 存在问题，踢出后从 16600 step 开始训练，似乎不解决问题。

## 2022-05-22 19:27 节点故障

n30126 失联

- glm-130B-2022.05.22-14:15:41

## 2022-05-26 04:30 节点故障

n30039 掉卡

- glm-130B-2022.05.25-22:23:12


## 2022-05-28 11:50 更换中英多任务数据（废除）

从 22800 开始训练，换中英多任务数据

- glm-130B-2022.05.28-03:52:26
- events.out.tfevents.1653709957.9droa42ltcad5-0.1858.0（移除）

## 2022-05-28 16:50 更换英文多任务数据（废除）

换新的多任务数据 22900 左右出现 nan，挂掉训练，检查发现中文多任务数据噪声极大，从 22800 换成平衡后的 t0 原始数据开始训练

- glm-130B-2022.05.28-09:18:12
- events.out.tfevents.1653729502.9droa42ltcad5-0.5648.0（移除）

## 2022-05-28 20:50 加入 warmup（废除）

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/C850748B-92A4-4F9F-932F-AD22330895D6_2/E8MboG8vrTTb2N51FRhkb6wsB4eyrD77USmM992obQgz/Image.png)

换上平衡后且不泄漏的 t0 原始数据开始训练仍然有问题，推测是平衡后一些任务占比变大，其实等价于加入新任务的情况，加入参数 `--warmup-samples-after-loading 2112000` warmup 500 步从 22800 开始训练

- glm-130B-2022.05.28-12:57:24
- events.out.tfevents.1653742654.9droa42ltcad5-0.7942.0（移除）

## 2022-05-29 01:30 再次爆炸，换纯文本（废除）

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/028DE014-00FE-4521-BEEB-EF3F61BB8DA1_2/mgYybTR1OLgPkBysqMiUgGYNyIg8OQnf1yXI66grBeMz/Image.png)

- warmup 以后还是炸了，分析可能是 distribution 变动仍然太过剧烈，先换纯文本 + reshuffle 尝试训练，从 22800 加载
- glm-130B-2022.05.28-18:05:33
- events.out.tfevents.1653761143.9droa42ltcad5-0.9744.0（废除）
- global_step23200_text
+ 配置文件

## 2022-05-29 逐渐修改数据分布（废除）

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/E2BC463F-E519-461E-B1B0-99551DA940BE_2/0ZqN22TLyqRTvqOy6JNLeixEy4TarDJEF7DOvdh3saIz/Image.png)

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/9C7AC4B3-59AB-471A-872E-41CCBAE7E90D_2/0rpEmyAOcIkLyDGR2R4RQiBeUwbWIWiaHbHcwosx6yAz/Image.png)

文本似乎能稳定，那么尝试逐渐平滑修改数据分布， 从 22800 开始，逐渐修改数据分布到 t0 平衡数据

- glm-130B-2022.05.29-05:17:06
- events.out.tfevents.1653801436.9droa42ltcad5-0.13868.0（废除）

## 2022-05-29 22:40 逐渐修改数据分布并全面 warmup

- 又挂了，分析可能是换新分布学习率也需要 warmup

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/F5532A86-3AAC-4CCE-AC9B-A976B7736D7F_2/M4JZx5GYzNPuysPHXrn0R5Oo54rBhDwQxdErkOpFOhEz/Image.png)

- 从 22800 开始训练，数据和 lr 都 warmup 2000 步，shrink embbeding graident 从 0.2 warmup 6000 步到 1
- glm-130B-2022.05.29-17:35:45

## 2022-05-30 14:00 挂节点

更改了一下参数配置，发现之前 shrink embedding 的步数写错了（26850 步），现在改成 6000 步。升级了一下 lr auto warmup 的逻辑，写成绝对 samples 数量。从 global_step23200 开始

我们发现这次训练卡在了数据加载，排查后发现是 Lustre 文件系统的故障，导致 2.3T 文本数据读不出来，且工程师无法修复；最终重新从移动硬盘拷贝了一次数据

- glm-130B-2022.05.31-02:18:24

## 2022.05.03 20:00 加 DeepStruct 数据

- 维持原有 transform 过程不变，但直接加入 DeepStruct 数据，从 23500 开始

## 2022-06-01 22:22 换清洗数据

之前的多任务数据 t0 和 deepsturct 各有一个任务的 target 异常，重新清洗后更换，从 24500 开始

- glm-130B-2022.06.01-14:24:33

## 2022-06-02 12:00 节点故障

- n30145 CPU 故障，从 25000 重启训练，lr 和 数据集已经 transfromer 完毕，所以配置直接去掉 warmup
- glm-130B-2022.06.02-04:35:05

## 2022-06-02 09:30 加入 multitask loss 打印

25800steps 开始，加入 multitask loss 打印

- glm-130B-2022.06.03-01:40:12

## 2022-06-02 15:00 降低学习率，加入 gpt/bert loss 打印

loss 降低比较慢，讨论可能是学习率太大了，26000steps 开始，学习率砍半

- glm-130B-2022.06.03-07:26:16

## 2022-06-06 17:00 集群维护

集群从 9 点到 5 点升级驱动，从  开始训练

- glm-130B-2022.06.06-10:00:39

PS：观察到共享文件系统读取速度显著改善，现在加载 ckpt 几乎只需要 1 分钟

## 2022-06-08 08:00 坏点

- glm-130B-2022.06.08-00:00:37

## 2022-06-09 13:30 训练卡住

23100 开始恢复

- glm-130B-2022.06.09-05:27:54

## 2022-06-12 10:00 loss 爆炸

33700 开始 loss 炸了，loss-scale 在 33710 左右突然下跌然后 loss 在 33740 左右爆炸

- tensorboard 记录：glm-130B-33700

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/C46C7CFE-1B79-491C-90FC-5A88AE90E9DF_2/7ICMyH8v6GhAgngz5bVaDKwzYjFPyk99Ax27R5w56wMz/Image.png)

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/E56BCDE0-C798-429F-81E0-1A07CCB9BC0E_2/Ig2rfKnPmLadg39Jc38UEdK90LDxlAxoH0AxmAygxzAz/Image.png)

- 从 33600 开始加载，shrink embedding gradient 1 → 0.5
- glm-130B-2022.06.12-02:20:49

## 2022-06-14 03:00 loss 爆炸

35250 loss 又炸了，和 33700 的表现几乎一样，都是完全没有征兆突然爆炸

tensorboard 记录：glm-130B-35250

- 从 35200 开始加载，shrink embedding gradient 0.5 → 0.1
- glm-130B-2022.06.14-02:28:21

## 2022-06-19 00:10 节点故障

n30085 挂了，从 39600 恢复

- glm-130B-2022.06.18-17:49:53

## 2022-06-20 09:10 loss 爆炸

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/CA344108-3B01-469C-9ABE-C41002F76484_2/oEvBST5MP0I7S4qHmQUeE7DoPCsGFSrveAOOSyitSUwz/Image.png)

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/FED0DE40-A710-4259-AE98-26BCB9568C7A_2/kH4FijsPDVJFzkbaxz7BiX0RZrul1Wrye6cE5EV8ZG0z/Image.png)

- tensorboard 记录：glm-130B-40800
- `--skip-train-iteration-range 40701-40900`
- 从 40700 开始重新加载并跳过 40701-40900 数据
- glm-130B-2022.06.20-03:36:13

## 2022-06-22 10:40 梯度 spike

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/0B7E0A0C-4B11-4F52-BF10-E6B11A533BEF_2/yb1zC07di9zux8jbAi15gpqlstGHXZyjyMBEjO0gNKUz/Image.png)

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/A8DAC1A6-2A03-489A-8A11-BFAFFFEE3905/1C60424A-0290-4070-9327-DF9DFD135020_2/XyVoPs1yMLIuzUyrDixSYfgjc2Y2Nuor20GCz0nSPkAz/Image.png)

- grad 有点小 spike，看起来后续恢复了，但 loss 似乎遇到了比较大的波动
- `--skip-train-iteration-range 40701-40900`
- 从 42400 开始重新加载并跳过 42401-42600 数据
- glm-130B-2022.06.22-02:38:20

## 2022-06-22 21:00 梯度 spike

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/E406CC41-4180-4108-BCCF-5E727CEB8F09/1D7D801C-3226-4CB0-978C-F19B4DA46721_2/nmg9r87OFrdErZvY9xjiDIHvgPVLv39vy8ZVtGkj2H0z/Image.png)

![Image.png](https://res.craft.do/user/full/97ed555f-7125-cca2-fd7d-9f1a0585132e/doc/E406CC41-4180-4108-BCCF-5E727CEB8F09/5F5CA3D6-AF58-4087-9806-1529D3A2EF6C_2/WSQqyBdv1rvzvNloXE6Ssql7GxMDoULU38FAQCv3778z/Image.png)

- grad 又有 spike，但是 loss-scale 没有一降到底，推测应该可以恢复
- 这几天的反复 spike，我们分析可能是后期 learning rate 降低太慢，将 min-lr 从 8e-6 调整到 4e-6
- `--min-lr 4e-6`
- 从 42700 加载开始训练
- glm-130B-2022.06.22-13:03:53

## 2022.06.26 16:00 节点故障

- 节点 NVLink Error，重启训练
- glm-130B-2022.06.26-13:13:51

## 2022.06.29 00:00 恢复 position_id

- 48100 从原先配置开始训练
- glm-130B-2022.06.29-13:53:21
