【FCon上海】与行业领袖共话AI大模型、数字化风控等前沿技术。 了解详情
写点什么

RayOnSpark:使用 Ray 和 Analytics Zoo 在大数据集群上运行新兴的人工智能应用

  • 2019-08-02
  • 本文字数:2421 字

    阅读完需:约 8 分钟

RayOnSpark:使用 Ray 和 Analytics Zoo 在大数据集群上运行新兴的人工智能应用

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

本文最初发布于 RISELab 博客,经原作者 Jason Dai、Zhichao Li 授权由 InfoQ 中文站翻译并分享。


近年来,人工智能有了很大的发展。为了获得洞察力并基于海量数据作出决策,我们需要拥抱先进的、新兴的人工智能技术,如深度学习、强化学习、自动机器学习(AutoML)等。


Ray 是由加州大学伯克利分校 RISELab 开源的新兴人工智能应用的分布式框架。它实现了一个统一的接口、分布式调度器、分布式容错存储,以满足高级人工智能技术对系统最新的、苛刻的要求。Ray 允许用户轻松高效地运行许多新兴的人工智能应用,例如,使用 RLlib 的深度强化学习、使用 Ray Tune 的可扩展超参数搜索、使用 AutoPandas 的自动程序合成等等。


在本文中,我们将介绍 RayOnSpark,这是新近添加到 Analytic Zoo 的功能之一。Analytic Zoo 是开源的端到端数据分析 + 人工智能平台。RayOnSpark 允许用户直接在 Apache Hadoop/YANE 上运行 Ray 程序,这样用户就可以在现有的大数据集群上以分布式的方式轻松尝试各种新兴的人工智能应用。此外,大数据应用和人工智能应用并没有运行在两个独立的系统上,因为这往往会带来昂贵的数据传输成本和较高的端到端学习延迟。RayOnSpark 允许 Ray 应用无缝集成到 Apache Spark 数据处理管道中,并直接在内存中的 Spark RDD 或 DataFrame 上运行。


接下来,我们将重点阐述如何在 Hadoop/YARN 之上使用 PySpark 运行 Ray 集群和程序(见下面的图 1)。注意,虽然本文只展示了如何在 YARN 集群上运行 Ray,但同样的逻辑也可以应用于 Kubernetes 和 Apache Mesos。



为了说明预期的 RayOnSpark 工作流,我们将使用一个简单的 Ray 示例,它使用 Actor 收集服务器的 IP 并在 YARN 集群上运行该实例。


  • 请按照下面的链接来安装 Anaconda:


https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html


  • 创建名为“zoo”(或任何其他名称)的虚拟环境,如下所示:


conda create -n zoo python=3.6source activate zoo
复制代码


  • 将 Spark、Analytics Zoo、Jupyter 和 Ray 安装到 Conda 环境中。


source activate zoopip install analytics-zoo==0.6.0.dev6 (or above version)pip install pyspark==2.4.3pip install rayconda install jupyter
复制代码


  • 安装 Java 环境。


conda install -c anaconda openjdk=8.0.152
复制代码


Spark 需要 Java 环境设置。如果环境变量 JAVA_HOME 已经用 JDK8 设置好,则可以跳过这一步。


  • 搜索并记住 Hadoop 配置文件夹的路径,这是稍后在 YARN 上初始化 Spark 所需的。文件夹的层次结构如下所示:



  • 启动 Jupyter Notebook。


jupyter notebook
复制代码


  • 在 Jupyter Notebook 中,只需调用 Analytics Zoo 提供的“init_spark_on_yarn” Python 方法,就可以在 YARN 上启动 SparkContext:


from zoo import init_spark_on_yarnsc = init_spark_on_yarn(    hadoop_conf=path to hadoop_conf,    conda_name="zoo", # Name of conda environment    num_executor=3,    executor_cores=4,    executor_memory="2g",    driver_memory="2g",    driver_cores=4,    extra_executor_memory_for_ray="3g")
复制代码


注:在 YARN 上使用 PySpark 时,用户面临的一个挑战是,在集群中的每个节点上准备 Python 环境,而不修改集群。你可能会考虑使用 rsync 手动将依赖项从驱动程序转移到集群,但这需要时间,且容易出错。此外,你可能在生产环境中没有 ssh 权限。在这里,我们通过利用 conda-pack 和 YARN 分布式缓存来解决这个问题,以便帮助用户在集群中自动捆绑和分发 Python 依赖项。


  • 在 YARN 上使用 PySpark 启动 Ray 集群。


import rayfrom zoo.ray.util.raycontext import RayContextray_ctx = RayContext(sc=sc, object_store_memory="2g")ray_ctx.init()
复制代码


在 RayOnSpark 中,我们首先创建一个 SparkContext,它将负责通过 “ray start” 在底层集群(即 YARN 容器)中启动 Ray 进程。对于每个 Spark 执行器,都会创建一个 “Ray Manager” (见下面的图 2)来管理 Ray 进程;当故障发生或者程序退出时,它将自动关闭或重新启动进程。

RayContext”是触发 Ray 集群部署的入口点。下面是调用“ray_ctx.init()”幕后的逻辑:

  1. 将在本地节点上启动一个 Ray“驱动程序”。

  2. 带有 Redis 进程的单个 Ray“master”将在一个 Spark 执行器上启动。

  3. 对于每个剩余的 Spark 执行器,将启动一个“Slave”Reylet。

  4. Ray master 和 Raylet 进程将配置为使用由“executor_cores”参数指定的内核数。



  • 之后,我们将编写一些简单的代码来测试 Ray 集群是否已经成功启动。例如,以下代码将创建 Actors 来从分配的 YARN 容器中收集 IP。


@ray.remoteclass TestRay():    def hostname(self):        import socket        return socket.gethostname()
def ip(self): import ray.services as rservices return rservices.get_node_ip_address()
actors = [TestRay.remote() for i in range(0, slave_num)]print([ray.get(actor.hostname.remote()) for actor in actors])print([ray.get(actor.ip.remote()) for actor in actors])ray_ctx.stop()
复制代码


  • 在阅读上面的简单示例代码之后,你可以参考更复杂的 RayOnSpark 的 Jupyter Notebook,这是基于实现 Sharded 参数服务器的官方 Ray 执行


借助 Analytics Zoo 中的 RayOnSpark 支持,用户只需在 Ray 程序的顶部添加三行额外的 Python 代码(如下所示):


sc = init_spark_on_yarn( … )ray_ctx = RayContext(sc=sc, … )ray_ctx.init( … )
复制代码


这样就可以在现有的 Hadoop/YARN 集群中直接运行构建在 Ray 之上的人工智能新的应用,这些应用可以无缝集成到 Spark 数据处理管道中。作为第一个用力,我们目前正在使用 RayOnSpark 来实现自动机器学习对时间序列预测的支持(包括自动特征生成、模型选择和超参数调优)。


作者介绍:


Jason Dai,英特尔高级首席工程师、大数据分析和人工智能创新院院长。


原文链接:


RayOnSpark: Running Emerging AI Applications on Big Data Clusters with Ray and Analytics Zoo


公众号推荐:

AIGC 技术正以惊人的速度重塑着创新的边界,InfoQ 首期《大模型领航者AIGC实践案例集锦》电子书,深度对话 30 位国内顶尖大模型专家,洞悉大模型技术前沿与未来趋势,精选 10 余个行业一线实践案例,全面展示大模型在多个垂直行业的应用成果,同时,揭秘全球热门大模型效果,为创业者、开发者提供决策支持和选型参考。关注「AI前线」,回复「领航者」免费获取电子书。

2019-08-02 15:322474
用户头像

发布了 370 篇内容, 共 174.7 次阅读, 收获喜欢 943 次。

关注

评论

发布
暂无评论
发现更多内容

TIDB--不容易发现的 lightning tidb-backend 模式导入优化

TiDB 社区干货传送门

迁移 性能调优 TiDB 底层架构 管理与运维 性能测评

隐藏esc坑之jbd2进程io占用奇高 系统长期io占用100%

TiDB 社区干货传送门

故障排查/诊断

TiDB 在金融场景里面那些不得不说的事

TiDB 社区干货传送门

TiDB升级、TiFlash测试及对比ClickHouse

TiDB 社区干货传送门

TiDB 在实时分析应用场景下的探索

TiDB 社区干货传送门

TiDB 多Socket 服务器性能扩展问题分析-续

TiDB 社区干货传送门

性能调优 性能测评

【理财实践】 开科唯识-互联网理财为什么会选TiDB

TiDB 社区干货传送门

TiDB v5.1 体验: 我用 TiDB 训练了一个机器学习模型

TiDB 社区干货传送门

内容主数据 TiDB 集群写入热点优化实践

TiDB 社区干货传送门

TiDB-4.0.0-rc-性能测试

TiDB 社区干货传送门

TiDB in Action 开源电子书

TiDB 社区干货传送门

TiUP升级TiFlash重启失败解决方案

TiDB 社区干货传送门

TiDB 在茄子科技的应用实践及演进

TiDB 社区干货传送门

实践案例

HTAP 会成为数据库的未来吗?

TiDB 社区干货传送门

Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

TiDB 社区干货传送门

如何分析和解决 TiDB 4.0 的写热点问题

TiDB 社区干货传送门

一栈式 X 规模化 X 多元化:PingCAP 马晓宇谈 TiDB HTAP 演进之路

TiDB 社区干货传送门

Tikv节点磁盘耗尽恢复经验

TiDB 社区干货传送门

以TiDB热点问题来谈Region的调度流程

TiDB 社区干货传送门

实践案例

insert引发的TiDB hang死血案(案情一)

TiDB 社区干货传送门

故障排查/诊断

体验升级至4.0

TiDB 社区干货传送门

TiDB 在小米的落地及云原生探索

TiDB 社区干货传送门

记一次使用TiUP半自动升级TiDB集群经验

TiDB 社区干货传送门

版本升级

记一场DM同步引发的Auto_Increment主键冲突漫谈

TiDB 社区干货传送门

故障排查/诊断

猜一猜 TiDB 4.0 GA 第一个上线用户花落谁家?有惊喜!

TiDB 社区干货传送门

解决方案之:DM relay 处理单元报错

TiDB 社区干货传送门

TiDB 升级到5.1.1 的性能表现

TiDB 社区干货传送门

TiFlash5.0.1与4.0.10 对比测试

TiDB 社区干货传送门

版本测评

TiDB 与 Flink 联合发布实时数仓最佳实践白皮书

TiDB 社区干货传送门

TiDB SQL 优化案例几则

TiDB 社区干货传送门

【优质技术文章推荐】TiDB for PostgreSQL—牛刀小试

TiDB 社区干货传送门

实践案例

RayOnSpark:使用 Ray 和 Analytics Zoo 在大数据集群上运行新兴的人工智能应用_大数据_Jason Dai_InfoQ精选文章