跳转到主要内容
工程的博客”>
             <noscript>
              <img data-gatsby-image-ssr=

射线在砖

分享这篇文章

2023年5月更新:我们推出以来指导使用射线引发更新,请参考博客最新的变化。


是一个开源项目开发的第一RISELab使它简单规模任何Python计算密集型工作负载。与一组丰富的库和集成框架,建立在一个灵活的分布式执行射线带来了新的用例和简化了开发定制的分布式的Python函数通常是复杂的创建。

射线上的运行Apache火花™集群创建分发PySpark udf的内部代码的能力以及Python代码,只是司机节点上运行。它还增加了能够使用射线的可伸缩的强化学习RLlib开箱即用的。这些能力允许广泛的新的应用程序。

为什么需要另一个分布式框架之上的火花吗?

有两种方法可以考虑如何分配一个函数在一个集群。第一种方法是部分数据集的分割和功能作用于每个部分并收集结果。这就是所谓的数据并行性,在大数据是最常见的形式,和最好的例子是Apache火花。现代形式的数据并行性框架通常DataFrame功能,其目的并非为低层建筑内部的分布式操作,如手工函数之外的udf(用户自定义函数)。

数据并行性是最常见的方式分发任务在集群。这里,部分数据集分割和功能作用于每个部分并收集结果。”src=
图1:数据并行性

另一种形式的分布函数是当数据集很小,但足够复杂的操作,只是不同的分区上运行相同的函数并不能解决这个问题。这被称为任务并行性或逻辑并行性和描述当许多功能可以同时运行和设置在复杂管道使用参数服务器和调度器协调依赖关系。这种类型的并行性主要是发现在HPC(高性能计算)或自定义分布式工作,不可能与DataFrame操作。通常,这些框架意味着从头开始设计分布式功能。例子包括物理模拟、金融交易算法和先进的数学计算。

任务并行分配任务在集群的另一种方法,通常用于更复杂的用例。在这里,很多任务可以同时运行在一个复杂的管道。”src=
图2:任务并行性

然而,许多任务并行和传统HPC Python库为c++编写,而不是工作负载(要求在许多科学数据管道)和推广不够适应定制工作要求等先进的设计模式。他们也可以对硬件的优化多核CPU架构,比如改善线性代数操作的性能在一个机器,而不是跨集群分发功能。这样的硬件库也可以创建专门的硬件云硬件而不是商品。大多数任务并行库的主要困难是需要创建任务之间的依赖关系的复杂性和大量的开发时间。为了克服这些挑战,已研制出许多开源的Python库,结合简单的Python和规模定制任务的能力。

最好的一个最近的例子或逻辑在Python中并行的任务是射线。它的简单性、低延迟快速创建分布式调度和能力非常复杂的分布函数之间的依赖关系解决了普遍性的问题,可伸缩性和复杂性。看到一个温柔的介绍射线为更多的细节。

一个简单的介绍射线架构

雷架构”src=
图3:射线架构

雷的架构的一个重要的区别是,有两个层次的抽象如何安排工作。雷将本地系统视为一个集群,独立的进程,或Raylets,功能类似于一个节点在典型的大数据术语。还有一个全球调度程序,它可以将单独的机器作为节点。这允许高效的从单一节点扩展或笔记本电脑水平发展到大规模云计算。每个节点都有自己的本地的调度器,也可以与全球通信调度程序,一个任务可以从任何节点发送其余的集群。该功能允许开发人员创建远程任务可以触发其他远程任务,使许多面向对象编程的设计模式的分布式系统,这是至关重要的一个图书馆为从头创建分布式应用程序设计的。还有一个节点管理全球控制储存,跟踪任务的函数,事件和其他系统级元数据。

工作者节点之间的数据流图和gc”src=
图4:工人节点之间的数据流图和gc

射线是一种分布式对象存储的对象存储基于Apache箭头管理共享功能,集群使用的对象和任务。雷的一个最重要的方面是它的对象存储内存与内存管理的层次结构为驱逐或持久化对象(Ray v1.2 +)导致内存泄漏。这种高速内存系统允许在大规模高性能通信,但要求有大量的实例内存,以避免内存泄漏。

采取以下的简单示例中的远程任务调用另一个远程任务功能。程序的任务所代表的依赖关系图和物理执行显示了对象存储是常见的变量和结果而函数是独立工作者节点上执行。

司机和工人的关系的例子节点和对象存储在应用程序”src=
图5:司机和工人的关系的节点和对象存储在应用程序。

远程类对象(称为远程演员射线)允许参数服务器和更复杂的设计模式嵌套树等演员或功能。使用这个简单的API和体系结构,可以快速设计复杂的分布式任务而不需要创建底层基础设施。许多设计模式的例子可以在这里找到

@ray.remote计数器(对象):def__init__(自我):self.value=0def增量(自我):self.value+=1返回self.valuedefget_counter(自我):返回self.valuecounter_actor = Counter.remote ()

底层架构的更多细节,请参阅雷1.0架构白皮书

雷在砖开始集群

注:官方射线文档描述了通过RayDP火花集成项目。然而,这是“火花射线”以来砖集群作为集群管理的火花开始而不是能够初始化一个射线集群。雷也不是官方支持的砖。

一些自定义设置之前需要能够运行射线Databrick脚本。一个init脚本是一个shell脚本,在启动前的每个集群节点运行Apache火花司机或工人JVM开始。说明如何配置一个init脚本可以被发现在这里

运行下面的细胞在一个砖笔记本创建init脚本:

% pythonkernel_gateway_init =”“# ! / bin / bash#雷港口RAY_PORT = 9339REDIS_PASS = "d4t4bricks#安装光/砖/ python / bin / pip安装线#安装额外的射线库/砖/ python / bin / pip安装射线(调试、仪表板曲调,rllib,服务)#如果火花驱动节点上启动,初始化雷头节点#如果火花工人开始节点,连接头光节点如果[!- zDB_IS_DRIVER美元)& & (DB_IS_DRIVER美元= TRUE);然后回声”开始的头节点雷开始——min-worker-port = 20000——max-worker-port = 25000——temp-dir = "/ tmp /雷”——头——端口=RAY_PORT美元——redis-password = "REDIS_PASS美元”——include-dashboard = false其他的睡眠40回声”启动non-head节点连接DB_DRIVER_IP美元:RAY_PORT美元雷开始——min-worker-port = 20000——max-worker-port = 25000——temp-dir = "/ tmp /雷”——地址= "DB_DRIVER_IP美元:RAY_PORT美元”——redis-password = "REDIS_PASS美元fi”“#“用户名”改成你的砖在DBFS用户名#例子:用户名= "(电子邮件保护)用户名= " <用户名>”dbutils.fs.put (“dbfs: /用户/ {0}/ init / ray.sh”kernel_gateway_init .format(用户名),真正的)< /用户名>

配置集群运行init脚本的笔记本上创建启动集群。高级选项,如果使用集群UI,看起来应该是这样的:

先进的集群配置示例”src=
图6:先进的集群配置的例子

Python分发udf

用户定义的函数(udf)很难优化线性函数的内部仍然运行。有选项可以帮助优化等火花UDF使用熊猫UDF,它使用Apache箭头与数据传输数据和熊猫,这可以帮助UDF性能。这些选项允许硬件优化,但是雷可用于逻辑优化大幅度减少复杂的Python运行时的任务,通常不能够分布。例子包括在连接笔记本电脑用于分发毫升模型在一个UDF来实现2倍的性能。

强化学习

示例图的射线可以用来强化学习”src=
图7:图的强化学习

机器学习的一个重要的和不断增长的应用是强化学习中可以毫升代理培训学习行为的环境回报函数最大化。它的应用范围很广,从自主驾驶功耗优化最先进的游戏。强化学习是机器学习的第三个主要类别以及非监督和监督学习。

创建强化学习应用程序的挑战包括需要创建一个学习环境或模拟的代理可以火车,扩展的复杂性,以及缺乏开源标准。bob下载地址每个应用程序需要一个环境,通常是定制,通过历史记录或物理模拟,可以提供每一个行动代理可以执行的结果。这样的模拟环境的例子包括OpenAI健身房(环境从雅达利经典游戏机器人),卡拉(开源驾驶模拟器),或张量贸易(培训股市交易算法)。

这些模拟的规模,他们不能简单地分区的数据集上运行。一些模拟之前将完成他人,他们必须交流的机器学习模型的权重回归中央服务器模型整合在最简单的形式的分布式模型的训练。因此,这就变成了一个任务并行性问题,它不是大数据,而是计算许多同步计算的高复杂性。最后一个问题是缺乏强化学习的开源标准库。bob下载地址而深度学习或传统机器学习有更多的时间来建立标准或库桥框架(如MLflow)的差异,强化学习是一种年轻的发展,还没有一个完善的标准模型库,可以相差很大。这将导致更多的发展的时候切换算法或框架。

要解决这些问题,光有强化学习图书馆命名RLlib高可伸缩性和一个统一的API。它可以运行OpenAI健身房和用户定义的环境,可以训练在一个非常广泛的算法和支持TensorFlow和PyTorch潜在的神经网络。RLlib结合砖允许高度可伸缩的好处流和数据集成与三角洲湖的高性能先进的强化学习模型。

RLlib使用调优一线库可伸缩hyperparameter调优运行变化的模型来找到最好的一个。在这个代码示例中,它运行一个PPO(近端政策优化)代理OpenAI健身房的CartPole环境和执行网格搜索学习速率的三个选项。在引擎盖下面是火花的射线过程节点运行模拟环境和发送回批中心培训射线火车这些批次的模型的过程。然后将模型发送到推出员工收集更多的培训数据。虽然教练过程可以使用gpu加速训练,通过“num_gpus”设置为0,它将火车便宜CPU上的节点。

雷•库优化使用近端政策优化(PPO)架构加速模型的训练。”src=
图8:PPO架构
进口调优
              tune.run (“PPO”,停止= {“episode_reward_mean”:200年},配置= {“env”:“CartPole-v0”,“num_gpus”:0,“num_workers”:3,“lr”:tune.grid_search ([0.01,0.001,0.0001]),},)

强化学习广泛的应用包括场景无论能够运行模拟时,可以建立一个成本函数,是一个复杂的问题,坚决的逻辑规则或简单的试探性模型不能应用中止。最著名的案例强化学习通常research-orientated AlphaGo等重点是游戏,超人级别的雅达利的代理,或模拟自主驾驶,但有许多现实世界的业务用例。最近的应用程序的例子有机器人操纵控制工厂、功耗优化,甚至市场营销和广告的建议。

开始

雷的力量结合的好处使用火花帮助扩大使用砖Lakehouse平台的应用可能通过允许为可伸缩的任务并行性以及强化学习。bob体育客户端下载集成结合了可靠性、安全性、分布式计算性能,和广泛的合作伙伴与三角洲湖集成,利用射线的通用分布式计算框架来添加新的流,毫升,大数据的工作量。

试着笔记本

免费试着砖

相关的帖子

看到所有工程的博客的帖子