README.md 5.37 KB
Newer Older
xiabo's avatar
xiabo committed
1
# Qwen
xiabo's avatar
xiabo committed
2
## 论文
lvhan028's avatar
lvhan028 committed
3

xiabo's avatar
xiabo committed
4
`Qwen-VL: A Frontier Large Vision-Language Model with Versatile Abilities`
RunningLeon's avatar
RunningLeon committed
5

xiabo's avatar
xiabo committed
6
https://arxiv.org/pdf/2308.12966.pdf
lvhan028's avatar
lvhan028 committed
7

xiabo's avatar
xiabo committed
8
## 模型结构
lvhan028's avatar
lvhan028 committed
9

xiabo's avatar
xiabo committed
10
通义千问(Qwen) 是阿里云研发的通义千问大模型系列的70/140亿参数规模的模型。Qwen是基于Transformer的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在Qwen-7B的基础上,使用对齐机制打造了基于大语言模型的AI助手Qwen-7B-Chat。
lvhan028's avatar
lvhan028 committed
11

xiabo's avatar
xiabo committed
12
本项目主要针对Qwen-Chat在DCU平台的推理性能优化,达到DCU平台较快的对话效果。
13

xiabo's avatar
xiabo committed
14
![qwen](docs/transformer.jpg)
15
16


xiabo's avatar
xiabo committed
17
## 算法原理
18

xiabo's avatar
xiabo committed
19
Qwen的构建采用了类似LLaMA的架构。与标准transformer的主要差异有:1)使用非连接嵌入、2)使用旋转位置嵌入、3)在注意力中除了QKV外不使用偏置、4)使用RMSNorm代替LayerNorm、5)使用SwiGLU代替ReLU、以及6)采用快速注意力来加速训练。该模型共有32层,嵌入维度为4096,注意力头数为32。
20

xiabo's avatar
xiabo committed
21
![qwen](docs/qwen.png)
lvhan028's avatar
lvhan028 committed
22

xiabo's avatar
xiabo committed
23
## 环境配置
xiabo's avatar
xiabo committed
24
提供[光源](https://www.sourcefind.cn/#/service-details)拉取推理的docker镜像:
xuxz's avatar
xuxz committed
25
26
```bash
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
xiabo's avatar
xiabo committed
27
28
29
# <Image ID>用上面拉取docker镜像的ID替换
# <Host Path>主机端路径
# <Container Path>容器映射路径
xuxzh1's avatar
xuxzh1 committed
30
31
docker run -it --network=host --name=qwen_lmdeploy --privileged --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=1024G --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 -v <Host Path>:<Container Path> <Image ID> /bin/bash

32
```
xiabo's avatar
xiabo committed
33
镜像版本依赖:
xuxz's avatar
xuxz committed
34
35
36
* DTK驱动:24.04.1
* Pytorch: 2.1.0
* python: python3.10
xiabo's avatar
xiabo committed
37
38
39
40
41

## 数据集


## 推理
xiabo's avatar
xiabo committed
42
### 源码编译安装
xuxz's avatar
xuxz committed
43
```bash
xiabo's avatar
xiabo committed
44
# 若使用光源的镜像,可以不用源码编译,镜像里面安装好了lmdeploy,可跳过源码编译安装
zhouxiang's avatar
zhouxiang committed
45
# 获取源码,编译并安装
chenzk's avatar
chenzk committed
46
git clone -b v1.4 http://developer.sourcefind.cn/codes/modelzoo/Qwen_lmdeploy.git
zhouxiang's avatar
zhouxiang committed
47
cd qwen_lmdeploy
zhouxiang's avatar
zhouxiang committed
48
49
git submodule init && git submodule update
cd lmdeploy
xiabo's avatar
xiabo committed
50
51
52
53
54
55
56
mkdir build && cd build
sh ../generate.sh
make -j 32
make install
cd .. && python3 setup.py install
```

xiabo's avatar
xiabo committed
57
### 模型下载
xuxz's avatar
xuxz committed
58

dongchy920's avatar
dongchy920 committed
59
SCNet模型下载
xiabo's avatar
xiabo committed
60

chenzk's avatar
chenzk committed
61
[Qwen-7B-chat](https://huggingface.co/Qwen/Qwen-7B-Chat)
xiabo's avatar
xiabo committed
62

chenzk's avatar
chenzk committed
63
[Qwen-14B-chat](https://huggingface.co/Qwen/Qwen-14B-Chat)
dongchy920's avatar
dongchy920 committed
64

chenzk's avatar
chenzk committed
65
[Qwen-72B-Chat](https://huggingface.co/Qwen/Qwen-72B-Chat)
xiabo's avatar
xiabo committed
66

xuxz's avatar
xuxz committed
67
### 运行前
zhouxiang's avatar
zhouxiang committed
68

xuxz's avatar
xuxz committed
69
```bash
xuxzh1's avatar
xuxzh1 committed
70
71
72
73
#step 1
cd lmdeploy
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
#step 2
xuxz's avatar
xuxz committed
74
source /opt/dtk/cuda/env.sh
xiabo's avatar
xiabo committed
75
```
xiabo's avatar
xiabo committed
76
77


xuxz's avatar
xuxz committed
78
79
### 运行 Qwen-7B-chat
```bash
xiabo's avatar
xiabo committed
80
# bash界面运行
xuxz's avatar
xuxz committed
81
lmdeploy chat turbomind path_to_Qwen-7B-chat    # 输入问题后执行2次回车进行推理
xiabo's avatar
xiabo committed
82
83

# 服务器网页端运行
xuxz's avatar
xuxz committed
84
85
# <server-name> gradio服务器的ip地址
# <server-port> gradio服务器的ip的端口
xiabo's avatar
xiabo committed
86
# <tp> 用于张量并行的GPU数量应该是2^n (和模型转换的时候保持一致)
xuxz's avatar
xuxz committed
87
88
89
# <backend> 后端支持turbomind/pytorch
lmdeploy serve gradio path_to_Qwen-7B-chat --server-name {ip} --server-port {port} --backend turbomind --tp 1
在网页上输入{ip}:{port}即可进行对话
xiabo's avatar
xiabo committed
90
```
xiabo's avatar
xiabo committed
91
### 运行 Qwen-14B-chat
xuxz's avatar
xuxz committed
92
```bash
xiabo's avatar
xiabo committed
93
# bash界面运行
xuxz's avatar
xuxz committed
94
lmdeploy chat turbomind path_to_Qwen-14B-chat --tp 2
xiabo's avatar
xiabo committed
95
96

# 服务器网页端运行
xuxz's avatar
xuxz committed
97
98
99
# 在bash端运行:
lmdeploy serve gradio path_to_Qwen-14B-chat --server-name {ip} --server-port {port} --backend turbomind --tp 2
在网页上输入{ip}:{port}即可进行对话
zhouxiang's avatar
zhouxiang committed
100
101
102
```
### 运行 Qwen-72B-chat

xuxz's avatar
xuxz committed
103
```bash
zhouxiang's avatar
zhouxiang committed
104
# bash界面运行
xuxz's avatar
xuxz committed
105
lmdeploy chat turbomind path_to_Qwen-72B-chat --tp 8
zhouxiang's avatar
zhouxiang committed
106
107

# 服务器网页端运行
xuxz's avatar
xuxz committed
108
109
110
#在bash端运行:
lmdeploy serve gradio path_to_Qwen-72B-chat --server-name {ip} --server-port {port} --backend turbomind --tp 8
在网页上输入{ip}:{port}即可进行对话
xiabo's avatar
xiabo committed
111
```
zhouxiang's avatar
zhouxiang committed
112

zhouxiang's avatar
zhouxiang committed
113
114
115
116
### api-server方式运行实例

启动server:

xuxz's avatar
xuxz committed
117
```bash
zhouxiang's avatar
zhouxiang committed
118
# --tp: 在 tensor parallel时,使用的GPU数量
xuxz's avatar
xuxz committed
119
lmdeploy serve api_server path_to_Qwen-72B-chat --server-name {ip} --server-port {port} --tp 8
zhouxiang's avatar
zhouxiang committed
120
121
```

xuxz's avatar
xuxz committed
122
浏览器上打开 `http://{server-name}:{server-port}`,即可访问 swagger,查阅 RESTful API 的详细信息。
zhouxiang's avatar
zhouxiang committed
123
124
125

可以用命令行,在控制台与 server 通信(在新启的命令行页面下执行):

xuxz's avatar
xuxz committed
126
127
```bash
# restful_api_url 就是 api_server 产生的,即上述启动server的http://{server-name}:{server-port}
zhouxiang's avatar
zhouxiang committed
128
129
130
131
132
lmdeploy serve api_client restful_api_url
```

或者,启动 gradio,在 webui 的聊天对话框中,与服务交流:

xuxz's avatar
xuxz committed
133
```bash
zhouxiang's avatar
zhouxiang committed
134
# restful_api_url 就是 api_server 产生的,比如 http://localhost:23333
xuxz's avatar
xuxz committed
135
# server-name 和 server-port 是用来提供 gradio ui 访问服务的
dcuai's avatar
dcuai committed
136
# 例子: lmdeploy serve gradio http://localhost:23333 --server-name localhost --server-port 6006
xuxz's avatar
xuxz committed
137
lmdeploy serve gradio restful_api_url --server-name {ip} --server-port {port}
zhouxiang's avatar
zhouxiang committed
138
139
```

xuxz's avatar
xuxz committed
140
**需要保证'{server-name}:{server-port}'在外部浏览器中的可访问性**
zhouxiang's avatar
zhouxiang committed
141

chenzk's avatar
chenzk committed
142
关于 RESTful API的详细介绍,请参考[这份](https://developer.sourcefind.cn/codes/aicomponent/lmdeploy/-/blob/dtk23.10-v0.1.0/docs/zh_cn/restful_api.md)文档。
zhouxiang's avatar
zhouxiang committed
143

xiabo's avatar
xiabo committed
144
## result
zhouxiang's avatar
zhouxiang committed
145

xiabo's avatar
xiabo committed
146
![qwen推理](docs/qwen推理.gif)
xiabo's avatar
xiabo committed
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161

### 精度



## 应用场景

### 算法类别

`对话问答`


### 热点应用行业

`医疗,科研,金融,教育`
162

lvhan028's avatar
lvhan028 committed
163

xiabo's avatar
xiabo committed
164
## 源码仓库及问题反馈
chenzk's avatar
chenzk committed
165
https://developer.sourcefind.cn/codes/modelzoo/qwen_lmdeploy
lvhan028's avatar
lvhan028 committed
166

xiabo's avatar
xiabo committed
167
168
## 参考资料
https://github.com/InternLM/LMDeploy