README.md 4.54 KB
Newer Older
mashun1's avatar
omnisql  
mashun1 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# OmniSQL

## 论文

`OmniSQL: Synthesizing High-quality Text-to-SQL Data at Scale`

* https://arxiv.org/pdf/2503.02240

## 模型结构
该框架分为四个关键步骤:
- 基于网页表的数据库合成:利用网络上丰富的表格数据,合成出符合现实商业场景的数据库。通过提示LLM生成与给定表格相关的数据库,包括多个关系表及其结构信息。
- 复杂度感知的SQL查询生成:根据合成的数据库生成SQL查询,LLM会根据指定的复杂度级别(简单、中等、复杂和高度复杂)生成相应的SQL查询。
- 风格化自然语言问题合成:将生成的SQL查询转换为自然语言问题,采用多种语言风格(如正式、口语、模糊等),以增强语言多样性。
- 链式推理解决方案合成:为每个合成的文本到SQL数据生成逐步的链式推理解决方案,详细说明从问题到SQL查询的推理过程,增强数据的可解释性。

![alt text](readme_imgs/arch.png)

## 算法原理

主要原理是利用大型语言模型(LLMs)和自动化预处理与后处理策略来生成高质量和多样化的数据样本,从而减少对人工干预的依赖,并使用生成的数据在现有的LLM基础上训练模型。

![alt text](readme_imgs/alg.png)

## 环境配置

### Docker(方法一)
    
    docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.4.1-ubuntu22.04-dtk25.04-py3.10

    docker run --shm-size 500g --network=host --name=omnisql --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/ -v /opt/hyhal:/opt/hyhal:ro -it <your IMAGE ID> bash

    pip install -r requirements.txt

### Dockerfile(方法二)

    docker build -t <IMAGE_NAME>:<TAG> .

    docker run --shm-size 500g --network=host --name=omnisql --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/ -v /opt/hyhal:/opt/hyhal:ro -it <your IMAGE ID> bash
    
    pip install -r requirements.txt

### Anaconda(方法三)

chenzk's avatar
chenzk committed
44
1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装: https://developer.sourcefind.cn/tool/
mashun1's avatar
omnisql  
mashun1 committed
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

```
dtk: 25.04
python: 3.10
torch: 2.4.1
deepspeed: 0.14.2
flash-attn: 2.6.1
vllm: 0.6.2
triton: 3.0.0
```

2、其他非特殊库直接按照requirements.txt安装

```
pip install -r requirments.txt
```

## 数据集

下载至`train_and_evaluate`并解压.

mashun1's avatar
mashun1 committed
66
训练数据 - [hf](https://huggingface.co/datasets/seeklhy/OmniSQL-datasets/) | [modelscope](https://www.modelscope.cn/datasets/seeklhy/OmniSQL-datasets)
mashun1's avatar
omnisql  
mashun1 committed
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

测试数据 - [googledriver](https://drive.google.com/file/d/1iNa1WgA9tN_OFna08nq_tHZdXx9Lz2vO/view) 

除此之外也可以按需自行合成数据,参考`data_synthesis`.

本项目提供了用于测试训练功能的数据,位于`train_and_evaluate/data`.

## 训练

```bash
cd train_and_evaluate

# train OmniSQL-7B using SynSQL-2.5M
sh train_omnisql_7b.sh
# train OmniSQL-14B using SynSQL-2.5M
sh train_omnisql_14b.sh
# train OmniSQL-32B using SynSQL-2.5M
sh train_omnisql_32b.sh
```

mashun1's avatar
mashun1 committed
87
注意:训练前需修改文件中的模型及数据路径(参考`train_omnisql_7b.sh`),更多设置见`accelerate_config_(7/14/32)b.yaml`
mashun1's avatar
omnisql  
mashun1 committed
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
151
152
153
154
155
156
157
158
159
160
161
162

## 推理

注意:在运行推理前按需修改代码中的模型路径及prompt。

### Transformers

```bash
cd inferences

python tf_inference.py
```

### vllm

```bash
cd inferences

python vllm_inference.py
```

### vllm_serve

```bash
vllm serve /path/to/model -tp 1
```

```bash
cd inferences

bash vllm_inference.sh
```


## result

![alt text](readme_imgs/result.png)

### 精度

||loss|
|:---:|:---:|
|N卡|0.1449|
|dcu|0.1448|

epoch: 1

## 应用场景

### 算法类别

`对话问答`

### 热点应用行业

`电商,教育,广媒`

## 预训练权重

下载后的模型放在 `ckpts` 目录(自行创建)

| Model  | url |
|-----------|------------------|
| OmniSQL-7B  | [✨ Modelscope](https://modelscope.cn/models/seeklhy/OmniSQL-7B), [🤗 HuggingFace](https://huggingface.co/seeklhy/OmniSQL-7B) |
| OmniSQL-14B | [✨ Modelscope](https://modelscope.cn/models/seeklhy/OmniSQL-14B), [🤗 HuggingFace](https://huggingface.co/seeklhy/OmniSQL-14B) |
| OmniSQL-32B | [✨ Modelscope](https://modelscope.cn/models/seeklhy/OmniSQL-32B), [🤗 HuggingFace](https://huggingface.co/seeklhy/OmniSQL-32B) |


## 源码仓库及问题反馈

* https://developer.sourcefind.cn/codes/modelzoo/omnisql_pytorch

## 参考资料

* https://github.com/RUCKBReasoning/OmniSQL