README.md 4.77 KB
Newer Older
liangjing's avatar
update  
liangjing 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# LLAMA & LLAMA2

## 论文
```
LLaMA: Open and Efficient Foundation Language Models
```

**-** [https://arxiv.org/abs/2302.13971](https://arxiv.org/abs/2302.13971)

```
Llama 2: Open Foundation and Fine-Tuned Chat Models
```

**-** [https://arxiv.org/abs/2307.09288](https://arxiv.org/abs/2307.09288)

## 模型结构
LLaMA,这是一个基础语言模型的集合,参数范围从7B到65B。在数万亿的tokens上训练出的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而不依赖于专有的和不可访问的数据集。特别是,llama 13B在大多数基准测试中优于GPT-3 (175B), LLaMA 65B与最好的模型Chinchilla-70B和PaLM-540B具有竞争力。LLAMA网络基于 Transformer 架构。提出了各种改进,并用于不同的模型,例如 PaLM。
LLaMA2相较于LLaMA采用了更强大的数据清洗、更多的tokens训练、加倍的上下文长度,并支持了Grouped-query attention (GQA),即允许在多头注意力(MHA)模型中共享键和值投影,从而减少与缓存相关的内存成本的优化方法。通过使用 GQA,更大的模型可以在优化内存使用的同时保持性能。

![img](./llama模型结构.png)


## 算法原理
以下是与原始 Transformer 架构的主要区别:

**预归一化**。为了提高训练稳定性,对每个transformer 子层的输入进行归一化,而不是对输出进行归一化。使用 RMSNorm 归一化函数。

**SwiGLU 激活函数 [PaLM]**。使用 SwiGLU 激活函数替换 ReLU 非线性以提高性能。使用 2 /3 4d 的维度而不是 PaLM 中的 4d。

**旋转嵌入**。移除了绝对位置嵌入,而是添加了旋转位置嵌入 (RoPE),在网络的每一层。

![img](./llama算法原理.png)
## 环境配置
以下将以llama2-7B及llama2-13B基于K100_AI以镜像方式运行测试为例进行介绍;

### docker
1、基准镜像拉取准备

关于本项目DCU显卡所需的镜像可从光合开发者社区拉取
https://developer.hpccube.com/tool/,基于该镜像进行个人镜像创建操作

```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-centos7.6-dtk24.04-py310
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=80G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
```

2、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装:
https://developer.hpccube.com/tool/

```
DTK驱动:dtk24.04
python:python3.10
DAS1.0:
torch:2.1.0
torchvision:0.16.0
torchaudio:2.1.2
deepspeed:0.12.3
apex:1.1.0
flash_attn:2.0.4
triton:2.1.0
lightop:0.3
Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应
```
3、其它非特殊库参照requirements.txt安装

```
pip3 install -r requirements.txt
```
## 数据集

数据可按需进行自行准备,项目中已提供用于试验训练的数据集,因数据较大,已压缩至./dataset/my-llama_text_document.tar.gz,请解压后自行放至合适位置,并按数据位置修改single.sh_xx,具体可见训练步骤,训练数据目录结构如下,用于正常训练的完整数据集请按此目录结构进行制备:
```
dataset
    |my-llama_text_document.bin
    |my-llama_text_document.idx
```
## 训练
### 作业提交

通过mpirun进行测试提交,运行相应参数均位于single.sh_xx,可按实际需要进行相应修改,列举如下,目前默认参数为实测推荐参数,注意到该参数配置是基于K100_AI给出,如在其他平台运行,请按需修改:

```
# Change the below configurations here
BASE_PATH=./tmp
DS_CONFIG=${BASE_PATH}/deepspeed.json
DATASET_1="./dataset/my-llama_text_document"
DATASET="1 ${DATASET_1}"
CHECKPOINT_PATH=./tmp
TOKENIZER_PATH=./tokenizer.model
export HIP_PRINTF_DEBUG_FOR_FP64=0

TP=1
PP=4
ZERO_STAGE=1

HIDDEN_SIZE=4096
FFN_HIDDEN_SIZE=11008
NUM_LAYERS=32
NUM_HEADS=32
SEQ_LENGTH=4096
NUM_KV_HEADS=32

MICRO_BATCH_SIZE=1
GLOBAL_BATCH_SIZE=60
TRAIN_STEPS=250000
LR=3e-4
MIN_LR=3e-5
LR_WARMUP_STEPS=2000
WEIGHT_DECAY=0.1
GRAD_CLIP=1
......
```

修改好之后,可按下述方式进行作业提交

```
cd megatron-deepspeed-llama2
chmod u+x single.sh_7b_bf16
chmod u+x single.sh_13b_bf16
#llama2-7b
mpirun -np 4 --allow-run-as-root ./single.sh_7b_bf16 localhost 
#llama2-13b
mpirun -np 8 --allow-run-as-root ./single.sh_13b_bf16 localhost
```
## 

## 应用场景
### 算法类别
```
自然语言处理
```

### 热点应用行业
```
医疗,教育,科研,金融
```

## 源码仓库及问题反馈
- https://developer.hpccube.com/codes/modelzoo/megatron-deepspeed-llama2
## 参考资料
- https://github.com/bigscience-workshop/Megatron-DeepSpeed

- https://www.deepspeed.ai/getting-started/

- https://deepspeed.readthedocs.io/en/latest/index.html