README.md 5.98 KB
Newer Older
1
# VisualGLM-6B
wangsen's avatar
wangsen committed
2

dcuai's avatar
dcuai committed
3
## 论文
wangsen's avatar
wangsen committed
4

5
6
7
8
9
10
## 模型结构
VisualGLM 模型架构是 ViT + QFormer + ChatGLM,在预训练阶段对 QFormer 和 ViT LoRA 进行训练,在微调阶段对 QFormer 和 ChatGLM LoRA 进行训练,训练目标是自回归损失(根据图像生成正确的文本)和对比损失(输入 ChatGLM 的视觉特征与对应文本的语义特征对齐)
<div align=center>
    <img src="./doc/image.png"/>
</div>

wangsen's avatar
wangsen committed
11
12


13
## 算法原理
wangsen's avatar
wangsen committed
14
15
VisualGLM-6B 是一个开源的,支持图像、中文和英文的多模态对话语言模型,语言模型基于 ChatGLM-6B,具有 62 亿参数;图像部分通过训练 BLIP2-Qformer 构建起视觉模型与语言模型的桥梁。BLIP-2 通过在冻结的预训练图像编码器和冻结的预训练大语言模型之间添加一个轻量级查询 Transformer (Query Transformer, Q-Former) 来弥合视觉和语言模型之间的模态隔阂 (modality gap)。

wangsen's avatar
wangsen committed
16
17
18
<div align=center>
    <img src="./doc/Former.png"/>
</div>
wangsen's avatar
wangsen committed
19
20
21
在整个模型中,Q-Former 是唯一的可训练模块,而图像编码器和语言模型始终保持冻结状态。Q-Former 是一个 transformer 模型,它由两个子模块组成,这两个子模块共享相同的自注意力层:与冻结的图像编码器交互的图像 transformer,用于视觉特征提取文本 transformer,用作文本编码器和解码器。
VisualGLM-6B 由 SwissArmyTransformer(简称sat) 库训练,这是一个支持Transformer灵活修改、训练的工具库,支持Lora、P-tuning等参数高效微调方法。本项目提供了符合用户习惯的huggingface接口,也提供了基于sat的接口。

22
23
24
25

## 环境配置
### Docker(方法一)
```
wangsen's avatar
wangsen committed
26
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
dcuai's avatar
dcuai committed
27
docker run -it -v /opt/hyhal:/opt/hyhal:ro --network=host --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
28
```
wangsen's avatar
wangsen committed
29
30
31
32
33
34

安装环境
```
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```

35
### Dockerfile(方法二)
wangsen's avatar
wangsen committed
36
此处提供dockerfile的使用方法, dockerfile在docker文件夹中
37
```
wangsen's avatar
wangsen committed
38
cd docker
wangsen's avatar
wangsen committed
39
40
41
docker build --no-cache -t visualglm:latest .
docker run -dit --shm-size 80g --network=host --name=visualglm --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root -v /opt/hyhal/:/opt/hyhal/:ro visualglm:latest /bin/bash
docker exec -it visualglm  /bin/bash
42
43
```

wangsen's avatar
wangsen committed
44
45


wangsen's avatar
wangsen committed
46
###  Conda(方式三)
wangsen's avatar
wangsen committed
47
48
49
50
51
52
53
54
55

1.创建conda虚拟环境:

```
conda create -n visualglm  python=3.10
conda activate visualglm 
```
2.关于本项目DCU显卡所需的工具包、深度学习库等均可从光合开发者社区下载安装。
- [DTK 24.04.1](https://cancon.hpccube.com:65024/directlink/1/DTK-24.04.1/Ubuntu20.04.1/DTK-24.04.1-Ubuntu20.04.1-x86_64.tar.gz)
wangsen's avatar
wangsen committed
56
- [Pytorch 2.1](https://download.sourcefind.cn:65024/directlink/4/pytorch/DAS1.1/torch-2.1.0+das1.1.git3ac1bdd.abi1.dtk2404-cp310-cp310-manylinux_2_31_x86_64.whl)
wangsen's avatar
wangsen committed
57
58
59
60
61
62
63
64
65
66
67
68
69
- [deepspeed](https://download.sourcefind.cn:65024/directlink/4/deepspeed/DAS1.1/deepspeed-0.12.3+gita724046.abi1.dtk2404.torch2.1.0-cp310-cp310-manylinux_2_31_x86_64.whl)
- [torchvision](https://download.sourcefind.cn:65024/directlink/4/vision/DAS1.1/torchvision-0.16.0+das1.1.git7d45932.abi1.dtk2404.torch2.1-cp310-cp310-manylinux_2_31_x86_64.whl)

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


3. 其它依赖库参照requirements.txt安装:
```
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```



dcuai's avatar
dcuai committed
70
71
## 数据集

wangsen's avatar
wangsen committed
72
73
74
75




dcuai's avatar
dcuai committed
76
77
## 推理

wangsen's avatar
wangsen committed
78
### 代码推理
79

wangsen's avatar
wangsen committed
80
81
进入容器后, 进行克隆 
```
chenzk's avatar
chenzk committed
82
git clone  https://developer.sourcefind.cn/codes/modelzoo/visualglm6b_pytorch
wangsen's avatar
wangsen committed
83
84
cd  visualglm6b_pytorch
```
dcuai's avatar
dcuai committed
85
执行推理命令
86
```
dcuai's avatar
dcuai committed
87
python test.py  #修改相关图像路径image_path和模型路径THUDM/visulglm-6b
88
```
dcuai's avatar
dcuai committed
89

wangsen's avatar
wangsen committed
90
91
### 交互式命令行推理

dcuai's avatar
dcuai committed
92
修改cli_demo_hf.py 中模型路径THUDM/visualglm-6b为本地模型路径
93
94
95
```
python cli_demo_hf.py 
```
wangsen's avatar
wangsen committed
96
如果不修改模型路径,程序会自动下载sat模型(由于涉及到访问外网,可能无法下载)。执行上面命令,则可以通过命令行中进行交互式的对话,输入指示并回车即可生成回复,输入 clear 可以清空对话历史,输入 stop 终止程序。
97

wangsen's avatar
wangsen committed
98
### API部署推理
99

dcuai's avatar
dcuai committed
100
首先需要安装额外的依赖,然后运行仓库中的 api.py:
101
```
dcuai's avatar
dcuai committed
102
pip install fastapi uvicorn
103
104
python api.py
```
wangsen's avatar
wangsen committed
105
程序会自动下载 sat 模型,默认部署在本地的 8080 端口,通过 POST 方法进行调用。下面是用curl请求的例子(修改path/to/example.jpg为本地路径),一般而言可以也可以使用代码方法进行POST。
106
107
108
109
110
111
112
113
114
115
116

```
echo "{\"image\":\"$(base64 path/to/example.jpg)\",\"text\":\"描述这张图片\",\"history\":[]}" > temp.json
curl -X POST -H "Content-Type: application/json" -d @temp.json http://127.0.0.1:8080
```

得到的返回值为

```
{"result":"这张照片中,一个年轻女子坐在沙发上,手里拿着笔记本电脑。她可能正在工作或学习,或者只是放松和享受时间。","history":[["描述这张图片","这张照片中,一个年轻女子坐在沙发上,手里拿着笔记本电脑。她可能正在工作或学习,或者只是放松和享受时间。"]],"status":200,"time":"2024-01-22 11:16:35"}
```
wangsen's avatar
wangsen committed
117

dcuai's avatar
dcuai committed
118
## result
dcuai's avatar
dcuai committed
119
120
 以目录中examples/1.jpeg图片进行推理为例
 <div align=center>
wangsen's avatar
wangsen committed
121
122
    <img src="./examples/1.jpeg"/>
</div>
dcuai's avatar
dcuai committed
123
124
125
126
推理后的结果为:
&nbsp;
"泰坦尼克号,男女主角在船头拥抱。海水翻涌,他们的爱情如海浪般澎湃。 夕阳余晖下,两人的身影渐渐消失。"

wangsen's avatar
wangsen committed
127

128
129
130
131
### 精度

## 应用场景
### 算法类别
dcuai's avatar
dcuai committed
132
图像理解
133
### 热点应用行业
wangsen's avatar
wangsen committed
134
零售,广媒,科研 
mashun1's avatar
update  
mashun1 committed
135
136
137

## 预训练权重

chenzk's avatar
chenzk committed
138
[huggingface](https://huggingface.co/THUDM/visualglm-6b/tree/main)
mashun1's avatar
update  
mashun1 committed
139

140
## 源码仓库及问题反馈
chenzk's avatar
chenzk committed
141
- http://developer.sourcefind.cn/codes/modelzoo/visualglm6b_pytorch.git
142
143
## 参考资料
- https://github.com/THUDM/VisualGLM-6B?tab=readme-ov-file
James Tharpe's avatar
James Tharpe committed
144