Ray(ray.io)是一个开源分布式UC框架伯克利istelab很容易从笔记本应用到集群开发它是为了解决增强学习的一般挑战,但灵活处理需要下列工作的任何重负:
Ray用于增强学习、超参数调优、模型服务和其他应用集群达千节点例子说明Ray可用Spark构建强健可扩展数据应用企业, 何时使用Ray对替代选择, 以及如何在您的项目中应用它
- 大家好,我叫Dean Wampler Anyscale 今天我要跟你谈Ray 企业级库 编写分布式Python应用我们想从泛泛的商谈和会议中获取反馈求求评分 会话,我很想听听你的想法
下面是议程和问题解决和Ray一起工作是什么感觉 如何与Spark合并 或用一种方法之后我会想出几句 关于你什么时候想使用Spark 和什么时候想使用Ray并思考 如何启动与Ray
先谈谈为什么Ray这是我们小Ray图标
实战实战响应 一对夫妇大趋势 我们已经观察 前5,6年,首先是机器学习模型大小 特别是神经网络 一直在大幅增长摩尔定律每18个月2x模型尺寸每18个月增长35倍超出摩尔定律, 如果要跟上并有合理的时间和性能 和所有这一切,我们必须分布同时 Python刚大增 成为数据科学实战语言 包括机器学习并举两样东西使我们有必要有强健易用分布式Python方法, 特别是对于那些不非要考虑分布式计算的人来说, 他们只是想要相对直觉的东西, 做他们需要做的大部分事而没有太多特殊手或什么
容我特别讲讲提高学习能力的挑战, 这对于Ray来说实为最大动因增强学习虽然是一个通用框架, 却实事求是地驱动创建它
if you don't what加固学习一种环境代理 努力工作环境 作出智能决策 并最大化奖赏观察环境状况 观察奖赏 观察最后决策后短期奖赏 观察行动并尝试做出新决策 采取新动作 并随时间推移 最大化累积奖赏整体思想加固学习
数年前它真正出名 谷歌深明队 成功击败世界最佳Go播放器 使用加固学习Lee Sedol是他的名字在许多方面被认为是神圣的漏洞理由是游戏空间,你知道 可能的动作和状态它可以带你实大比下棋大得多, 所以它被视为神圣的栅栏, 人很久前都无法期望实现的东西, 然而,几年前用所谓的深加学习完成它
和它排序像这个后台有神经网络 学习棋盘密钥结构 和有最大优势的键动作并返回原创加固学习图假设你观察棋盘状态 动作投石 奖赏简单 或赢或输
放大到这个小点上,你可以看到它是一个相当相联神经网络 多层次多挑战之一是寻找最优架构并训练它做它的工作
回想Ray的动机
因此,我们有,多事发生在这里模拟器随机应用 CPU存取模式 内存存存取模式可能游戏模拟器 如果你训练机器人 或工厂楼层 可能模拟器这些东西非常通用目的类计算问题, 但他们需要运行很多,因为 你要去训练很多,代理自身也可能有些复杂同时,你也有传统神经网络之类多工具像PyToch和TensorFlow系统集成工具 而不是从头重写
并增强学习像大多数机器学习系统, 你会训练很多以强化学习为例,你将一次又一次地玩这些游戏 以努力实现最大累积奖励, 所以你需要它真正高效,你需要用集群运行它 免永久耗用并创造出它结合所有这些事物, 很多需求非常灵活计算, 从小到大规模, 多灵活性需要并排序驱动Ray创建
说说生态圈
所以你们大部份人可能从不使用RayRay顶端可使用这些库之一,该库支持机器学习生态圈中你必须做的典型场景之一,无论是超参数调优或分布式培训或服务模型我们刚谈起第一家图书馆 RRLLIB学习可能你不得不下沉到RayAPI程序模拟器之类,但在很多情况下你不需要下沉到那种水平选择你需要的水平 并用它工作
最后我想谈一点 甚至使用从微服务 和视图中我们有 如何它能真正帮助构建应用并运行微服务创建的原因很多, 有很多好处我不会去研究, 但他们有一些挑战特别是,我想提一下这个概念 当你实际部署这些事时, 你会旋转出任意数的微服务实例你这样做有几个原因一是实现可扩缩性超出节点能给你的范围,二是提供恢复能力以防节点崩溃但所有这些东西都必须明确管理, 并有点挑战性事实上,它引出一些回击反射 整个概念微服务雷的伟大事物之一是 它实际上让你回溯到简单 逻辑实例实现微服务, 但在幕后 Ray透明缩放要知道,你得到回弹性它是一个交叉集群, 和可扩缩性没有单节点边界并支持各种机器学习问题的具体案例
好,让我给你演示一下-[指令员]这个演示会看到如何使用雷PySpark或至少一种方法你能做到Spark+AI2020峰会使用方式的好处, 我们实际上要嵌入Spark为PySpark使用UDF, 其优点在于避免HTTP高管和其他静默调用有时最好为平时放弃理由而拆分服务,但有时你可能想提高代码在UDF合用效率,即使Spark和Ray都可能运行集群并可能有节点交叉通信期望它能优化 各种方式 比较难做 当有离散硬码服务重头来 劣势是连接代码 比服务里要紧管它呢,你可以多查Ray 在Ray.io并启动Ray集群命令射线启动-头部-我要连接它并在这里运行点Spark作业评估笔记本细胞先确认Java8运行足够确定包括Pyspark和Ray等导入物, PysparkSQLAPI导入物和类型,然后我们实际上要定义UDF
样本应用我将要展示 排序简单方法数据治理数据治理是一个大题目,它真的 关于管理线程和遗留数据, 谁看到它,谁访问它,集中处理一个小用案例 即,我想记录我在工作中所见记录 基本为审核目的微小Python类,我一小段解释Ray远程注解, 但它提醒人们注意它, 数据治理服务可能是钩子 实际讲像Apache地图集或主API法是日志或我调用记录方法取ID重置列表并测量系统运行时间Ray远程装饰器实际上将把它从平凡Python类转换成我们称它为Ray演艺者,这是一个显赫的事情,它将在集群内某处运行,并可以令它调用它即Ray处理分布状态之法 即角色封装状态if you don't need. 我们也可以用相同的装饰器Ray远程操作我也需要这些身份证和计数方法, 因为一旦它是一个演员, 我不能直接伸展和阅读类域得先得得方法所以这就是它的目的多半只是字典打包 或抱歉 列表好,现在让我们定义基本记录类型, 所有这一切都会 只是事物 有身份证和不透明数据集使用它作为演示工具现在我们要启动Ray应用已经像集群运行 基本上我们附着它类似创建spark上下文器或spark会话地址等同零或抱歉等同汽车说 连接集群忽略重归误差就是这样只是别大惊小怪继续走并有方便工具 称达什板点击它,然后我可以看到我有数项任务已经运行假设它聚类中, 上百个环绕聚类中, 我可以使用它我不再展示它了, 但我可以用它来观察事物如何表现 剖析事物之类重回笔记本现在我们要制作一个叫做独立演艺排序像名服务, 东西我可以伸手 系统告诉我或勾住它 免得我保留引用 在我的ython代码中这对于UDFs比较方便 在那里我们将运行 集群完全脱钩 与这个笔记本需要获取应用,这个对象 在那里所以我们要造名独立演艺我这里有这个小逻辑检查它是否已经创建,如果已经创建,那就不要再试并足够确定我们已经注册了这件事情, 所以我们可以继续正像测试一样,我们继续试使用Ray.util.get_a并写几张记录成功时我拥有小助手函数, 使用来观察状态, 并确信,我们有一堆, 实际上比前运行多三次, 但我们正准备重置它重置为零清一色重头来函数为UDF和它要做的第一,它基本将做相同的初始化 我们刚做的地方任务 运行分治Sparkwe'll初始化Ray我们只需要做一次然后我们用同样的把戏 向Ray请求演员并记录身份证并有一个方法在这里, 你会看到ray.get, 倒数第二行归根结底,当调用.emote时, 即我们记录这些方法的方式, 实属异步进程归回手柄 未来你以后用它获取值 如果你想它异步运行 开火忘记 继续前行 永不阻塞等待完成本案中,我们想确认它有效开始ray.get区块直到结果从动作调回dgs.log使用的方法日志这些ID, 添加.remote是必要的, 因为它现在是一个演员, 后ray.get会检索,而它实际上返回当前计数这也是我们回UDF的一部分好,现在我们照例SparkSpark初始化 开发UDF 返回MapType提醒日志记录返回字符串,不管它是否成功初始化归回字典 转成JSON对象 并映射成此MapType带字符串,即键和整数,即值好写50个记录从记录中创建DataFrame系统后, 并实际运行回域查询, 但也同时调用UDF并别名新策略下面是结果可见我们异步成功加法通知计数不合序因为我们实际运行至少三大并行任务分三次分三次只需写一次数据 其余数据写成工作原理并检查什么状态我们现在有50个记录像我们期望的那样重置并继而可选择, 任由驱动程序调用, 退出,像我们关闭笔记本并关闭它, 雷自动关闭或至少局部连接Ray集群,好 就这样- 好吧,我们看到了点 关于如何使用Ray实战演示一种可能,你可以集成Spark容我先谈一下spark对Ray的长处 和时间使用
所有我在这里对查询所讲的都一样, 所有人都知道spark对大规模数据集问题非常之之高, 特别是当您有统一的系统化记录时即使是做自然语言处理 并存所谓的非结构化数据 几乎立即转换成某种结构 spark对数据高效并行化变换分析SQLAPI顶部为那些不想低层次编程者提供极佳SQLAPI以批量方式和流处理方式 做这种解析效果很好并让你真正直观高层次抽取各种数据科学工程任务出名是因为它做得很好
但我提到Ray出面解决新问题这些东西我们认为Ray优异高非一致性图数据或计算写程序时可以思考典型对象模型结构图都任意搭配 万一需要分布在集群上 但仍可存取并必须能够直觉处理分布状态雷试图用Python类解决, 并计算你可能正在做的高非一致性和高度分布式,从小任务到超大计算密集任务,不同资源瑞提供直觉API 90-95%案例 不需要严格控制 非一致性高分布计算想要合理直觉的东西 扩展你从Python已经理解的概念 并允许你工作 并照常工作正前文所见并讨论过,它真正有益于 无序计算,你可能需要做 补充spark能力并出现像图书馆 强化学习,超参数优化 投向梯度下降等
如果你想从Ray开始, 只需几件资源查退
iblib多处理池等单节点上多线程或多进程使用中Python世界最常用的库时,Ray先有一些下传替换程序,或与这些合并或替换,以便你现在可以破开单节点边界,继续使用常用软件通常这只是单修改导入语句, 类似多处理池案例
BOB低频彩如果你想多了解Ray 去Rayio查找链接文档示例教程实战教程开始展开可实际查看Github源码并有一堆事件 关于Ray题目和机器学习 今年夏天非常感谢收听我希望你喜欢这个提供反馈通知我你对谈的想法
任意尺度
Dean Wampler(@deanwampler)是流水系统专家,关注ML/AIEvengelicism Anyscal.io主管,它正在开发Ray分布式Pythonbob下载地址曾任开源工具流数据应用综合系统Lightbend云开发bob下载地址Dean为O'Reilly写书并贡献数个开源项目常任会议讲演教程和芝加哥数大用户群协办Dean有博士学位华盛顿大学物理学