vanna+qwen实现私有模型的SQL转换

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 本文档介绍了如何在本地部署Vanna服务以使用Qwen模型进行text2sql转换。首先,通过`snapshot_download`下载Qwen-7B-Chat模型,并安装相关依赖。接着,修改`openai_api.py`设置本地LLM服务接口。然后,安装并配置Vanna Flask服务,包括自定义LLM服务、连接数据库以及修改端口。为了解决内网访问问题,使用ngrok或natapp进行内网穿透,提供公网访问。最后,处理了chromadb包中自动下载资源的问题,以防网络不佳导致的失败。通过这些步骤,实现了使用本地Qwen模型的Vanna服务。

1. 基本介绍

vanna作为先进灵活的text2sql转换服务,能够在页面上灵活添加训练的DDL和SQL语句,提供 RAG "model",vanna官方提供支持openai、Ollma等LLM模型,但在国内希望本地部署,使用自己的元数据信息不外泄,因此本文帮助实现vanna+本地的QWEN模型实现本地访问。

2. 实现步骤

2.1部署Qwen通义千问的qwen-7B-Chat模型

#模型下载

from modelscope import snapshot_download

model_dir = snapshot_download('qwen/Qwen-14B',cache_dir='./model')

#下载Qwen仓库代码

!git clone https://github.com/QwenLM/Qwen.git

然后编辑openai_api.py,设置checkpoint_path= '/mnt/workspace/model/qwen/Qwen-7B-Chat'

              替换前                                                                              替换后

image.png 1710927871254.png

文件替换完成后,就可以启动LLM服务

然后安装依赖包:pip install -r requirements.txt

注意:安装完毕后检查下transformers的版本,最好保持在pip install transformers==4.30.2

python ./openai_api.py


1710928504634.png

2.2部署vanna服务

pip install 'vanna[chromadb,openai]'

pip install pymysql


下载vanna-flask版本的服务

git clone https://github.com/vanna-ai/vanna-flask.git

#使用自定义的llm服务接口

from vanna.remote import VannaDefault

from vanna.openai.openai_chat import OpenAI_Chat

from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore

from vanna.flask import VannaFlaskApp

from openai import OpenAI

import pandas as pd

import pymysql

client = OpenAI(

   api_key="...",

   base_url="http://127.0.0.1:8000/v1/",

   default_headers = {"x-foo": "true"}

)

class MyVanna(ChromaDB_VectorStore,OpenAI_Chat):

   def __init__(self,client=None,config=None):

       ChromaDB_VectorStore.__init__(self,config=config)

       OpenAI_Chat.__init__(self,client=client,config=config)

vn = MyVanna(client=client,config={"model": "Qwen-7B",})   #chatglm2-6b

vn.max_tokens = 800

vn.temperature = 0.5

#vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')

修改app.py中的代码 :

注释掉:load_dotenv()

1710928273519.png

然后修改vn的初始化逻辑,替换上面的代码:

1710928306512.png 1710928358939.png

修改启动端口:增加port=18888

1710928403583.png


启动vanna    python ./app.py,输出本地的地址:http://127.0.0.1:18888

1710928563890.png

2.3内网穿透部署,提供公网访问地址

由于使用的是阿里的PAI训练机,本地地址无法在公网上访问极度不方便,因此就用到内网穿透的功能,可以使用ngrok或natapp。

ngrok方式:

from pyngrok import ngrok

ngrok.set_auth_token("")                 #设置访问ngrok的认证token,这个token需要在ngrok上注册个人账号后会生成的

ngrok_tunnel = ngrok.connect(18888)          #建立通道,该命令执行后,会自动生成一个公网的域名地址,可以在公网上访问

这段代码加入到app.run()前面。

由于ngrok服务是国外的,经常被墙,可能在国内北方地区能够访问,南方地区就不能访问,因此可以使用国内的内网穿透服务natapp

natapp方式:

同样,需在natapp上注册账号获取token,并建立一个隧道服务。这个隧道直接绑定到内网服务的端口上的,并且可以设置代理地址访问时是否需要认证登录使用,保障安全。

1710928953488.png



在内网机器上下载linux版的natapp软件

wget https://cdn.natapp.cn/assets/downloads/clients/2_4_0/natapp_linux_amd64/natapp

并设置可执行权限

1710929055585.png

chmod 755 natapp

然后执行:

./natapp -authtoken=24dfff7012ce9095

1710929169664.png

注意:每次启动生成的公网域名地址是不同的。

1710929245469.png

1710930041017.png

开启您的Text2SQL之旅吧。




3.问题记录

在chromadb包里还有个自动去公网下载资源的地方,若网络不好则会下载失败,这个主要用于存储用户自定义训练信息的向量存储。

File "/opt/conda/lib/python3.10/site-packages/chromadb/utils/embedding_functions.py", line 514, in model

   return self.ort.InferenceSession(

 File "/opt/conda/lib/python3.10/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 419, in __init__

   self._create_inference_session(providers, provider_options, disabled_optimizers)

 File "/opt/conda/lib/python3.10/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 472, in _create_inference_session

   sess = C.InferenceSession(session_options, self._model_path, True, self._read_config_from_model)

onnxruntime.capi.onnxruntime_pybind11_state.InvalidProtobuf: [ONNXRuntimeError] : 7 : INVALID_PROTOBUF : Load model from /root/.cache/chroma/onnx_models/all-MiniLM-L6-v2/onnx/model.onnx failed:Protobuf parsing failed.

1710929761062.png


wget https://chroma-onnx-models.s3.amazonaws.com/all-MiniLM-L6-v2/onnx.tar.gz


vi /opt/conda/lib/python3.10/site-packages/chromadb/utils/embedding_functions.py


把MODEL_DOWNLOAD_URL的地址换成本地的地址:

file:///mnt/workspace/vanna-flask/onnx.tar.gz

1710929988919.png







相关文章
|
15天前
|
SQL 自然语言处理 数据库连接
使用vanna实现Text2SQL
这篇文章介绍了如何使用Vanna将自然语言转换为SQL查询,包括安装Vanna、配置数据库连接以及运行查询的全过程。
46 0
|
2月前
|
SQL 数据管理 关系型数据库
《SQL转换秘籍:Vanna+Qwen双剑合璧,轻松实现私有模型转换》——揭秘如何利用Vanna和Qwen这两款神级工具,让你的SQL数据管理和转换如虎添翼!
【8月更文挑战第17天】Vanna与Qwen是两款优秀的开源数据库管理工具,助力用户高效管理及转换SQL数据。先安装Vanna和Qwen,随后在Vanna中创建并编辑私有模型,定义表结构等。完成模型构建后,导出为SQL文件。接着,在Qwen中导入此文件,并根据目标数据库类型(如MySQL)转换SQL语句。例如,生成创建`users`表的SQL代码。这两款工具显著提升了数据库管理工作流程的便捷性与效率。
130 1
|
2月前
|
机器学习/深度学习 SQL 数据采集
"解锁机器学习数据预处理新姿势!SQL,你的数据金矿挖掘神器,从清洗到转换,再到特征工程,一网打尽,让数据纯净如金,模型性能飙升!"
【8月更文挑战第31天】在机器学习项目中,数据质量至关重要,而SQL作为数据预处理的强大工具,助力数据科学家高效清洗、转换和分析数据。通过去除重复记录、处理缺失值和异常值,SQL确保数据纯净;利用数据类型转换和字符串操作,SQL重塑数据结构;通过复杂查询生成新特征,SQL提升模型性能。掌握SQL,就如同拥有了开启数据金矿的钥匙,为机器学习项目奠定坚实基础。
33 0
|
2月前
|
SQL 存储 NoSQL
数据模型与应用场景对比:SQL vs NoSQL
【8月更文第24天】随着大数据时代的到来,数据存储技术也在不断演进和发展。传统的SQL(Structured Query Language)数据库和新兴的NoSQL(Not Only SQL)数据库各有优势,在不同的应用场景中发挥着重要作用。本文将从数据模型的角度出发,对比分析SQL和NoSQL数据库的特点,并通过具体的代码示例来说明它们各自适用的场景。
85 0
|
4月前
|
SQL 存储 数据建模
SQL 语言:对象关系数据模型
SQL 语言:对象关系数据模型
41 3
|
5月前
|
SQL 自然语言处理 数据库
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
|
5月前
|
SQL 自然语言处理 关系型数据库
NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]
NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]
NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]
|
1月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
3月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
85 13