初始化项目,由ModelHub XC社区提供模型
Model: lanfers/gaussdb-sql-expert-7b Source: Original Platform
This commit is contained in:
272
README.md
Normal file
272
README.md
Normal file
@@ -0,0 +1,272 @@
|
||||
---
|
||||
license: apache-2.0
|
||||
language:
|
||||
- zh
|
||||
- en
|
||||
base_model: Qwen/Qwen2.5-Coder-7B-Instruct
|
||||
tags:
|
||||
- sql
|
||||
- text2sql
|
||||
- database
|
||||
- gaussdb
|
||||
- lora
|
||||
- fine-tuned
|
||||
pipeline_tag: text-generation
|
||||
library_name: transformers
|
||||
datasets:
|
||||
- custom
|
||||
model-index:
|
||||
- name: GaussDB-SQL-Expert-7B
|
||||
results:
|
||||
- task:
|
||||
type: text-generation
|
||||
name: Database SQL Expert
|
||||
metrics:
|
||||
- name: Text2SQL Accuracy
|
||||
type: accuracy
|
||||
value: 100
|
||||
- name: SQL Migration Accuracy
|
||||
type: accuracy
|
||||
value: 100
|
||||
- name: Error Diagnosis Accuracy
|
||||
type: accuracy
|
||||
value: 100
|
||||
- name: SQL Tuning Accuracy
|
||||
type: accuracy
|
||||
value: 90
|
||||
- name: Boundary Safety Accuracy
|
||||
type: accuracy
|
||||
value: 80
|
||||
- name: Overall Accuracy
|
||||
type: accuracy
|
||||
value: 94
|
||||
---
|
||||
|
||||
# GaussDB SQL Expert 7B
|
||||
|
||||
**[中文版 README](README_zh.md)**
|
||||
|
||||
A domain-specific database assistant fine-tuned on Qwen2.5-Coder-7B-Instruct, specialized in SQL generation, optimization, cross-database migration, error diagnosis, and more.
|
||||
|
||||
## Model Overview
|
||||
|
||||
| Item | Details |
|
||||
|------|---------|
|
||||
| Base Model | [Qwen/Qwen2.5-Coder-7B-Instruct](https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct) |
|
||||
| Parameters | 7.6B (Dense) |
|
||||
| Fine-tuning | LoRA (rank=64, alpha=128, target=all linear layers) |
|
||||
| Trainable Params | 161M (2.08% of total) |
|
||||
| Training Data | 29,863 ShareGPT conversations + 1,571 validation |
|
||||
| Hardware | 1x NVIDIA H100 80GB |
|
||||
| Training Time | 3.5 hours |
|
||||
| Framework | [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory) v0.9.4 |
|
||||
| Precision | BF16 |
|
||||
|
||||
## Core Capabilities
|
||||
|
||||
- **Text2SQL**: Natural language to SQL with support for window functions, recursive CTEs, MERGE, subqueries, and more
|
||||
- **SQL Tuning**: Index invalidation analysis, execution plan interpretation, parameter optimization advice
|
||||
- **SQL Migration**: Oracle / MySQL / SQL Server → GaussDB syntax conversion (50+ difference points)
|
||||
- **Error Diagnosis**: Deadlock, WAL bloat, connection exhaustion, OOM, and 20+ common production issues
|
||||
- **SQL Explanation**: Logic breakdown and readability analysis of complex queries
|
||||
- **Boundary Safety**: Dangerous operation interception, clarification requests, out-of-scope rejection
|
||||
|
||||
**Supports 9 major databases**: GaussDB, Oracle, MySQL, PostgreSQL, SQL Server, PolarDB, DM (Dameng), KingBase, Sybase
|
||||
|
||||
## Benchmark Results
|
||||
|
||||
Evaluated on 100 automated test cases (20 per category) using keyword matching:
|
||||
|
||||
| Category | Score | Notes |
|
||||
|----------|-------|-------|
|
||||
| Text2SQL | 20/20 (100%) | Window functions, CTE, MERGE, pagination all correct |
|
||||
| SQL Tuning | 18/20 (90%) | Index invalidation, implicit conversion, parameter tuning |
|
||||
| SQL Migration | 20/20 (100%) | Oracle/MySQL/SQL Server → GaussDB conversion |
|
||||
| Error Diagnosis | 20/20 (100%) | Deadlock, WAL, OOM, connection exhaustion |
|
||||
| Boundary Safety | 16/20 (80%) | Dangerous operation alerts, out-of-scope rejection |
|
||||
| **Overall** | **94/100 (94%)** | |
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Requirements
|
||||
|
||||
- Python >= 3.9
|
||||
- PyTorch >= 2.0
|
||||
- GPU with >= 16GB VRAM (recommended) or CPU (slower)
|
||||
- ~15GB disk space for model weights
|
||||
|
||||
### Installation
|
||||
|
||||
```bash
|
||||
# 1. Install dependencies
|
||||
pip install torch transformers accelerate
|
||||
|
||||
# 2. (Optional) Install Flash Attention 2 for faster inference on NVIDIA GPUs
|
||||
pip install flash-attn --no-build-isolation
|
||||
```
|
||||
|
||||
### Download Model
|
||||
|
||||
The model will be downloaded automatically on first use via `from_pretrained()`. You can also download it manually:
|
||||
|
||||
```bash
|
||||
# Option A: Using huggingface-cli
|
||||
pip install huggingface_hub
|
||||
huggingface-cli download lanfers/gaussdb-sql-expert-7b --local-dir ./gaussdb-sql-expert-7b
|
||||
|
||||
# Option B: Using git-lfs
|
||||
git lfs install
|
||||
git clone https://huggingface.co/lanfers/gaussdb-sql-expert-7b
|
||||
|
||||
# Option C: Using Python
|
||||
python -c "
|
||||
from huggingface_hub import snapshot_download
|
||||
snapshot_download('lanfers/gaussdb-sql-expert-7b', local_dir='./gaussdb-sql-expert-7b')
|
||||
"
|
||||
```
|
||||
|
||||
> **China Mainland Users**: If download is slow, use a mirror:
|
||||
> ```bash
|
||||
> HF_ENDPOINT=https://hf-mirror.com huggingface-cli download lanfers/gaussdb-sql-expert-7b --local-dir ./gaussdb-sql-expert-7b
|
||||
> ```
|
||||
|
||||
### Inference
|
||||
|
||||
```python
|
||||
import torch
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
|
||||
model_path = "lanfers/gaussdb-sql-expert-7b"
|
||||
device = "cuda" # or "mps" (Mac) / "cpu"
|
||||
|
||||
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
|
||||
model = AutoModelForCausalLM.from_pretrained(
|
||||
model_path,
|
||||
torch_dtype=torch.float16,
|
||||
device_map=device,
|
||||
trust_remote_code=True,
|
||||
)
|
||||
model.eval()
|
||||
|
||||
messages = [
|
||||
{"role": "system", "content": "You are a professional database expert assistant, proficient in Oracle, MySQL, PostgreSQL, GaussDB, PolarDB, DM, KingBase, Sybase, SQL Server."},
|
||||
{"role": "user", "content": "Database: GaussDB 505\n\nFind the top 3 highest-paid employees in each department, showing department name, employee name, salary, and rank."},
|
||||
]
|
||||
|
||||
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
||||
inputs = tokenizer(text, return_tensors="pt").to(device)
|
||||
|
||||
with torch.no_grad():
|
||||
outputs = model.generate(
|
||||
**inputs,
|
||||
max_new_tokens=1024,
|
||||
temperature=0.7,
|
||||
do_sample=True,
|
||||
top_p=0.8,
|
||||
repetition_penalty=1.05,
|
||||
)
|
||||
|
||||
response = tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
|
||||
print(response)
|
||||
```
|
||||
|
||||
### Example Outputs
|
||||
|
||||
**Input**: Find the top 3 highest-paid employees in each department
|
||||
|
||||
**Output**:
|
||||
```sql
|
||||
SELECT dept_name, emp_name, salary, rk
|
||||
FROM (
|
||||
SELECT d.dept_name, e.emp_name, e.salary,
|
||||
DENSE_RANK() OVER(PARTITION BY e.dept_id ORDER BY e.salary DESC) AS rk
|
||||
FROM employees e
|
||||
JOIN departments d ON e.dept_id = d.dept_id
|
||||
) t
|
||||
WHERE rk <= 3;
|
||||
```
|
||||
|
||||
**Input**: Migrate Oracle to GaussDB: `SELECT NVL(name, 'unknown') FROM users WHERE ROWNUM <= 10`
|
||||
|
||||
**Output**:
|
||||
```sql
|
||||
SELECT COALESCE(name, 'unknown') FROM users LIMIT 10;
|
||||
-- NVL → COALESCE, ROWNUM → LIMIT
|
||||
```
|
||||
|
||||
## Training Details
|
||||
|
||||
### Hyperparameters
|
||||
|
||||
```yaml
|
||||
# LoRA config
|
||||
lora_rank: 64
|
||||
lora_alpha: 128
|
||||
lora_dropout: 0.05
|
||||
lora_target: all # q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
|
||||
|
||||
# Training config
|
||||
learning_rate: 2.0e-5
|
||||
lr_scheduler_type: cosine
|
||||
warmup_ratio: 0.1
|
||||
num_train_epochs: 3
|
||||
per_device_train_batch_size: 8
|
||||
gradient_accumulation_steps: 4 # effective batch_size = 32
|
||||
cutoff_len: 2048
|
||||
optim: adamw_torch
|
||||
bf16: true
|
||||
gradient_checkpointing: true
|
||||
```
|
||||
|
||||
### Training Loss
|
||||
|
||||
```
|
||||
Total steps: 2,799 | Duration: 3h 29m
|
||||
|
||||
Step Epoch Train Loss Eval Loss
|
||||
200 0.21 1.217 1.216
|
||||
600 0.64 1.038 1.104
|
||||
1000 1.07 1.035 1.076
|
||||
1400 1.50 1.062 1.058
|
||||
1800 1.93 1.062 1.045
|
||||
2200 2.36 0.966 1.044
|
||||
2600 2.79 0.959 1.042 ← best checkpoint
|
||||
```
|
||||
|
||||
Final train_loss=1.039, eval_loss=1.042. Near-identical values indicate no overfitting.
|
||||
|
||||
### Training Data Distribution
|
||||
|
||||
| Category | Proportion | Description |
|
||||
|----------|-----------|-------------|
|
||||
| Text2SQL | ~30% | Natural language → SQL generation |
|
||||
| SQL Tuning | ~20% | Slow query analysis, index optimization |
|
||||
| SQL Migration | ~15% | Cross-database syntax conversion |
|
||||
| Error Diagnosis | ~15% | Production incident troubleshooting |
|
||||
| Operations | ~10% | Parameter tuning, backup & recovery |
|
||||
| Boundary Safety | ~10% | Dangerous operation alerts, scope rejection |
|
||||
|
||||
## Limitations
|
||||
|
||||
- Boundary safety has room for improvement: may execute `DELETE` without `WHERE` or `DROP DATABASE` without warning
|
||||
- Limited coverage of GaussDB 505 advanced features (e.g., column-store tables, distributed features)
|
||||
- Text-only input; does not support images (e.g., execution plan screenshots)
|
||||
- Recommended to add inference-side safety rules for production environments
|
||||
|
||||
## Citation
|
||||
|
||||
If this model is helpful, please cite:
|
||||
|
||||
```bibtex
|
||||
@misc{gaussdb-sql-expert-7b,
|
||||
title={GaussDB SQL Expert 7B},
|
||||
author={lanfers},
|
||||
year={2026},
|
||||
publisher={HuggingFace},
|
||||
url={https://huggingface.co/lanfers/gaussdb-sql-expert-7b}
|
||||
}
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
Fine-tuned from [Qwen2.5-Coder-7B-Instruct](https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct) under the Apache 2.0 License.
|
||||
Reference in New Issue
Block a user