目录
背景
第一部分 Sqlflow安装部署
第二部分 机器学习例子
第三部分 系统架构
参考文献及资料
背景
2019年5 月 6 日,在QCon 全球软件开发大会(北京站)上,蚂蚁金服副 CTO 胡喜正式宣布开源机器学习工具 SQLFlow。实际上3个月前sqkflow项目已经在github上开源了。
本篇文件主要参考sqlflow官网的案例和说明对sqlflow进行了体验,并记录下来。
sqlflow按照官网的定义,将SQL引擎(例如MySQL,Hive,SparkSQL或SQL Server)和tensorflow和其他机器学习的桥梁。扩展了SQL语言,支持对机器学习模型训练、预测和推理。
目前开源版本仅支持MySQL和TensorFlow
介绍文档中也提到,在sqlflow之前也有SQL引擎提供了支持机器学习功能的扩展。
- Microsoft SQL Server:Microsoft SQL Server具有机器学习服务,可以将R或Python中的机器学习程序作为外部脚本运行。
- Teradata SQL for DL:Teradata还提供RESTful服务,可以从扩展的SQL SELECT语法中调用。
- Google BigQuery:Google BigQuery通过引入
CREATE MODEL
语句在SQL中实现机器学习。
第一部分 Sqlflow安装部署
1.1 部署mysql做为数据源
(1)构建镜像
官网提供了一个dockerfile,可以git clone整个项目。
1 | 进入Dockerfile文件所在目录 |
可以查看创建了一个docker images:
1 | docker images |
(2)启动mysql容器
用镜像启mysql容器:
1 | docker run --rm -d --name sqlflowdata \ |
使用镜像:sqlflow:data,启动一个名为:sqlflowdata的容器,并且把3306端口映射到宿主机。mysql的root用户的密码为root。
(3)生成测试数据
进入容器:
1 | docker exec -it sqlflowdata bash |
执行SQL语句:
1 | 建库建表,注意宿主机目录:datasets |
至此完成mysql容器的启动和测试数据的生成。按Ctrl+P+Q,正常退出不关闭容器。
1.2 使用docker部署slqflow
(1)拉取镜像并启动容器
首先从docker Hub上拉取镜像:
1 | docker pull sqlflow/sqlflow:latest |
启动容器:
1 | docker run --rm -it --name sqlflowServer -p 8888:8888 sqlflow/sqlflow:latest \ |
命令使用镜像:sqlflow/sqlflow:lates,启动了名为:sqlflowServer的容器。将8888端口映射到宿主机上。这里需要配置datasource,指向mysql使用套接字:192.168.31.3:3306。这里使用之前构建的mysql容器的连接信息,可以根据实际情况配置。
如果mysql套接字配置错误,报错信息:connect: connection refused
如果没有报错:
1 | 2019/05/06 14:47:30 Server Started at :50051 |
这里启动了Jupyter Notebook服务,对外服务端口为8888,并且映射到宿主机。例如这里可以使用下面的url范围web界面:http://192.168.31.3:8888/?token=265b3fc832b5b48689fa9f88483125dc9335188dd7c1d863
(2)简单测试
Jupyter Notebook 新建一个python3交互环境。测试一下:
1 | %sqlflow |
第二部分 机器学习例子
使用iris数据集体验机器学习的例子,使用Jupyter Notebook 完成:
(1)训练模型:
1 | %%sqlflow |
使用iris.train表中的数据训练神经网络。
模型训练结果输入到sqlflow_models.my_dnn_model,回显训练正确率为:0.97273
1 | Training set accuracy: 0.97273 |
(2)模型应用
使用训练结果对数据进行预测应用:
1 | %%sqlflow |
使用iris.test中的数据喂给训练好的模型,预测结果输出到表:iris.predict。
1 | Done predicting. Predict table : iris.predict |
查看结果表中的数据案例:
1 | %%sqlflow |
1 | +--------------+-------------+--------------+-------------+-------+ |
第三部分 系统架构
系统原型使用下面的架构:
1 | SQL statement -> our SQL parser --standard SQL-> MySQL |
原型运行的数据流为:
- 它通过MySQL Connector Python API从MySQL检索数据
- 从MySQL检索模型
- 通过调用用户指定的TensorFlow估算器训练模型或使用训练模型进行预测
- 并将训练过的模型或预测结果写入表格
参考文献及资料
1、sqlflow项目官网 链接:https://github.com/sql-machine-learning/sqlflow
2、会 SQL 就能搞定 AI!蚂蚁金服重磅开源机器学习工具 SQLFlow 链接:https://www.infoq.cn/article/vlVqC68h2MT-028lh68C