"docs/git@developer.sourcefind.cn:change/sglang.git" did not exist on "773951548ddd2d9f98f062788bc1c13aecbcf66d"
README.md 6.59 KB
Newer Older
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
# LLAMA2 & LLAMA2 LoRA

## 论文
```
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)

```
LoRA: Low-Rank Adaptation of Large Language Models
```

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

```
LlamaFactory: Unified Efficient Fine-Tuning of 100+ Language Models
```

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

## 模型结构
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)


## 算法原理
zhaoying1's avatar
zhaoying1 committed
36
LoRA微调是一种高效模型微调方法,在LoRA训练过程中,固定预训练模型参数报吃不变,而在原本权重矩阵旁路添加低秩矩阵的乘积作为可训练参数,用以模拟参数的变化量。具体来说,假设预训练权重为$ W_0 \in \mathbb{R}^{d*k} $,可训练参数为$ \Delta W=BA$,其中$B  \in \mathbb{R}^{d*r} $,$A  \in \mathbb{R}^{r*d} $。初始化时,矩阵 $ A $通过高斯函数初始化,矩阵$ B $为
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
零初始化,使得训练开始之前旁路对原模型不造成影响,即参数改变量为 0。对于该权重的输入$X$来说,输出可以表示为:$h=W_0x+\Delta Wx=W_0x+BAx$。LoRA可以在缩减训练参数量和显存占用的同时,使训练后的模型具有与全量微调相当的性能。LoRA方法的计算流程如下图所示:

![img](./LoRA示意图.png)


## 环境配置

### Docker(方式一)
推荐使用docker方式运行,提供拉取的docker镜像:
```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-centos7.6-dtk24.04-py310
```

进入docker,安装docker中没有的依赖:
```
docker run -dit --network=host --name=llama2_lora --privileged --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=16G  --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root --ulimit stack=-1:-1 --ulimit memlock=-1:-1 -v /opt/hyhal/:/opt/hyhal/:ro image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-centos7.6-dtk24.04-py310 /usr/sbin/init
docker exec -it llama2_lora /bin/bash
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```

### Dockerfile(方式二)
```
docker build -t llama2_lora:latest .
docker run -dit --network=host --name=llama2_lora --privileged --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=16G  --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root --ulimit stack=-1:-1 --ulimit memlock=-1:-1 -v /opt/hyhal/:/opt/hyhal/:ro llama2_lora:latest
docker exec -it llama2_lora /bin/bash
```


### Conda(方法三)
1. 创建conda虚拟环境:
```
conda create -n llama2_lora python=3.10
```

2. 关于本项目DCU显卡所需的工具包、深度学习库等均可从[光合](https://developer.hpccube.com/tool/)开发者社区下载安装。
zhaoying1's avatar
zhaoying1 committed
72
- [DTK 24.04](https://cancon.hpccube.com:65024/1/main/DTK-24.04)
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
146
147
148
149
150
- [Pytorch 2.1.0](https://cancon.hpccube.com:65024/4/main/pytorch/DAS1.0)
- [Deepspeed 0.12.3](https://cancon.hpccube.com:65024/4/main/deepspeed/DAS1.0)
- [Flash_attn 2.0.4](https://cancon.hpccube.com:65024/4/main/flash_attn/DAS1.0)
- [LightOp 0.3](https://cancon.hpccube.com:65024/4/main/lightop/DAS1.0)

    Tips:以上dtk驱动、python、deepspeed等工具版本需要严格一一对应。

3. 其它依赖库参照requirements.txt安装:
```
pip install -r requirements.txt
```

## 数据集

输入数据为放置在项目[data](.data)目录下的 json 文件,用--dataset选项指定(参考下面示例),多个输入文件用`,`分隔。json 文件示例格式和字段说明如下:
```
[
    {
        "instruction": "What are the three primary colors?",
        "input": "",
        "output": "The three primary colors are red, blue, and yellow."
    },
    ....
]
```
json 文件中存储一个列表,列表的每个元素是一个sample。其中instruction代表用户输入,input是可选项,如果开发者同时指定了instruction和input,会把二者用\n连接起来代表用户输入;output代表期望的模型输出。本仓库的[data](./data)目录下预置了一些可用于指令微调训练的公开数据集:
```
./data/alpaca_gpt4_data_zh.json
./data/alpaca_gpt4_data_en.json
./data/alpaca_data_zh_51k.json
./data/alpaca_data_en_52k.json
./data/oaast_sft_zh.json
./data/oaast_sft.json
...
```
数据集的使用方法请参考 [data/README.md](data/README_zh.md) 文件。

注意:请配置[./src/llmtuner/hparams/data_args.py](src/llmtuner/hparams/data_args.py)中L18的dataset_dir路径;

### 模型下载
ModelScope模型下载地址:

[Llama-2-7b-hf](https://www.modelscope.cn/models/shakechen/Llama-2-7b-hf)

[Llama2-Chinese-13b-Chat-ms](https://www.modelscope.cn/models/modelscope/Llama2-Chinese-13b-Chat-ms)

[CodeLlama-34b-hf](https://www.modelscope.cn/models/AI-ModelScope/CodeLlama-34b-hf)

**为了获得训练中性能提升,请将所安装的transformers文件夹中`models/llama`文件夹内`modeling_llama.py`文件(容器内位置为`/usr/local/lib/python3.10/site-packages/transformers/models/llama/modeling_llama.py`)替换为本仓库所提供的`modeling_llama.py`文件**



## 训练
1. 7B模型LoRA微调训练
```
bash lora_7B.sh
```

2. 7B模型LoRA微调训练
```
bash lora_13B.sh
```
您可以根据自己的需求,更改其中的batchsize大小、模型路径、数据集、deepspeed配置文件、lora_ran及lora_target等。请使用 python src/train_bash.py -h 查看全部可选项。

## 应用场景
### 算法类别

`对话问答`

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

## 源码仓库及问题反馈
- https://developer.hpccube.com/codes/modelzoo/llama2_lora_pytorch
## 参考资料
- https://github.com/hiyouga/LLaMA-Factory