README.md 12.5 KB
Newer Older
zhuwenwen's avatar
zhuwenwen committed
1
2
3
4
<!--
 * @Author: zhuww
 * @email: zhuww@sugon.com
 * @Date: 2024-05-24 14:15:07
zhuwenwen's avatar
zhuwenwen committed
5
 * @LastEditTime: 2024-09-30 08:30:01
zhuwenwen's avatar
zhuwenwen committed
6
-->
laibao's avatar
laibao committed
7

zhuwenwen's avatar
zhuwenwen committed
8
9
10
# Qwen1.5

## 论文
laibao's avatar
laibao committed
11

zhuwenwen's avatar
zhuwenwen committed
12
13
14


## 模型结构
laibao's avatar
laibao committed
15

zhuwenwen's avatar
zhuwenwen committed
16
Qwen1.5是阿里云开源大型语言模型系列,是Qwen2.0的beta版本。相较于以往版本,本次更新着重提升了Chat模型与人类偏好的对齐程度,并且显著增强了模型的多语言处理能力。在序列长度方面,所有规模模型均已实现 32768 个tokens的上下文长度范围支持。同时,预训练 Base 模型的质量也有关键优化,有望在微调过程中带来更佳体验。
laibao's avatar
laibao committed
17

zhuwenwen's avatar
zhuwenwen committed
18
19
20
21
22
<div align=center>
    <img src="./doc/qwen1.5.jpg"/>
</div>

## 算法原理
laibao's avatar
laibao committed
23

zhuwenwen's avatar
zhuwenwen committed
24
25
26
27
28
29
30
和Qwen一样,Qwen1.5仍然是一个decoder-only的transformer模型,使用SwiGLU激活函数、RoPE、多头注意力机制等。

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

## 环境配置
laibao's avatar
laibao committed
31

zhuwenwen's avatar
zhuwenwen committed
32
### Docker(方法一)
laibao's avatar
laibao committed
33

zhuwenwen's avatar
zhuwenwen committed
34
35
36
提供[光源](https://www.sourcefind.cn/#/image/dcu/custom)拉取推理的docker镜像:

```
37
docker pull image.sourcefind.cn:5000/dcu/admin/base/custom:vllm0.9.2-ubuntu22.04-dtk25.04.1-rc5-rocblas104381-0915-das1.6-py3.10-20250916-rc2
zhuwenwen's avatar
zhuwenwen committed
38
39
40
# <Image ID>用上面拉取docker镜像的ID替换
# <Host Path>主机端路径
# <Container Path>容器映射路径
zhuwenwen's avatar
zhuwenwen committed
41
# 若要在主机端和容器端映射端口需要删除--network host参数
zhuwenwen's avatar
zhuwenwen committed
42
43
docker run -it --name qwen1.5_vllm --privileged --shm-size=64G  --device=/dev/kfd --device=/dev/dri/ --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --ulimit memlock=-1:-1 --ipc=host --network host --group-add video -v /opt/hyhal:/opt/hyhal -v <Host Path>:<Container Path> <Image ID> /bin/bash
```
laibao's avatar
laibao committed
44

zhuwenwen's avatar
zhuwenwen committed
45
`Tips:若在K100/Z100L上使用,使用定制镜像docker pull image.sourcefind.cn:5000/dcu/admin/base/custom:vllm0.5.0-dtk24.04.1-ubuntu20.04-py310-zk-v1,K100/Z100L不支持awq量化`
zhuwenwen's avatar
zhuwenwen committed
46
47

### Dockerfile(方法二)
laibao's avatar
laibao committed
48

zhuwenwen's avatar
zhuwenwen committed
49
50
51
52
```
# <Host Path>主机端路径
# <Container Path>容器映射路径
docker build -t qwen1.5:latest .
zhuwenwen's avatar
zhuwenwen committed
53
docker run -it --name qwen1.5_vllm --privileged --shm-size=64G  --device=/dev/kfd --device=/dev/dri/ --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --ulimit memlock=-1:-1 --ipc=host --network host --group-add video -v /opt/hyhal:/opt/hyhal:ro -v <Host Path>:<Container Path> qwen1.5:latest /bin/bash
zhuwenwen's avatar
zhuwenwen committed
54
55
56
```

### Anaconda(方法三)
laibao's avatar
laibao committed
57

zhuwenwen's avatar
zhuwenwen committed
58
59
60
```
conda create -n qwen1.5_vllm python=3.10
```
laibao's avatar
laibao committed
61

chenzk's avatar
chenzk committed
62
关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.sourcefind.cn/tool/)开发者社区下载安装。
laibao's avatar
laibao committed
63

64
65
66
67
* DTK驱动:dtk25.04.01
* Pytorch: 2.4.0
* triton: 3.0.0
* lmslim: 0.2.1
laibao's avatar
laibao committed
68
* flash_attn: 2.6.1
69
* flash_mla: 1.0.0
70
* vllm: 0.9.2
zhuwenwen's avatar
zhuwenwen committed
71
* python: python3.10
zhuwenwen's avatar
zhuwenwen committed
72

73
`Tips:需先安装相关依赖,最后安装vllm包`  
laibao's avatar
laibao committed
74

75
76
环境变量:  
export ALLREDUCE_STREAM_WITH_COMPUTE=1  
laibao's avatar
laibao committed
77
export VLLM_NUMA_BIND=1  
78
79
export VLLM_RANK0_NUMA=0  
export VLLM_RANK1_NUMA=1  
laibao's avatar
laibao committed
80
81
82
83
export VLLM_RANK2_NUMA=2  
export VLLM_RANK3_NUMA=3  
export VLLM_RANK4_NUMA=4  
export VLLM_RANK5_NUMA=5  
84
85
export VLLM_RANK6_NUMA=6  
export VLLM_RANK7_NUMA=7  
zhuwenwen's avatar
zhuwenwen committed
86
87

## 数据集
laibao's avatar
laibao committed
88

zhuwenwen's avatar
zhuwenwen committed
89
90
91
92


## 推理

laibao's avatar
laibao committed
93
94
### 模型下载

laibao's avatar
laibao committed
95
96
| 基座模型                                                              | chat模型                                                                      | GPTQ模型                                                                                                | AWQ模型                                                                                      |
| --------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
chenzk's avatar
chenzk committed
97
98
99
100
101
102
103
104
105
106
| [Qwen-7B](https://huggingface.co/Qwen/Qwen1.5-7B)         | [Qwen-7B-Chat](https://huggingface.co/Qwen/Qwen-7B-Chat)                | [Qwen-7B-Chat-GPTQ-Int4](https://huggingface.co/Qwen/Qwen-7B-Chat-Int4)                                    |                                                                                              |
| [Qwen-14B](https://huggingface.co/Qwen/Qwen1.5-14B)           | [Qwen-14B-Chat](https://huggingface.co/Qwen/Qwen-14B-Chat)              | [Qwen-14B-Chat-GPTQ-Int4](https://huggingface.co/Qwen/Qwen1.5-14B-Chat-GPTQ-Int4)                |                                                                                              |
| [Qwen-72B](https://huggingface.co/Qwen/Qwen1.5-72B)           | [Qwen-72B-Chat](https://huggingface.co/Qwen/Qwen1.5-72B-Chat)              | [Qwen-72B-Chat-GPTQ-Int4](https://huggingface.co/Qwen/Qwen1.5-72B-Chat-GPTQ-Int4)                |                                                                                              |
| [Qwen1.5-7B](https://huggingface.co/Qwen/Qwen1.5-7B)   | [Qwen1.5-7B-Chat](https://huggingface.co/Qwen/Qwen1.5-7B-Chat) | [Qwen1.5-7B-Chat-GPTQ-Int4](https://huggingface.co/Qwen/Qwen1.5-7B-Chat-GPTQ-Int4)       | [Qwen1.5-7B-Chat-AWQ](https://huggingface.co/Qwen/Qwen1.5-7B-Chat-AWQ)       |
| [Qwen1.5-14B](https://huggingface.co/Qwen/Qwen1.5-14B) | [Qwen1.5-14B-Chat](https://huggingface.co/Qwen/Qwen1.5-14B-Chat)   | [Qwen1.5-14B-Chat-GPTQ-Int4](https://huggingface.co/Qwen/Qwen1.5-14B-Chat-GPTQ-Int4)     | [Qwen1.5-14B-Chat-AWQ](https://huggingface.co/Qwen/Qwen1.5-14B-Chat-AWQ)     |
| [Qwen1.5-32B](https://huggingface.co/Qwen/Qwen1.5-32B)          | [Qwen1.5-32B-Chat](https://huggingface.co/Qwen/Qwen1.5-32B-Chat)        | [Qwen1.5-32B-Chat-GPTQ-Int4](https://huggingface.co/Qwen/Qwen1.5-32B-Chat-GPTQ-Int4)              | [Qwen1.5-32B-Chat-AWQ](https://huggingface.co/Qwen/Qwen1.5-32B-Chat-AWQ) |
| [Qwen1.5-72B](https://huggingface.co/Qwen/Qwen1.5-72B)          | [Qwen1.5-72B-Chat](https://huggingface.co/Qwen/Qwen1.5-72B-Chat)        | [Qwen1.5-72B-Chat-GPTQ-Int4](https://huggingface.co/Qwen/Qwen1.5-72B-Chat-GPTQ-Int4)     | [Qwen1.5-72B-Chat-AWQ](https://huggingface.co/Qwen/Qwen1.5-72B-Chat-AWQ)     |
| [Qwen1.5-110B](https://huggingface.co/Qwen/Qwen1.5-110B)        | [Qwen1.5-110B-Chat](https://huggingface.co/Qwen/Qwen1.5-110B-Chat)      | [Qwen1.5-110B-Chat-GPTQ-Int4](https://huggingface.co/Qwen/Qwen1.5-110B-Chat-GPTQ-Int4)   | [Qwen1.5-110B-Chat-AWQ](https://huggingface.co/Qwen/Qwen1.5-110B-Chat-AWQ)   |
| [Qwen2-7B](https://huggingface.co/unsloth/Qwen2-7B)                | [Qwen2-7B-Instruct](https://huggingface.co/Qwen/Qwen2-7B-Instruct)      | [Qwen2-7B-Instruct-GPTQ-Int4](https://huggingface.co/Qwen/Qwen2-7B-Instruct-GPTQ-Int4)   | [Qwen2-7B-Instruct-AWQ](https://huggingface.co/Qwen/Qwen2-7B-Instruct-AWQ)   |
| [Qwen2-72B](https://huggingface.co/Qwen/Qwen2-72B)              | [Qwen2-72B-Instruct](https://huggingface.co/Qwen/Qwen2-72B-Instruct)    | [Qwen2-72B-Instruct-GPTQ-Int4](https://huggingface.co/Qwen/Qwen2-72B-Instruct-GPTQ-Int4) | [Qwen2-72B-Instruct-AWQ](https://huggingface.co/Qwen/Qwen2-72B-Instruct-AWQ) |
zhuwenwen's avatar
add env  
zhuwenwen committed
107

zhuwenwen's avatar
zhuwenwen committed
108
### 离线批量推理
laibao's avatar
laibao committed
109

zhuwenwen's avatar
zhuwenwen committed
110
```bash
111
 python examples/offline_inference/basic/basic.py
zhuwenwen's avatar
zhuwenwen committed
112
```
113
其中,本示例脚本在代码中直接定义了 `prompts`,并设置 `temperature=0.8``top_p=0.95``max_tokens=16`;如需调整请修改脚本中的参数。`model` 在脚本中指定为本地模型路径;`tensor_parallel_size=1` 表示使用 1 卡;`dtype="float16"` 为推理数据类型(若权重为 bfloat16,请相应调整)。本示例未使用 `quantization` 参数,量化推理请参考下文性能测试示例。
zhuwenwen's avatar
zhuwenwen committed
114
115

### 离线批量推理性能测试
laibao's avatar
laibao committed
116

zhuwenwen's avatar
zhuwenwen committed
117
1、指定输入输出
laibao's avatar
laibao committed
118

zhuwenwen's avatar
zhuwenwen committed
119
```bash
120
 python benchmarks/benchmark_throughput.py --num-prompts 1 --input-len 32 --output-len 128 --model /your/model/path -tp 1 --trust-remote-code --enforce-eager --dtype float16
zhuwenwen's avatar
zhuwenwen committed
121
```
laibao's avatar
laibao committed
122
123

其中 `--num-prompts`是batch数,`--input-len`是输入seqlen,`--output-len`是输出token长度,`--model`为模型路径,`-tp`为使用卡数,`dtype="float16"`为推理数据类型,如果模型权重是bfloat16,需要修改为float16推理。若指定 `--output-len  1`即为首字延迟。`-q gptq`为使用gptq量化模型进行推理。
zhuwenwen's avatar
zhuwenwen committed
124
125
126

2、使用数据集
下载数据集:
chenzk's avatar
chenzk committed
127
[sharegpt_v3_unfiltered_cleaned_split](https://huggingface.co/datasets/learnanything/sharegpt_v3_unfiltered_cleaned_split)
zhuwenwen's avatar
zhuwenwen committed
128
129

```bash
130
 python benchmarks/benchmark_throughput.py --num-prompts 1 --model /your/model/path --dataset-name sharegpt --dataset-path /path/to/ShareGPT_V3_unfiltered_cleaned_split.json -tp 1 --trust-remote-code --enforce-eager --dtype float16
zhuwenwen's avatar
zhuwenwen committed
131
132
```

laibao's avatar
laibao committed
133
其中 `--num-prompts`是batch数,`--model`为模型路径,`--dataset`为使用的数据集,`-tp`为使用卡数,`dtype="float16"`为推理数据类型,如果模型权重是bfloat16,需要修改为float16推理。`-q gptq`为使用gptq量化模型进行推理。
zhuwenwen's avatar
zhuwenwen committed
134

laibao's avatar
laibao committed
135
### OpenAI api服务推理性能测试
laibao's avatar
laibao committed
136

zhuwenwen's avatar
zhuwenwen committed
137
1、启动服务端:
laibao's avatar
laibao committed
138

zhuwenwen's avatar
zhuwenwen committed
139
```bash
140
 vllm serve --model /your/model/path --enforce-eager --dtype float16 --trust-remote-code --tensor-parallel-size 1
zhuwenwen's avatar
zhuwenwen committed
141
142
143
```

2、启动客户端:
laibao's avatar
laibao committed
144

145
146
```
python benchmarks/benchmark_serving.py --model /your/model/path --dataset-name sharegpt --dataset-path /path/to/ShareGPT_V3_unfiltered_cleaned_split.json  --num-prompts 1 --trust-remote-code
zhuwenwen's avatar
zhuwenwen committed
147
148
```

149
参数同使用数据集,离线批量推理性能测试,具体参考[benchmarks/benchmark_serving.py](/codes/modelzoo/qwen1.5_vllm/-/blob/master/benchmarks/benchmark_serving.py)
zhuwenwen's avatar
zhuwenwen committed
150
151

### OpenAI兼容服务
laibao's avatar
laibao committed
152

zhuwenwen's avatar
zhuwenwen committed
153
启动服务:
laibao's avatar
laibao committed
154

zhuwenwen's avatar
zhuwenwen committed
155
```bash
156
 vllm serve /your/model/path --enforce-eager --dtype float16 --trust-remote-code
zhuwenwen's avatar
zhuwenwen committed
157
```
laibao's avatar
laibao committed
158

laibao's avatar
laibao committed
159
这里serve之后为加载模型路径,`--dtype`为数据类型:float16,默认情况使用tokenizer中的预定义聊天模板,`--chat-template`可以添加新模板覆盖默认模板,`-q gptq`为使用gptq量化模型进行推理,`-q awqq`为使用awq量化模型进行推理。
zhuwenwen's avatar
zhuwenwen committed
160
161

列出模型型号:
laibao's avatar
laibao committed
162

zhuwenwen's avatar
zhuwenwen committed
163
164
165
166
167
```bash
curl http://localhost:8000/v1/models
```

### OpenAI Completions API和vllm结合使用
laibao's avatar
laibao committed
168

zhuwenwen's avatar
zhuwenwen committed
169
170
171
172
```bash
curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
173
        "model": "/your/model/path",
zhuwenwen's avatar
zhuwenwen committed
174
175
176
177
178
179
        "prompt": "What is deep learning?",
        "max_tokens": 7,
        "temperature": 0
    }'
```

180
或者使用[examples/online_serving/openai_completion_client.py](examples/online_serving/openai_completion_client.py)
zhuwenwen's avatar
zhuwenwen committed
181
182

### OpenAI Chat API和vllm结合使用
laibao's avatar
laibao committed
183

zhuwenwen's avatar
zhuwenwen committed
184
185
186
187
```bash
curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
188
189
        "model": "/your/model/path",
        "max_tokens": 128,
zhuwenwen's avatar
zhuwenwen committed
190
191
192
193
194
195
        "messages": [
            {"role": "system", "content": "What is deep learning?"},
            {"role": "user", "content": "What is deep learning?"}
        ]
    }'
```
laibao's avatar
laibao committed
196

197
或者使用[examples/online_serving/openai_chat_completion_client.py](examples/online_serving/openai_chat_completion_client.py)
laibao's avatar
laibao committed
198

laibao's avatar
laibao committed
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
### **gradio和vllm结合使用**

1.安装gradio

```
pip install gradio
```

2.安装必要文件

    2.1 启动gradio服务,根据提示操作

```
python  gradio_openai_chatbot_webserver.py --model "Qwen/Qwen1.5-7B-Chat" --model-url http://localhost:8000/v1 --temp 0.8 --stop-token-ids ""
```

    2.2 更改文件权限

打开提示下载文件目录,输入以下命令给予权限

```
chmod +x frpc_linux_amd64_v0.*
```
laibao's avatar
laibao committed
222

laibao's avatar
laibao committed
223
224
225
226
    2.3端口映射

```
ssh -L 8000:计算节点IP:8000 -L 8001:计算节点IP:8001 用户名@登录节点 -p 登录节点端口
laibao's avatar
laibao committed
227
```
laibao's avatar
laibao committed
228
229
230
231

3.启动OpenAI兼容服务

```
232
 vllm serve /your/model/path --enforce-eager --dtype float16 --trust-remote-code --port 8000 --host "0.0.0.0"
laibao's avatar
laibao committed
233
234
235
236
237
```

4.启动gradio服务

```
laibao's avatar
laibao committed
238
python  gradio_openai_chatbot_webserver.py --model "Qwen/Qwen1.5-7B-Chat" --model-url http://localhost:8000/v1 --temp 0.8 --stop-token-ids --host "0.0.0.0" --port 8001"
laibao's avatar
laibao committed
239
240
241
242
243
```

5.使用对话服务

在浏览器中输入本地 URL,可以使用 Gradio 提供的对话服务。
zhuwenwen's avatar
zhuwenwen committed
244
245

## result
laibao's avatar
laibao committed
246

zhuwenwen's avatar
zhuwenwen committed
247
使用的加速卡:1张 DCU-K100_AI-64G
laibao's avatar
laibao committed
248

zhuwenwen's avatar
zhuwenwen committed
249
250
251
252
253
```
Prompt: 'What is deep learning?', Generated text: ' Deep learning is a subset of machine learning that involves the use of neural networks to model and solve complex problems. Neural networks are a network of interconnected nodes or " neurons" that are designed to recognize patterns in data, learn from examples, and make predictions or decisions.\nThe term "deep" in deep learning refers to the use of multiple layers or hidden layers in these neural networks. Each layer processes the input data in a different way, extracting increasingly abstract features as the data passes through.'
```

### 精度
laibao's avatar
laibao committed
254

zhuwenwen's avatar
zhuwenwen committed
255
256
257
258
259


## 应用场景

### 算法类别
laibao's avatar
laibao committed
260

zhuwenwen's avatar
zhuwenwen committed
261
262
263
对话问答

### 热点应用行业
laibao's avatar
laibao committed
264

zhuwenwen's avatar
zhuwenwen committed
265
266
267
金融,科研,教育

## 源码仓库及问题反馈
laibao's avatar
laibao committed
268

chenzk's avatar
chenzk committed
269
* [https://developer.sourcefind.cn/codes/modelzoo/qwen1.5_vllm](https://developer.sourcefind.cn/codes/modelzoo/qwen1.5_vllm)
zhuwenwen's avatar
zhuwenwen committed
270
271
272

## 参考资料

laibao's avatar
laibao committed
273
* [https://github.com/vllm-project/vllm](https://github.com/vllm-project/vllm)