- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
Arch Meetup#8 杭州站 - 使用 Ray 作为 Spark SQL UDF 的执行引擎
使用 Ray 作为 Spark SQL UDF 的执行引擎
这次分享我们会重点介绍如何基于 Ray 使用 Python 实现 Spark SQL UDF 函数,进一步的,我们使用该技术实现有状态的 UDF 函数,从而能够将常见的 Python 算法模型转换成 SQL UDF 函数使用,解决算法模型包装成 SQL 函数面临的两大难题:1. 函数需要一个初始化过程,2. 函数有一定的 Python 环境要求。
展开查看详情
1 .使用Ray 作为Spark SQL UDF的执行引擎 祝威廉 Kyligence
2 . u MLSQL 是怎么支持Python的 Agenda u 为什么要整合Ray u 整合Ray的两种模式 u 如何使用Ray作为UDF执行引擎
3 .MLSQL 是如何支持Python的 1. MLSQL 语法扩展插件,能够 执行Python代码 2. Python在MLSQL中作为文本 片段存在 3. Python是沙箱,输入输出都 必须是表,我们提供了API供交 互 © Kyligence Inc. 2021, Confidential.
4 .MLSQL对应到后端代码层面-PyJava原理 Python Daemon Python Worker Java Executor Python Daemon Python Worker 1. Python Deamon主要由Python版本+ 环境变量决定 2. Python Worker 由Python Daemon管理 3. 双方主要通过输入输出流进行数据交换 4. 数据传输格式为Arrow © Kyligence Inc. 2021, Confidential.
5 .现有模式的局限 Node 1 Python 1. Python / Java 混合部署,互相干扰,难以隔离, Daemon Python Worker 运维困难(Python环境需要多份) Java Executor 2. 无法实现GPU等多种资源的调度 Python Daemon Python 3. 不同Python Worker无法实现交互互通 Worker 4. 基于这套架构使用Python实现一个简单的PS结构 都难以做到,不具备分布式编程能力,仅能进行分 Node 2 布式数据处理。 Python Daemon Python Worker Java Executor Python Daemon Python Worker © Kyligence Inc. 2021, Confidential.
6 .怎么办? 引入Ray! © Kyligence Inc. 2021, Confidential.
7 .新模式 Ray 角色转换,只负责提交代码,真实任务在Ray集群执行 Client 一个Python Deamon对应一 无需安装如Tensorflow,Pytorch等机器学习库 套不同Python环境 Node N Python Daemon Python Worker 1. Ray 支持真正的Python分布式编程,能力 Java 强大 Executor 2. 多Ray集群,用户可以选择连接不同Python Python 环境 Daemon Python Ray Cluster Worker 3. 充分利用Ray的硬件识别和调度能力,如基 于GPU ,CPU,内存进行调度。 © Kyligence Inc. 2021, Confidential.
8 .存在两种交互模式 mode=model Ray client 返回数据(机器学习场景) mode=Data Ray client 返回数据地址(ETL场景) © Kyligence Inc. 2021, Confidential.
9 .mode=model Arrow Format Spark Cluster Partition Servers Address RDD Partition 0 Read Once server RDD Partition 1 Read Once server step1 python worker Ray client RDD Partition 2 Read Once server Submit Job step2 Ray Cluster step3 New RDD Partition 0 © Kyligence Inc. 2021, Confidential.
10 .mode=model 对应MLSQL代码 Ray client端会返回数据, 比如模型二进制目录或者路径 © Kyligence Inc. 2021, Confidential.
11 .mode=data Arrow Format Spark Cluster Partition Servers Address RDD Partition 0 Read Once server RDD Partition 1 Read Once server python worker Ray client RDD Partition 2 Read Once server Submit Job Actor Servers Address Ray Cluster New RDD Partition 0 Read Once server Actor 0 New RDD Partition 1 Read Once server Actor 1 New RDD Partition 2 Read Once server Actor 2 © Kyligence Inc. 2021, Confidential.
12 .mode=data 对应MLSQL代码 Ray client端会返回数据地址而非数据 © Kyligence Inc. 2021, Confidential.
13 .如何使用Ray作为UDF执行引擎 © Kyligence Inc. 2021, Confidential.
14 .如何使用Ray作为UDF执行引擎 © Kyligence Inc. 2021, Confidential.
15 .Python UDF 的几个点 在Java中 执行Python代码 传统做法:先序列化python函数,然后丢到python worker中执行 MLSQL(PyJava)做法:Python代码直接丢到 python worker中 无状态UDF函数 加载模型 有状态UDF函数 怎么实现? 使用模型进行 预测 © Kyligence Inc. 2021, Confidential.
16 .有状态UDF函数实现初步设想 HTTP UDF Worker UDF Worker UDF Worker UDF Worker 本质是启动一个ML Serving集群,提供 PRC, HTTP支持 UDF Worker UDF Worker RPC © Kyligence Inc. 2021, Confidential.
17 .此前难以落地 难以维护,譬 难以自动化 如需要网关, 部署 资源等等 UDF 侧需要 针对http/rpc 开发成本高 编程 © Kyligence Inc. 2021, Confidential.
18 .天降大Ray © Kyligence Inc. 2021, Confidential.
19 .实现基本原理 • 创建一个detached actor(UDFMaster),名称为udf名 • UDFMaster根据配置(初始化,预测逻辑),启动N个UDFWorker(也是actor) 注册 • 创建Spark UDF函数,该函数会通过pyjava 执行python 代码 仅用96行Ray代码 • 被pyjava执行的python函数会通过udf名获取UDFMaster • 通过UDFMaster 获取可用的UDFWorker 预测 • 调用UDFWorker的apply方法执行实际预测逻辑 Incredible 3连 • 用户可以在Ray dashboard可视化管理 UDF集群 • 用户可以通过MLSQL插件管理UDF 集群 管理 © Kyligence Inc. 2021, Confidential.
20 .用户可自定义注册和预测部分实现 提供模型加载以及预测代码 此时会根据这些信息启动UDF Cluster 使用Python预测代码创建 Spark UDF © Kyligence Inc. 2021, Confidential.
21 .UDF 注册逻辑图 Spark Cluster PyJava(Driver) Ray Cluster UDF Cluster UDF Worker 创建一个 UDF Master-Slave Cluser UDF Worker UDF Master UDF Worker © Kyligence Inc. 2021, Confidential.
22 .UDF执行 - 引擎侧逻辑 Scala UDF (PyJava) Ray Cluster Python Deamon Python Worker Java Executor Python Deamon Python Worker © Kyligence Inc. 2021, Confidential.
23 .UDF 执行- 全局逻辑 Spark Cluster Step2 UDF Worker DF Partition 0 Scala UDF (PyJava) 执行实际逻辑 DF Partition 1 Scala UDF (PyJava) DF Partition 2 Scala UDF (PyJava) Step1: 获取 可用worker Ray Cluster UDF Worker Python Deamon Python Worker UDF Worker Java Executor UDF Master Python UDF Worker Deamon Python Worker © Kyligence Inc. 2021, Confidential.
24 .价值 Python/内置算法-三板斧完美闭环 模型训练 Train 模型变函数, Registe Predict 批量预测,吞吐优先 r 批流,HTTP/RPC皆可用 © Kyligence Inc. 2021, Confidential.
25 .欢迎加入 mlsql.ai 社区 © Kyligence Inc. 2021, Confidential.
26 .Contact Us Kyligence Inc Apache Kylin u http://kyligence.io u http://kylin.apache.org u info@kyligence.io u dev@kylin.apache.org u Twitter: @Kyligence u Twitter: @ApacheKylin © Kyligence Inc. 2021, Confidential.
27 . 扫码填写问卷, 欢迎关注我们的社交媒体账号 获取折叠风扇 & Milvus v2.0 限定 版T恤! 微信公众号 微信视频号 (Milvus相关最新文章) (Milvus最新视频、直播)