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

译者:刘志勇
出处:https://medium.com/riselab/rayonspark-running-emerging-ai-applications-on-big-data-clusters-with-ray-and-analytics-zoo-923e0136ed6a

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

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

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

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

图1 在Aparche Spark上部署Ray

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

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

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

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

conda create -n zoo python=3.6
      source activate zoo

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

source activate zoo
            pip install analytics-zoo==0.6.0.dev6 (or above version)
            pip install pyspark==2.4.3
            pip install ray
            conda install jupyter

4、安装 Java 环境。

condainstall -c anaconda openjdk=8.0.152

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

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

6、启动 Jupyter Notebook。 

jupyter notebook

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

from zoo import init_spark_on_yarn
sc = init_spark_on_yarn(
   hadoop_conf=path to hadoop_conf,
   conda_name="zoo", # The name of your 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依赖项。

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

import ray
from zoo.ray.util.raycontext import RayContex
ray_ctx = RayContext(sc=sc, object_store_memory="2g")
ray_ctx.init()

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

图2 在Aparche Spark上启动Ray的过程

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

        1)将在本地节点上启动一个Ray“驱动程序”。
        2)带有Redis进程的单个Ray“master”将在一个Spark执行器上启动。
        3)对于每个剩余的Spark执行器,将启动一个“Slave”Reylet。
        4)Raymaster和Raylet进程将配置为使用由“executor_cores”参数指定的内核数。

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

@ray.remote
classTestRay():
    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()

10、在阅读上面的简单示例代码之后,你可以参考更复杂的 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 来实现自动机器学习对时间序列预测的支持(包括自动特征生成、模型选择和超参数调优)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352