File size: 1,645 Bytes
8f8a944
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
## 功能说明

### 已支持的功能

- 保存 DeepSpeed Checkpoint 至 CEPH
- 从 Ceph 上的 DeepSpeed Checkpoint 续训
- `pth_to_hf` 支持 Ceph 上的 DeepSpeed Checkpoint

### 暂不支持的功能

- 训练时从 Ceph 加载 Huggingface 模型, 与 `zero3` 加载权重冲突
- HuggingFace `save_pretrained` 保存至 Ceph, 逻辑过于复杂,没办法 patch

## 使用说明

#### 1. 验证 ceph 环境

使用前需确保 `petrel sdk` 可用,并且要使用的 Ceph bucket 存在且可用

验证 `aws` 命令行工具

```bash
# 验证 aws 命令行工具
aws s3 ls $YOUR_BUCKET
```

验证 `petrel sdk`

```python
bucket = 's3://xxx'

from mmengine import get_file_backend
backend = get_file_backend(bucket)

for f in backend.list_dir_or_file(bucket):
    print(f)
```

#### 2. 训练时保存 Checkpoint 至 Ceph

`XTuner` 根据环境变量 `DS_CEPH_DIR` 来判断是否将 checkpoint 保存至 ceph

```bash
DS_CEPH_DIR=s3://xxxx srun ${SRUN_ARGS} xtuner train $CONFIG --launcher slurm
```

#### 3. 从 Ceph 上的 Checkpoint 续训

Resume 时,要填写 checkpoint 在 ceph 上的完整路径

```bash
DS_CEPH_DIR=s3://xxxx srun ${SRUN_ARGS} xtuner train $CONFIG --launcher slurm --resume s3://xxx/yyy/epoch_x.pth
```

#### 4. 将 Ceph 上的 Checkpoint 转换为 HF 模型

不支持 `$HF_DIR` 为 ceph 路径

由于 Checkpoint 中存储了优化器状态,加载比较耗时,对于 ZeRO 1&2 可以直接加载 checkpoint 中的 `model_states.pt` 文件加速转换过程;ZeRO 3 必须先加载整个 checkpoint

```bash
srun ${SRUN_ARGS} xtuner convert pth_to_hf $CONFIG s3://xxx/yyy/epoch_x.pth $HF_DIR

```