演讲实录|OpenMLDB 与阿里云 MaxCompute 生态集成

news2024/11/25 15:19:59

在 OpenMLDB 第 8 期 Meetup 中,OpenMLDB PMC 陈迪豪以出租车行车时间预测问题为例,使用 OpenMLDB 基于阿里云 MaxCompute 的 Serverless 服务搭建机器学习应用,从数据引入开始,实现了端到端的机器学习应用全流程构建。

云服务作为快速整合、高效计算的服务模式,极大推动着大数据的分析处理和 AI应用的升级和进化。为更好的应对数据挑战,加速AI落地,OpenMLDB 将其高性能的离线和在线特征计算引擎与阿里云 MaxCompute 的海量数据计算能力进行生态整合,满足云上开发者的 AI 应用构建需求。

OpenMLDB 与 MaxCompute 的生态整合将会于12月中旬发布的v0.7.0版本中发布,欢迎大家关注。

OpenMLDB 简介
OpenMLDB 是一个开源机器学习数据库,致力于闭环解决 AI 工程化落地的数据治理难题,为企业提供全栈的低门槛特征数据计算和管理平台。OpenMLDB 包含 Feature Store 的全部功能,并且提供更为完整的 FeatureOps 全栈方案。除了提供特征存储功能,还具有基于 SQL 的低门槛数据库开发体验、面向特征计算优化的 OpenMLDB Spark 发行版、针对实时特征计算优化的索引结构、特征上线服务、企业级运维和管理等功能,让特征工程开发回归于本质——专注于高质量的特征计算脚本开发。

MaxCompute 简介
MaxCompute 是适用于数据分析场景的企业级 SaaS (Software as a Service) 模式云数据仓库,以Serverless 架构提供快速、全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使用户可以经济并高效地分析处理海量数据。MaxCompute 还深度融合了阿里云的一系列产品如:DataWorks、机器学习 PAI、Quick BI,使得其云上生态平滑高效。

演示流程图

下图为应用搭建流程图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wpX9TyDT-1671011242332)(null)]

  • 离线部分: 将原始数据集导入到阿里云 OSS,再通过阿里云 DataWorks 将数据格式转换成 MaxCompute 表,然后使用 OpenMLDB 的离线引擎来对数据做特征抽取得到样本数据,再将样本数据传入 MaxCompute,然后可以使用阿里云 PAI(机器学习平台)做模型训练,或者使用开源机器学习框架如 Tensorflow、Pytorch、LightGBM 等做模型训练得到机器学习模型(本演示使用开源模型训练工具 LightGBM)。
  • 在线部分: 使用 OpenMLDB 的在线引擎对原始在线数据做实时特征计算,结合离线训练好的模型进行在线预测或推理,实现机器学习场景端到端的应用。整个过程是硬实时的,可以在 20ms 以内完成。
    为了保证离线在线特征一致性,离线的特征抽取使用 OpenMLDB 离线计算引擎,而运行的后端服务为阿里云的 MaxCompute 云服务。

演示视频

【https://www.zhihu.com/zvideo/1583837565811060737】

详细流程

根据陈迪豪 meetup 上的演示,其详细流程分为六个步骤:

  1. 环境准备:开通阿里云账户,下载 MaxCompute 包、OpenMLDB 包
  2. 离线数据引入:使用 OSS、DataWorks、MaxCompute 导入离线数据
  3. 特征抽取计算:编写 OpenMLDB SQL 提交到 MaxCompute
  4. 离线模型训练:导入离线样本数据并进行机器学习模型训练
  5. 特征抽取 SQL 脚本上线:将第 3 步中用于特征抽取的 SQL 脚本部署上线,以提供在线的特征抽取
  6. 在线模型预测:基于 OpenMLDB 在线服务与机器学习模型实现 E2E 预测

步骤详解

  1. 环境准备:开通阿里云账户,下载 MaxCompute 包、OpenMLDB 包
  • 开通阿里云账户可参考阿里云官方文档 https://help.aliyun.com/document_detail/58226.html,下图展示开通 MaxCompute 服务后可查看的项目详情。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jbf2T8AI-1671011239356)(null)]
  • 下载 MaxCompute 包可参考阿里云官方关于搭建本地环境的文档:https://help.aliyun.com/document_detail/118144.html
  • OpenMLDB 包下载可参考官方的快速上手文档:https://openmldb.ai/docs/zh/main/quickstart/openmldb_quickstart.html
    快速了解如何使用阿里云服务以及 OpenMLDB 的部署流程后,后面会详细介绍将两者整合的完整流程。
  1. 离线数据引入:使用 OSS、DataWorks、MaxCompute 导入离线数据
  2. 利用 OSS 的命令行工具在阿里云 OSS 桶内创建目录 openmldb_maxcompute_demo2,然后上传本地样本数据 taxi_tour_table_train_simple.csv 至该目录,数据格式为 .csv 或 .parquet 均可。本地测试数据可在 OpenMLDB 快速上手的 Docker 镜像中找到,详细使用文档可参考 https://openmldb.ai/docs/zh/main/quickstart/openmldb_quickstart.html 。ossutil 工具也可以在阿里云官方文档中下载 https://help.aliyun.com/document_detail/120075.html 。
./ossutil mkdir oss://tobe-bucket/openmldb_maxcompute_demo2/
./ossutil cp ./taxi-trip/data/taxi_tour_table_train_simple.csv oss://tobe-bucket/openmldb_maxcompute_demo2/
  1. 数据转换为 MaxCompute 表的格式,再引入到 MaxCompute。需要使用阿里云 DataWorks 工具,创建一个 demo 流程,拉取一个离线同步的算子:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lz2sU0gE-1671011240515)(null)]
    点击算子即可进行数据格式的转换,在数据来源列,设置样本数据的 OSS 数据源文本类型文本路径,在数据去向列设置数据源为 MaxCompute
    file
    单击一键生成目标表结构,手动更改自动生成的 schema 为下方代码块中的内容:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FRwXXfnw-1671011239135)(null)]
CREATE TABLE IF NOT EXISTS openmldb_maxcompute_demo2_input(id string, vendor_id int, pickup_datetime timestamp, dropoff_datetime timestamp, passenger_count int, pickup_longitude double, pickup_latitude double, dropoff_longitude double, dropoff_latitude double, store_and_fwd_flag string, trip_duration int);

建表完成后,表名会自动更新为openmldb_maxcompute_demo2_input,页面下方会显示源数据和目标数据源之间字段的映射。
最后进行数据集成资源组配置,若使用 MaxCompute 比较多,可以将方案设置成独享数据集成资源组,本文档作演示目的,将其设置为调试资源组>公共资源组
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KNrbF51u-1671011235382)(https://openmldb.ai/wordpress/wp-content/uploads/2022/12/image-1670831867256.png)]
保存方案:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CbIeoP0t-1671011243865)(null)]
然后运行方案:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nhhvYOb-1671011244251)(null)]
最后进入阿里云 MaxCompute 工作台,可以看到创建好的表记录:
file
至此,离线数据顺利引入 MaxCompute。
选中表之后,基于阿里云的云上生态,可以选择 MaxCompute 集成的功能来对数据进行预览或预处理等,例如单击 SQL 查询可以调用 DataWorks 平台:
file
3. 特征抽取计算:编写 OpenMLDB SQL 提交到 MaxCompute

  1. 需要提前配置好 MaxCompute 的运行环境,同样参考阿里云 MaxCompute 官方文档 https://help.aliyun.com/document_detail/118144.html。下载对应的 Spark 包后,需要修改 spark-defaults.conf 配置文件,填写个人申请的 MaxCompute 项目名以及 AKSK 等认证信息,然后在命令行配置好环境变量,将 SPARK_HOME 指向 MaxCompute Spark 包地址。
export SPARK_HOME=/Users/tobe/code/code_examples/maxcompute_examples/spark-3.1.1-odps0.33.0/
export PATH=$SPARK_HOME/bin:$PATH
  1. 使用 OpenMLDB Java SDK 实现一个 Spark 应用,并且使用 OpenMLDB 离线引擎进行 SQL 计算。核心代码如下,首先通过配置 MaxCompute catalog 来读写 MaxCompute 的表数据,然后使用 OpenmldbSession 的 sql() 接口进行离线任务的计算,最后将结果也导出为 MaxCompute 表。
    val spark = SparkSession
      .builder()
      .appName("OpenmldbExportMaxcomputeTable")
      .config("spark.sql.defaultCatalog","odps")
      .config("spark.sql.catalog.odps", "org.apache.spark.sql.execution.datasources.v2.odps.OdpsTableCatalog")
      .config("spark.sql.sources.partitionOverwriteMode", "dynamic")
      .config("spark.sql.extensions", "org.apache.spark.sql.execution.datasources.v2.odps.extension.OdpsExtensions")
      .config("spark.sql.catalogImplementation","hive")
      .getOrCreate()

    val sess = new OpenmldbSession(spark)
    val inputTableName = "taxi_tour_table"
    sess.registerTable("t1", spark.table(inputTableName))

    val sql =
      """
        |SELECT trip_duration, passenger_count,
        |sum(pickup_latitude) OVER w AS vendor_sum_pl,
        |max(pickup_latitude) OVER w AS vendor_max_pl,
        |min(pickup_latitude) OVER w AS vendor_min_pl,
        |avg(pickup_latitude) OVER w AS vendor_avg_pl,
        |sum(pickup_latitude) OVER w2 AS pc_sum_pl,
        |max(pickup_latitude) OVER w2 AS pc_max_pl,
        |min(pickup_latitude) OVER w2 AS pc_min_pl,
        |avg(pickup_latitude) OVER w2 AS pc_avg_pl,
        |count(vendor_id) OVER w2 AS pc_cnt,
        |count(vendor_id) OVER w AS vendor_cnt
        |FROM t1
        |WINDOW w AS (PARTITION BY vendor_id ORDER BY pickup_datetime ROWS_RANGE BETWEEN 1d PRECEDING AND CURRENT ROW),
        |w2 AS (PARTITION BY passenger_count ORDER BY pickup_datetime ROWS_RANGE BETWEEN 1d PRECEDING AND CURRENT ROW)
        |""".stripMargin

    // Run OpenMLDB offline execution
    val outputDf = sess.sql(sql).getSparkDf()

完整 Scala 代码和可编译的 Maven 可在 Github 中找到:https://github.com/tobegit3hub/OpenmldbDemo/blob/main/openmldb_maxcompute_spark3/src/main/scala/com/aliyun/odps/spark/examples/openmldb/demo/OpenmldbMaxcomputeTaxiDemo.scala
3. 使用标准的 spark-submit 命令提交任务即可,因为前面已经配置好 SPARK_HOME 环境变量和 spark-defaults.conf 配置文件,因此任务会自动提交到 MaxCompute 计算集群中运行。

spark-submit --master yarn --deploy-mode cluster --class com.aliyun.odps.spark.examples.openmldb.demo.OpenmldbMaxcomputeTaxiDemo ./target/spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar

最后,可以得到一个特征抽取计算结果的 MaxCompute 表,可以在阿里云 MaxCompute 控制台>Tables 里面获取到。
4. 离线模型训练:导入离线样本数据并进行机器学习模型训练

  1. 导出样本数据。从 MaxCompute 导出数据到阿里云 OSS,再从 OSS 下载到本地。同样使用阿里云 DataWorks 服务,相关配置如下。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S5Uod87m-1671011244313)(null)]
  2. 离线模型训练。在普通命令行下,执行 train.py(在 OpenMLDB 快速上手文档中 Docker 镜像的/work/taxi-trip目录中),使用开源模型训练工具 LightGBM 基于上一步生成的离线特征表进行模型训练,训练结果存放在 /tmp/model.txt 中。
python3 train.py /tmp/feature_data /tmp/model.txt
  1. 特征抽取 SQL 脚本上线:将第 3 步中用于特征抽取的 SQL 脚本部署上线,以提供在线的特征抽取
  2. 使用 OpenMLDB 最新的一键部署工具(将在 OpenMLDB 0.6.8 版本中发布,详情请参考官方文档 https://openmldb.ai/docs/zh/main/ ),在阿里云的两台虚拟机上部署 OpenMLDB 集群版。需要提前下载好 OpenMLDB Spark。
./sbin/deploy-all.sh
  1. 部署完成后启动集群:
./sbin/start-all.sh
  1. 启动后,连接 OpenMLDB 集群检查集群状态:
./openmldb_cli.sh
show components
  1. 保证集群成功创建以后,可以创建表:
CREATE DATABASE demo_db;
USE demo_db;
CREATE TABLE t1(id string, vendor_id int, pickup_datetime timestamp, dropoff_datetime timestamp, passenger_count int, pickup_longitude double, pickup_latitude double, dropoff_longitude double, dropoff_latitude double, store_and_fwd_flag string, trip_duration int);
SET @@execute_mode='online';

再使用 OpenMLDB SQL DEPLOY 语法,部署上线 SQL 脚本(可以执行SHOW DEPLOYMENT 语句查看部署详情):

DEPLOY demo SELECT trip_duration, passenger_count,
sum(pickup_latitude) OVER w AS vendor_sum_pl,
max(pickup_latitude) OVER w AS vendor_max_pl,
min(pickup_latitude) OVER w AS vendor_min_pl,
avg(pickup_latitude) OVER w AS vendor_avg_pl,
sum(pickup_latitude) OVER w2 AS pc_sum_pl,
max(pickup_latitude) OVER w2 AS pc_max_pl,
min(pickup_latitude) OVER w2 AS pc_min_pl,
avg(pickup_latitude) OVER w2 AS pc_avg_pl,
count(vendor_id) OVER w2 AS pc_cnt,
count(vendor_id) OVER w AS vendor_cnt
FROM t1
WINDOW w AS (PARTITION BY vendor_id ORDER BY pickup_datetime ROWS_RANGE BETWEEN 1d PRECEDING AND CURRENT ROW),
w2 AS (PARTITION BY passenger_count ORDER BY pickup_datetime ROWS_RANGE BETWEEN 1d PRECEDING AND CURRENT ROW);
  1. 在线模型预测:基于 OpenMLDB 在线服务与机器学习模型实现 E2E 预测
  2. 准备在线数据。首先,切换到在线执行模式。接着在在线模式下,导入样例数据 /work/taxi-trip/data/taxi_tour_table_train_simple.csv 作为在线数据,用于在线特征计算。以下命令均在 OpenMLDB CLI 下执行。
> USE demo_db;
> SET @@execute_mode='online';
> LOAD DATA INFILE 'file:///work/taxi-trip/data/taxi_tour_table_train_simple.csv' INTO TABLE t1 options(format='csv', header=true, mode='append');
  1. 启动预估服务。如果尚未退出 OpenMLDB CLI,请使用 quit 命令退出 OpenMLDB CLI。在普通命令行下启动预估服务:
./start_predict_server.sh 127.0.0.1:9080 /tmp/model.txt
  1. 发送预估请求。在普通命令行下执行内置的 predict.py 脚本。该脚本发送一行请求数据到预估服务,接收返回的预估结果,并打印出来。
   # Run inference with a HTTP requestpython3 predict.py
   ----------------ins---------------[[ 2.       40.774097 40.774097 40.774097 40.774097 40.774097 40.774097  40.774097 40.774097  1.        1.      ]]---------------predict trip_duration -------------844.0261882914319 s

写在最后

希望本文能够帮大家快速了解如何使用 OpenMLDB 和 Maxcompute 联合实现一个完整的机器学习应用,跑通从数据导入到特征工程到机器学习模型训练、应用的全流程。
OpenMLDB的上下游生态在不断完善当中,后续也将整合更多生态工具,吸引更多开发者的同时降低开发者的使用门槛,敬请期待。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OkkgVGMM-1671011244563)(null)]
若你想进一步了解 OpenMLDB 或者参与社区技术交流,可以通过以下渠道获得相关信息和互动~
Github: https://github.com/4paradigm/OpenMLDB
官网:https://openmldb.ai
Email: contact@openmldb.ai
OpenMLDB 微信交流群:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xzfUb7Q0-1671011245353)(null)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件工程---习题五

1.为每种类型的模块耦合举一个具体例子。   答:耦合式对一个软件结构内不同模块之间互联程度的度量。耦合强弱取决于接口的复杂度,进入或访问某一模块的点,以及通过接口的数据。一般模块之间的可能的连接方式有七种,构成耦合的七…

深入MVC模式和三层架构

MVC模式 MVC 是一种分层开发的模式,其中: M:Model,业务模型,处理业务 V:View,视图,界面展示 C:Controller,控制器,处理请求,调用模…

深度学习中的卷积操作

本文从信号处理中的互相关运算引入深度学习中的卷积。 然后介绍了不同的卷积类型,以及如何在pytorch中使用这些卷积层。 (在看pytorch文档中的Conv1D/2D/3D的时候感到比较困惑,又很好奇深度学习中各种各样的卷积操作。于是结合整理几乎包含深…

Linux软硬链接与动静态库

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录一、创建软硬链接二、软硬链接①软链接②硬链接③硬链接的用处④软硬链接的区别三、库的作用①库与为什么用库②动静态库的加载过程四、动静…

大数据分析如何进行日志采集

最近经常和技术大牛在交流,每次的碰撞都会让我产生更多的想法。例如这次谈到的,某企业信息化用了二三十种的公有云服务、有二十多种业务系统的数据库使用了同一个物理库、云产品的稳定性是值得肯定的。今天我们就来谈一谈日志在数据库中的作用以及如何采…

[附源码]Python计算机毕业设计SSM基于java语言的在线电子书阅读系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

基于jsp+mysql+ssm小熊猫水果管理系统-计算机毕业设计

项目介绍 小熊猫水果管理系统是水果商业贸易中的一条非常重要的道路,可以把其从传统的实体模式中解放中来,网上购物可以为消费者提供巨大的便利。通过小熊猫水果管理系统这个平台,可以使用户足不出户就可以了解现今的流行趋势和丰富的水果信…

在中国程序员能不能干一辈子?

在中国程序员当然能干一辈子,因为35岁的程序员已经自动死亡,全网销声匿迹,查无此人了,这辈子已经玩完了(雾 开个玩笑,就是看够了那些焦虑文学,我只想说: 程序员到35岁、45岁、55岁&…

【LeetCode】1697. 检查边长度限制的路径是否存在

题目描述 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] [ui, vi, disi] 表示点 ui 和点 vi 之间有一条长度为 disi 的边。请注意,两个点之间可能有 超过一条边 。 给你一个查询数组queries ,其中 queries[j] [pj, qj, limi…

外部注意力机制与内部注意力机制

自注意力是注意力机制的一种特殊情况,其核心思想为通过计算特征内部元素之间的联系来获得大范围内的依赖关系。而在外部注意力中,key被拿到了网络外部,因此可以习得数据集的全局状况。 自注意力机制中,输入特征F被投射到query矩阵…

Qt扫盲-QAbstractSlider理论总结

QAbstractSlider理论总结1. 概述2. 常用属性3. 信号1. 概述 QAbstractSlider 其实就是 QScrollBar, QSlider and QDial 的父类,也就是抽象类定义了Slider这种控件的一些公共属性,其实就是一个抽象滚动条的主要属性。 就比如一个具体的滑动条&#xff0c…

服务器load高问题定位和优化

服务器开发系列 文章目录服务器开发系列前言一、原因分析与定位?总结前言 什么是Load?什么是Load Average?   Load 就是对计算机干活多少的度量(WikiPedia:the system Load is a measure of the amount of work that a comput…

isaac gym(二)仿真setup(代码齐全)

目录 .1 Simulation Setup .2 Creating a Simulation 2.1 Simulation Parameters 2.1.1 Up Axis 2.2 Creating a Ground Plane .3 Loading Assets .4 Environments and Actors 4.1 env 4.2 actors 4.3 Test .5 Running the Simulation .6 Adding a Viewer ​编辑 .7 Th…

03_1排序算法:冒泡排序、选择排序、插入排序

开始系统学习算法啦!为后面力扣和蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括概念,算法运行过程,以及代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私信博…

专访 | 刘乔升:开源是人类智力劳动最好的组织形式

OpenMLDB: 可以请你先自我介绍一下吗? 刘乔升: 我叫刘乔升,来自复旦大学,就读于软件工程专业,是 2022 开源之夏 OpenMLDB Go SDK 项目的贡献者。在参加本届开源之夏活动前,我就有参加过一些开源…

自定义maven骨架

目录 一、自定义maven骨架 1、先创建一个新的工程、添加你需要的结构目录及pom所需要的依赖文件,以这个工程为模板,创建框架 2、添加在pom文件中添加依赖,com.test文件中这个坐标与maven仓库相对应 3、点击Edit....会有一个弹窗 4、点击加…

如何在SpringBoot中设置HTTP缓存,你知道么?

在工作之余阅读缓存相关的书籍时,看到了http缓存相关的知识,HTTP 缓存机制是一个 web 性能优化的重要手段,无论是做前端还是做web后台,都可能会用得到它,应该是知识体系库中的一个基础环节,以前这一块学的不…

TAPD新增需求自动写入腾讯文档

【实现效果:】TAPD新增需求/缺陷,可以自动写入腾讯文档智能表,方便通过腾讯文档灵活管理自己的项目排期,并且通过不同的视图效果,实现简单的需求统计/分组迭代,通过数据关联及时跟进延期项目。 【准备工作…

引用类型 - JavaScript 数组对象、遍历、复制、冒泡排序、选择排序、数组方法、数组去重

写在前面 哎呀呀,每次都是要沉淀好久好久才能更一篇文章…基本上半个月都很难出一篇,但还是想把这个系列做起来,主要是为了记录自己学习和开发的过程,以便在面试的时候讲项目,能说得头头是道(◍•ᴗ•◍) 马上就要开…

Clickhouse

目录 Clickhouse简介 整体架构 数据接入层 数据存储层 数据服务层 数据应用层 Clickhouse简介 目前企业用户行为日志每天百亿量级,虽然经过数仓的分层以及数据汇总层通用维度指标的预计算,有些个性化的分析场景还是需要直接编写程序或sql查询&…