"vscode:/vscode.git/clone" did not exist on "65348e710d565dddddf02f9aad19ae1e19a9e76c"
README.md 5.36 KB
Newer Older
Rayyyyy's avatar
Rayyyyy 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
# llama3
## 论文
[llama3](https://llama.meta.com/llama3/)

## 模型结构
Llama-3中选择了一个相对标准的decoder-only的transformer架构。与Llama-2相比,我们做了几个关键的改进。Llama 3使用了一个带有128K个标记的标记器,可以更有效地对语言进行编码,从而大大提高了模型的性能。为了提高Llama 3模型的推理效率,我们在8B和70B两个尺寸上都采用了分组查询关注(GQA)。我们在8,192个标记的序列上训练模型,使用掩码来确保self-attention不会跨越文档边界。

## 算法原理

<div align=center>
    <img src="./doc/method.png"/>
</div>

## 环境配置
-v 路径、docker_name和imageID根据实际情况修改

### Docker(方法一)

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

cd /your_code_path/llama3_pytorch
pip install -e .
```

### Dockerfile(方法二)

```bash
Rayyyyy's avatar
Rayyyyy committed
30
cd docker
Rayyyyy's avatar
Rayyyyy committed
31
32
33
34
35
36
37
38
39
40
41
42
docker build --no-cache -t llama3:latest .
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash

cd /your_code_path/llama3_pytorch
pip install -e .
```

### Anaconda(方法三)
关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.hpccube.com/tool/)开发者社区下载安装。
```bash
DTK驱动:dtk23.10.1
python:python3.8
Rayyyyy's avatar
Rayyyyy committed
43
torch:2.1.0
Rayyyyy's avatar
Rayyyyy committed
44
```
Rayyyyy's avatar
Rayyyyy committed
45
`Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应`
Rayyyyy's avatar
Rayyyyy committed
46
47
48
49
50
51
52
53
54
55
56
57
58

其它非深度学习库安装方式如下:
```bash
pip install -e .
```

## 数据集
官方暂无

## 训练
暂无

## 推理
Rayyyyy's avatar
Rayyyyy committed
59
预训练模型下载方法请参考下面的[预训练权重](#预训练权重)章节,不同的模型需要不同的模型并行(MP)值,如下表所示:
Rayyyyy's avatar
Rayyyyy committed
60

Rayyyyy's avatar
Rayyyyy committed
61
62
63
64
65
66
67
68
|  Model | MP |
|--------|----|
| 8B     | 1  |
| 70B    | 8  |

所有模型都支持序列长度高达8192个tokens,但我们根据max_seq_len和max_batch_size值预先分配缓存。根据你的硬件设置。

**Tips:**
Rayyyyy's avatar
Rayyyyy committed
69
- `–nproc_per_node`需要根据模型的MP值进行设置(参考上表)。
Rayyyyy's avatar
Rayyyyy committed
70
71
72
- `max_seq_len``max_batch_size`参数按需设置。

### Pretrained模型
Rayyyyy's avatar
Rayyyyy committed
73
这些模型都没有针对聊天或者Q&A进行微调。可以参考 `example_text_completion.py` 里的用例。
Rayyyyy's avatar
Rayyyyy committed
74

Rayyyyy's avatar
Rayyyyy committed
75
- Meta-Llama-3-8B 模型示例
Rayyyyy's avatar
Rayyyyy committed
76
77
78
79
80
81
82
```bash
torchrun --nproc_per_node 1 example_text_completion.py \
    --ckpt_dir Meta-Llama-3-8B/original/ \
    --tokenizer_path Meta-Llama-3-8B/original/tokenizer.model \
    --max_seq_len 128 --max_batch_size 4
```

Rayyyyy's avatar
Rayyyyy committed
83
84
85
86
87
88
89
90
91
### Instruction-tuned模型
经过微调的模型被训练用于对话应用程序。为了获得预期的功能和性能,需要遵循 [`ChatFormat`](https://github.com/meta-llama/llama3/blob/main/llama/tokenizer.py#L202)中定义的特定格式:
- prompt以 `<|begin_of_text|>` 特殊token开始,之后是一条或多条message。
- 每条message都以`<|start_header_id|>` 标签,`system``user`或者`assistant`角色、以及`<|end_header_id|>` 标签开头。
- 在双换行符`\n\n`之后是message的内容。
- 每条message的结尾用`<|eot_id|>`token标记。

您还可以部署额外的分类器来过滤被认为不安全的输入和输出。有关如何向推理代码的输入和输出添加安全检查器,请参阅[llama-recipes repo](https://github.com/meta-llama/llama-recipes/blob/main/recipes/inference/local_inference/inference.py)

Rayyyyy's avatar
Rayyyyy committed
92
- Meta-Llama-3-8B-Instruct 模型示例
Rayyyyy's avatar
Rayyyyy committed
93
94
95
96
97
98
99
```bash
torchrun --nproc_per_node 1 example_chat_completion.py \
    --ckpt_dir Meta-Llama-3-8B-Instruct/original/ \
    --tokenizer_path Meta-Llama-3-8B-Instruct/original/tokenizer.model \
    --max_seq_len 512 --max_batch_size 6
```

Rayyyyy's avatar
Rayyyyy committed
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
## result
- Meta-Llama-3-8B-Instruct
<div align=center>
    <img src="./doc/Meta-Llama-3-8B-Instruct.png"/>
</div>

- Meta-Llama-3-8B
<div align=center>
    <img src="./doc/Meta-Llama-3-8B.png"/>
</div>

### 精度
暂无


## 应用场景
### 算法类别
对话问答

### 热点应用行业
制造,广媒,家居,教育

## 预训练权重
1. 环境安装
```bash
pip install -U huggingface_hub hf_transfer
export HF_ENDPOINT=https://hf-mirror.com
```

2. 预训练模型下载,**token**参数通过huggingface账号获取
Rayyyyy's avatar
Rayyyyy committed
130
131
132
133
134
135
136

- Meta-Llama-3-8B 模型
```bash
mkdir Meta-Llama-3-8B
huggingface-cli download meta-llama/Meta-Llama-3-8B --include "original/*" --local-dir Meta-Llama-3-8B --token hf_*
```

Rayyyyy's avatar
Rayyyyy committed
137
138
139
- Meta-Llama-3-8B-Instruct 模型
```bash
mkdir Meta-Llama-3-8B-Instruct
Rayyyyy's avatar
Rayyyyy committed
140
huggingface-cli download meta-llama/Meta-Llama-3-8B-Instruct --include "original/*" --local-dir Meta-Llama-3-8B-Instruct --token hf_*
Rayyyyy's avatar
Rayyyyy committed
141
```
Rayyyyy's avatar
Rayyyyy committed
142
143
144
145

模型目录结构如下:
```bash
├── llama3_pytorch
Rayyyyy's avatar
Rayyyyy committed
146
147
148
149
150
│   ├── Meta-Llama-3-8B
│       ├── original
│           ├── consolidated.00.pth
│           ├── params.json
│           └── tokenizer.model
Rayyyyy's avatar
Rayyyyy committed
151
152
153
154
155
156
157
│   ├── Meta-Llama-3-8B-Instruct
│       ├── original
│           ├── consolidated.00.pth
│           ├── params.json
│           └── tokenizer.model
```

Rayyyyy's avatar
Rayyyyy committed
158
159
160
161
162
## 源码仓库及问题反馈
- https://developer.hpccube.com/codes/modelzoo/llama3_pytorch

## 参考资料
- https://github.com/meta-llama/llama3