写点什么

从 Ray 到 Chronos:在 Ray 上使用 BigDL 构建端到端 AI 用例

  • 2021-11-19
  • 本文字数:4322 字

    阅读完需:约 14 分钟

从 Ray 到 Chronos:在 Ray 上使用 BigDL 构建端到端 AI 用例

作者: Wesley Du, Junwei Deng, Kai Huang, Shan Yu and Shane Huang  

作者是英特尔人工智能和分析团队的解决方案架构师,该团队一直致力于 BigDL 的开发。数据科学家和数据工程师可以使用 BigDL 轻松构建端到端的分布式 AI 应用。

介绍

Ray是一个能够非常快速和简单地去构建分布式应用的框架。BigDL是一个在分布式大数据上构建可扩展端到端 AI 的开源框架,它能利用 Ray 及其本地库(Native Libraries)来支持高级 AI 用例,如 AutoML 和自动时间序列分析。


在这篇博客中,我们将介绍 BigDL 中的一些核心组件和展示 BigDL 如何利用 Ray 及其本地库来构建底层基础设施(例如 RayOnSpark、AutoML 等)以及这些将如何帮助用户构建 AI 应用(例如使用Chronos 进行自动时间序列分析)。

RayOnSpark:在 Apache Spark 上无缝运行 Ray 程序

Ray 是一个开源分布式框架,允许用户轻松高效地运行许多新兴的人工智能应用,例如深度强化学习和自动化机器学习。BigDL 通过 RayOnSpark 可以将 Ray 无缝集成到大数据预处理流水线中,并已经在一些特定领域构建了多个高级的端到端 AI 应用(例如 AutoML 和 Chronos)。RayOnSpark 在基于 Apache Spark 的大数据集群(例如 Apache Hadoop* 或 Kubernetes* 集群)之上运行 Ray 的程序,这样一来在内存中的 Spark DataFrame 可以直接传输到 Ray 程序中用于高级 AI 应用。因此借助 RayOnSpark,用户就可以在生产环境现有的大数据集群上直接尝试各种新兴的人工智能应用。此外,RayOnSpark 能将 Ray 的程序无缝集成到 Apache Spark 数据处理的流水线中,并直接在内存中的 DataFrame 上运行。



图 1:RayOnSpark 架构

图 1 展示了 RayOnSpark 的架构。在 Spark 的实现中,Spark 程序会在 driver 节点上创建 SparkSession 对象,其中 SparkContext 会负责在集群上启动多个 Spark executors 以运行 Spark 任务。在 RayOnSpark 中,在 Spark driver 节点上会额外创建一个 RayContext 对象,该对象会在同一集群中伴随每个 Spark executor 一起自动启动 Ray 进程。RayContext 同时会在每个 Spark executor 内部创建一个 RayManager 来管理 Ray 进程(例如,在程序退出时自动关闭进程)。下面的代码块演示了用户如何在初始化 RayOnSpark 后,直接在标准 Spark 应用程序中编写 Ray 代码。


import rayfrom bigdl.orca import init_orca_contextfrom bigdl.orca.ray import RayContext
# Initialize SparkContext on the underlying cluster (e.g. the Hadoop/Yarn cluster)sc = init_orca_context(cluster_mode="yarn", cores=...,memory=...,num_nodes=...)# Initialize RayContext and launch Ray under the same cluster.ray_ctx = RayContext(sc, object_store_memory=...,...)ray_ctx.init()
@ray.remoteclass Counter(object) def __init__(self): self.n = 0 def increment(self): self.n += 1 return self.n
# The Ray actors are created across the big data clustercounters = [Counter.remote() for i in range(5)]ray.get([c.increment.remote() for c in counters])ray_ctx.stop()sc.stop()
复制代码


图 2:RayOnSpark 的示例代码

AutoML (orca.automl):使用 Ray Tune 为 AI 应用程序轻松调参

在机器学习或深度学习模型的准确性、性能等方面,超参数优化 (HPO) 对于数据科学家实现其目标非常重要。但是手动对超参数进行调优可能十分耗时且结果也并不能令人满意。与此同时,分布式超参数优化编程也是一个具有挑战性的工作。Ray Tune 是一个用于深度学习可扩展的超参数优化框架。BigDL 引入了构建在 Ray Tune 之上的 AutoML 功能(orca.automl),可以让数据科学家的工作更轻松。

orca.automl 介绍

很多情况下,数据科学家更愿意在笔记本电脑上对他们的 AI 应用程序进行原型设计、调试和调参,如果可以将相同的代码完整地迁移到集群中并直接运行,这将大大提高端到端的生产力。


BigDL 的 Orca 项目可帮助用户将他们的代码从笔记本电脑无缝扩展到大数据集群。此外,BigDL 的 orca.automl 充分利用了 RayOnSpark 和 Ray Tune,提供了一个名为AutoEstimator的分布式超参数调优 API 。得益于 Ray Tune 与框架无关的特性,AutoEstimator 同时适用于 PyTorch 和 TensorFlow 模型。用户可以在他们的笔记本电脑、本地服务器、K8s 集群、Hadoop/YARN 集群等上,用一致的方式对他们的模型进行调参。


凭借这些特性,BigDL 中的 orca.automl 可用于许多 AI 应用的自动化调优(包括模型、超参数等)。例如,我们使用 BigDL 的 orca.automl 实现了 AutoXGBoost(XGBoost with HPO)用以自动拟合和优化 XGBoost 模型。相比 Nvidia A100 上的类似解决方案,使用 AutoXGBoost 的训练速度提高了约 1.7 倍,最终模型更加准确。


更多详情,可参阅https://medium.com/intel-analytics-software/scalable-autoxgboost-using-analytics-zoo-automl-30d576cb138a

设计细节,可参阅orca.automl User Guide

实际操作,可参阅AutoXGBoost Quick Start 或者 Auto Tuning for arbitrary models

Chronos:在 Ray 上使用 AutoTS 构建自动时间序列分析

我们还开发了一个为自动时间序列分析的应用框架,称为 Chronos。它基于 orca.automl 在自动分析期间进行超参数优化。

为什么我们需要 Chronos?

时间序列(TS)分析现在被广泛的应用于各个领域(例如电信中的网络质量分析、数据中心运营的日志分析、高价值设备的预测性维护等),并且变得越来越重要。在最为常用的预测与检测领域,传统统计学方法在准确性与灵活性上都面临巨大的挑战,深度学习方法通过将时间序列任务视为序列建模问题,在多个领域获得了成功。

但在另一方面,为时间序列预测/检测构建机器学习应用程序可能是一个费力且需要很多专业知识的过程。超参数设置、预处理和特征工程都可能成为影响深度学习模型表现的瓶颈。为了提供一个高效、强大且易用的时间序列分析工具箱,我们推出了 Chronos,这是一个用于构建大规模时间序列分析应用程序的框架。它可以使用 AutoML 并进行分布式训练,因为它建立在 Ray Tune、Ray Train 和 RayOnSpark 之上。

Chronos 架构介绍

Chronos 具有多个 (10+) 用于时间序列预测、检测和模拟的内置深度学习和机器学习模型,以及大量 (70+) 数据处理和特征工程工具。用户可以自己调用独立的算法和模型(预测器(Forecasters), 检测器(Detectors), 模拟器(Simulators))以获得最高的灵活性,或者使用我们高度集成、可扩展和自动化的时间序列工作流 (AutoTS)。推理过程也以多种方式进行了优化,包括集成ONNX runtime。。

下图展示了在 BigDL 和 Ray 之上的 Chronos 架构。本节重点介绍 AutoTS 组件。AutoTS 框架使用 Ray Tune 作为超参数搜索引擎(运行在 RayOnSpark 之上)。在自动数据处理中,搜索引擎为预测任务选择最佳回看值。在自动特征工程中,搜索引擎会从各种特征生成工具(例如,tsfresh)自动生成的一组特征中选择最佳特征子集。在自动建模中,搜索引擎会搜索超参数,例如隐藏层的维度、学习率等等。



图 3:Chronos 架构

Chronos AutoTS 工作流的实操示例

下面的代码展示了,使用 Chronos 易用且高度集成的 AutoTS 工作流的时间序列预测流水线的训练和推理过程。这个工作流利用 TSDataset 上简单的 API 来执行一些典型的时间序列处理(例如,填充,缩放等)和特征生成。

import pandas as pdfrom sklearn.preprocessing import StandardScalerfrom bigdl.chronos.data import TSDataset
# data initialization and splitdf = pd.read_csv("table.csv")tsdata_train, tsdata_val, tsdata_test = TSDataset.from_pandas(df, dt_col="StartTime", target_col="AvgRate", with_split=True, val_ratio=0.1)
# data processing and feature engineeringstandard_scaler = StandardScaler()for tsdata in [tsdata_train, tsdata_val, tsdata_test]: tsdata.gen_dt_feature()\ .impute(mode="last")\ .scale(standard_scaler, fit=(tsdata is tsdata_train))
复制代码


然后用户可以通过模型名称(model)(内置模型名称/为第 3 方模型创建函数)、回看值(past_seq_len)和预测步数(future_seq_len)来进行初始化 AutoTSEstimator。该 AutoTSEstimator 在 Ray Tune 上运行搜索工序,每运行一次生成多个 trials(每个 trial 具有不同的超参数和特征子集组合),并把 trials 分布在 Ray 集群中。在所有 trials 完成后,根据目标指标检索最佳超参数集、优化模型和数据处理工序,用于组成最终的 TSPipeline。


from bigdl.chronos.autots import AutoTSEstimatorimport bigdl.orca.automl.hp as hp
# create a AutoTSEstimatorauto_estimator = AutoTSEstimator(model='tcn', past_seq_len=hp.randint(50,100), future_seq_len=1)
# fit on the AutoTSEstimator with HPO, auto feature, past_seq_len selectorts_pipeline = auto_estimator.fit(data=tsdata_train, validation_data=tsdata_val)
复制代码


TSPipeline 可用于预测,评估和增量拟合。


# predict/evaluate with TSPipeliney_pred = ts_pipeline.predict(tsdata_test)test_mse = ts_pipeline.evaluate(tsdata_test, metrics = ['mse'])
复制代码


更多详细信息,可参阅Chronos User Guide

使用 Chronos AutoTS 进行 5G 网络时间序列分析

Chronos 已被广泛应用于许多领域,例如电信和 AIOps。Capgemini Engineering 在其 5G 介质访问控制 (MAC) 中利用 Chronos AutoML 工作流和推理优化来实现认知功能,作为智能 RAN 控制器节点的一部分。在这个项目中,Chronos 用于预测 UE 的移动性,以帮助 MAC 调度程序在 2 个关键 KPI 上进行有效的链路自适应。通过 Chronos AutoTS,Capgemini Engineering 将他们的模型更改为我们内置的 TCN 模型并选用了更加适合的回看值,成功将 AI 准确率提高了 55%。

详细信息请参考白皮书

结论

在本文中,我们介绍了 BigDL 如何利用 Ray 及其库为大数据构建可扩展的 AI 应用程序(使用 RayOnSpark)、提高端到端 AI 开发效率(在 Ray Tune 之上使用 AutoML)以及构建特定领域的 AI 用例(例如使用 Chronos 进行自动时间序列分析)。BigDL 在其他方面也采用了 Ray,例如 BigDL Orca 项目中正在使用 Ray Train,用以跨大数据集群无缝扩展单节点 Python notebook。我们还在探索其他用例,例如推荐系统、强化学习等,这些将利用在 Ray 上构建的 AutoML 功能。


原文链接:

https://www.anyscale.com/blog/from-ray-to-chronos-build-end-to-end-ai-use-cases-using-bigdl-on-top-of-ray

2021-11-19 11:512402

评论

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

洋葱集团携手OceanBase实现分布式升级,全球数据首次实现跨云融合

OceanBase 数据库

客户案例|生学教育依托观测云打造可观测智慧教育新生态

观测云

菜鸟 CPaaS 平台微服务治理实践

阿里巴巴云原生

阿里云 微服务 云原生 CPaaS 菜鸟

如何组装一个注册中心

捉虫大师

注册中心 7月月更 后端启示录

企业内部信息碎片化该怎么办?不妨试试这样做

Baklib

阿里云消息队列 Kafka-消息检索实践

阿里巴巴云原生

kafka 阿里云 云原生 检索 消息

企业数字化转型成大趋势,选对在线协作工具很重要

Baklib

发评测赢好礼 | Serverless 函数计算征集令

阿里巴巴云原生

阿里云 Serverless 云原生

低代码工具有哪些特色?明眼人都能看出来的低代码两大发展轨迹!

优秀

低代码 低代码平台

Web3.0 时代,基于P2PDB实现一款Dapp的技术理论

Rock-李益

dapp 去中心化 去中心化数据库 p2pdb

深度解析Java静态代理与动态代理模式的实现

了不起的程序猿

Java java程序员 java编程

模块八作业 - 消息数据 MySQL 表设计

Elvis FAN

B站713事故后的多活容灾建设|TakinTalks大咖分享

TakinTalks稳定性社区

故障 稳定性保障

客户案例 | 聚焦流程体验,助银行企业APP迭代

易观分析

银行 客户 银行app

【刷题记录】22. 括号生成

WangNing

7月月更

《TiDB 6.x in Action》发布,凝聚社区集体智慧的 6.x 实践汇总!

TiDB 社区干货传送门

数据库 分布式数据库 TiDB

Docker 安装 Minio 搭建属于自己的文件服务器

宁在春

Docker Minio 7月月更

一文讲清楚SpringBoot六种读取配置方式

王小凡

Java 程序员 Sprint Boot

面试OPPO,16道题甩过来,我人傻了

Java永远的神

Java 程序员 面试 分布式 项目

工赋开发者社区 | 定了!就在7月30日!

工赋开发者社区

技术分享 工业 峰会

中天钢铁在 GPS、 AIS 调度中使用 TDengine

TDengine

数据库 tdengine 时序数据库

ES6 类聊 JavaScript 设计模式之行为型(一)

devpoint

JavaScript 设计模式 ECMAScript 6 7月月更

RocketMQ—(总结)一篇就搞懂RocketMQ

IT巅峰技术

人工智能助力复工复产,模版 OCR 轻松搞定健康码识别

亚马逊云科技 (Amazon Web Services)

人工智能 Lambda

SpringBoot应用使用Docker实现远程部署(保姆教程)

技术小生

Docker 7月月更

基础+框架+数据库+系统设计+算法,2022阿里最新Java面试突击手册我粉了

Java永远的神

Java 数据库 spring 面试 JVM

3分钟创建Serverless Job 定时获取新闻热搜

云端explorer

Serverless Job 新闻热搜 场景搭建

聊聊css中文字的换行问题

南极一块修炼千年的大冰块

7月月更

如何在github的pages部署hexo实现代码提交到仓库自动部署

娃娃菜

GitHub Pages 签约计划第三季

知识管理系统是什么?你需要知道这些

Geek_da0866

唠唠python的作用域,看看每个变量都为自己打下了多少江山

迷彩

Python 函数 作用域 7月月更

从 Ray 到 Chronos:在 Ray 上使用 BigDL 构建端到端 AI 用例_AI&大模型_Wesley Du等_InfoQ精选文章