zhichao Li,Jason Dai作者

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

近年来,人工智能有了很大的发展。为了获得洞察力并基于海量数据作出决策,我们需要拥抱先进的、新兴的人工智能技术,如深度学习、强化学习、自动机器学习(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()”幕后的逻辑

  • 将在本地节点上启动一个Ray“驱动程序”。
  • 带有Redis进程的单个Ray“master”将在一个Spark执行器上启动。 
  • 对于每个剩余的Spark执行器,将启动一个“Slave”Reylet。 
  • 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 来实现自动机器学习时间序列预测的支持(包括自动特征生成、模型选择和参数调优)。

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

Analytics Zoo
Analytics Zoo

Analytics Zoo是一个统一的大数据分析+AI平台,它无缝地将Spark、TensorFlow、Keras和BigDL程序集成到一个整合的流水线中,可以透明地扩展到大型Apache Hadoop/Spark集群,用于分布式训练或预测,方便用户构建深度学习端到端的应用。通过该专栏希望和大家一起探讨AI在实际生活中各个领域的创新。

工程推荐系统Analytics Zoo深度学习机器学习
2
相关数据
数据分析技术

数据分析是一类统计方法,其主要特点是多维性和描述性。有些几何方法有助于揭示不同的数据之间存在的关系,并绘制出统计信息图,以更简洁的解释这些数据中包含的主要信息。其他一些用于收集数据,以便弄清哪些是同质的,从而更好地了解数据。 数据分析可以处理大量数据,并确定这些数据最有用的部分。

深度强化学习技术

强化学习(Reinforcement Learning)是主体(agent)通过与周围环境的交互来进行学习。强化学习主体(RL agent)每采取一次动作(action)就会得到一个相应的数值奖励(numerical reward),这个奖励表示此次动作的好坏。通过与环境的交互,综合考虑过去的经验(exploitation)和未知的探索(exploration),强化学习主体通过试错的方式(trial and error)学会如何采取下一步的动作,而无需人类显性地告诉它该采取哪个动作。强化学习主体的目标是学习通过执行一系列的动作来最大化累积的奖励(accumulated reward)。 一般来说,真实世界中的强化学习问题包括巨大的状态空间(state spaces)和动作空间(action spaces),传统的强化学习方法会受限于维数灾难(curse of dimensionality)。借助于深度学习中的神经网络,强化学习主体可以直接从原始输入数据(如游戏图像)中提取和学习特征知识,然后根据提取出的特征信息再利用传统的强化学习算法(如TD Learning,SARSA,Q-Learnin)学习控制策略(如游戏策略),而无需人工提取或启发式学习特征。这种结合了深度学习的强化学习方法称为深度强化学习。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

Apache Spark技术

Apache Spark是一款快速、灵活且对开发者友好的工具,也是大型SQL、批处理、流处理和机器学习的领先平台。它是一个围绕速度、易用性和复杂分析构建的大数据处理框架,提供了一个全面、统一的框架用于管理各种不同性质(文本数据、图表数据等)数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

时间序列预测技术

时间序列预测法其实是一种回归预测方法,属于定量预测,其基本原理是;一方面承认事物发展的延续性,运用过去时间序列的数据进行统计分析,推测出事物的发展趋势;另一方面充分考虑到偶然因素影响而产生的随机性,为了消除随机波动的影响,利用历史数据进行统计分析,并对数据进行适当处理,进行趋势预测。

Jupyter技术

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 。

Apache Hadoop技术

Apache Hadoop是一套用于在大型集群上(由通用硬件构建)运行应用程序的框架。它实现了Map/Reduce编程范型,计算任务会被分割成小块(多次)运行在不同的节点上。除此之外,它还提供了一款分布式文件系统(HDFS),数据被存储在计算节点上以提供极高的跨数据中心聚合带宽。

加州大学伯克利分校机构

加利福尼亚大学伯克利分校,简称加州大学伯克利分校,又常被译为加利福尼亚大学伯克莱分校,位于美国加利福尼亚州旧金山湾区伯克利市,是一所世界著名的公立研究型大学。其许多科系位于全球大学排行前十名,是世界上最负盛名的大学之一,常被誉为美国乃至世界最顶尖的公立大学。

https://www.berkeley.edu/
暂无评论
暂无评论~