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

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#7F7F7F","name":"user"}}],"text":"作者: "},{"type":"text","marks":[{"type":"color","attrs":{"color":"#999999","name":"user"}}],"text":"Wesley Du, Junwei Deng, Kai Huang, Shan Yu and Shane Huang  "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作者是英特尔人工智能和分析团队的解决方案架构师,该团队一直致力于 BigDL的开发。数据科学家和数据工程师可以使用BigDL轻松构建端到端的分布式 AI 应用。"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"介绍"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.ray.io\/","title":null,"type":null},"content":[{"type":"text","text":"Ray"}]},{"type":"text","text":"是一个能够非常快速和简单地去构建分布式应用的框架。"},{"type":"link","attrs":{"href":"https:\/\/github.com\/intel-analytics\/BigDL","title":null,"type":null},"content":[{"type":"text","text":"BigDL"}]},{"type":"text","text":"是一个在分布式大数据上构建可扩展端到端 AI的开源框架,它能利用 Ray 及其本地库(Native Libraries)来支持高级 AI 用例,如 AutoML 和自动时间序列分析。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在这篇博客中,我们将介绍 BigDL 中的一些核心组件和展示 BigDL 如何利用 Ray 及其本地库来构建底层基础设施(例如 RayOnSpark、AutoML 等)以及这些将如何帮助用户构建AI 应用(例如使用"},{"type":"link","attrs":{"href":"https:\/\/bigdl.readthedocs.io\/en\/latest\/doc\/Chronos\/Overview\/chronos.html","title":null,"type":null},"content":[{"type":"text","text":"Chronos"}]},{"type":"text","text":" 进行自动时间序列分析)。"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"RayOnSpark:在Apache Spark上无缝运行Ray程序"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Ray是一个开源分布式框架,允许用户轻松高效地运行许多新兴的人工智能应用,例如深度强化学习和自动化机器学习。BigDL 通过 RayOnSpark 可以将 Ray 无缝集成到大数据预处理流水线中,并已经在一些特定领域构建了多个高级的端到端 AI 应用(例如 AutoML 和 Chronos)。RayOnSpark 在基于Apache Spark的大数据集群(例如 Apache Hadoop* 或 Kubernetes* 集群)之上运行 Ray 的程序,这样一来在内存中的Spark DataFrame可以直接传输到 Ray 程序中用于高级 AI 应用。因此借助 RayOnSpark,用户就可以在生产环境现有的大数据集群上直接尝试各种新兴的人工智能应用。此外,RayOnSpark 能将Ray 的程序无缝集成到 Apache Spark 数据处理的流水线中,并直接在内存中的DataFrame 上运行。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/5f\/5f86f91bfe18759591504c02213779b4.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"图 1:RayOnSpark 架构"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"图 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 代码。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"1.  "},{"type":"text","text":"import ray  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"2.  "},{"type":"text","text":"from bigdl.orca import init_orca_context  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"3.  "},{"type":"text","text":"from bigdl.orca.ray import RayContext  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"4.  "},{"type":"text","text":"# Initialize SparkContext on the underlying cluster (e.g. the Hadoop\/Yarn cluster)  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"5.  "},{"type":"text","text":"sc = init_orca_context(cluster_mode=\"yarn\", cores=...,memory=...,num_nodes=...)  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"6.  "},{"type":"text","text":"# Initialize RayContext and launch Ray under the same cluster.  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"7.  "},{"type":"text","text":"ray_ctx = RayContext(sc, object_store_memory=...,...)  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"8.  "},{"type":"text","text":"ray_ctx.init()  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"9.  "},{"type":"text","text":"@ray.remote  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"10. "},{"type":"text","marks":[{"type":"color","attrs":{"color":"#006699","name":"user"}},{"type":"strong"}],"text":"class"},{"type":"text","text":" Counter(object)  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"11. "},{"type":"text","text":"   def __init__(self):  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"12. "},{"type":"text","text":"      self.n = 0  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"13. "},{"type":"text","text":"   def increment(self):  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"14. "},{"type":"text","text":"      self.n += 1  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"15. "},{"type":"text","text":"      "},{"type":"text","marks":[{"type":"color","attrs":{"color":"#006699","name":"user"}},{"type":"strong"}],"text":"return"},{"type":"text","text":" self.n  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"16. "},{"type":"text","text":"# The Ray actors are created across the big data cluster  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"17. "},{"type":"text","text":"counters = [Counter.remote() "},{"type":"text","marks":[{"type":"color","attrs":{"color":"#006699","name":"user"}},{"type":"strong"}],"text":"for"},{"type":"text","text":" i in range(5)]  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"18. "},{"type":"text","text":"ray.get([c.increment.remote() "},{"type":"text","marks":[{"type":"color","attrs":{"color":"#006699","name":"user"}},{"type":"strong"}],"text":"for"},{"type":"text","text":" c in counters])  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"19. "},{"type":"text","text":"ray_ctx.stop()  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"20. "},{"type":"text","text":"sc.stop()  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"图 2:RayOnSpark 的示例代码"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"AutoML (orca.automl):使用 Ray Tune为AI 应用程序轻松调参"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在机器学习或深度学习模型的准确性、性能等方面,超参数优化 (HPO) 对于数据科学家实现其目标非常重要。但是手动对超参数进行调优可能十分耗时且结果也并不能令人满意。与此同时,分布式超参数优化编程也是一个具有挑战性的工作。Ray Tune是一个用于深度学习可扩展的超参数优化框架。BigDL 引入了构建在Ray Tune之上的 AutoML 功能(orca.automl),可以让数据科学家的工作更轻松。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"orca.automl介绍"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"很多情况下,数据科学家更愿意在笔记本电脑上对他们的 AI 应用程序进行原型设计、调试和调参,如果可以将相同的代码完整地迁移到集群中并直接运行,这将大大提高端到端的生产力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"BigDL 的 Orca 项目可帮助用户将他们的代码从笔记本电脑无缝扩展到大数据集群。此外,BigDL 的 orca.automl 充分利用了 RayOnSpark 和 Ray Tune,提供了一个名为"},{"type":"link","attrs":{"href":"https:\/\/bigdl.readthedocs.io\/en\/latest\/doc\/Orca\/QuickStart\/orca-autoestimator-pytorch-quickstart.html","title":null,"type":null},"content":[{"type":"text","text":"AutoEstimator"}]},{"type":"text","text":"的分布式超参数调优 API 。得益于Ray Tune与框架无关的特性,AutoEstimator 同时适用于 PyTorch 和 TensorFlow 模型。用户可以在他们的笔记本电脑、本地服务器、K8s 集群、Hadoop\/YARN 集群等上,用一致的方式对他们的模型进行调参。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"凭借这些特性,BigDL 中的 orca.automl 可用于许多 AI 应用的自动化调优(包括模型、超参数等)。例如,我们使用 BigDL 的 orca.automl 实现了 AutoXGBoost(XGBoost with HPO)用以自动拟合和优化 XGBoost 模型。相比 Nvidia A100 上的类似解决方案,使用 AutoXGBoost 的训练速度提高了约 1.7 倍,最终模型更加准确。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更多详情,可参阅"},{"type":"link","attrs":{"href":"https:\/\/medium.com\/intel-analytics-software\/scalable-autoxgboost-using-analytics-zoo-automl-30d576cb138a","title":null,"type":null},"content":[{"type":"text","text":"https:\/\/medium.com\/intel-analytics-software\/scalable-autoxgboost-using-analytics-zoo-automl-30d576cb138a"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"设计细节,可参阅"},{"type":"link","attrs":{"href":"https:\/\/bigdl.readthedocs.io\/en\/latest\/doc\/Orca\/Overview\/distributed-tuning.html","title":null,"type":null},"content":[{"type":"text","text":"orca.automl User Guide"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"实际操作,可参阅"},{"type":"link","attrs":{"href":"https:\/\/bigdl.readthedocs.io\/en\/latest\/doc\/Orca\/QuickStart\/orca-autoxgboost-quickstart.html","title":null,"type":null},"content":[{"type":"text","text":"AutoXGBoost Quick Start"}]},{"type":"text","text":" 或者 "},{"type":"link","attrs":{"href":"https:\/\/bigdl.readthedocs.io\/en\/latest\/doc\/Orca\/QuickStart\/orca-autoestimator-pytorch-quickstart.html","title":null,"type":null},"content":[{"type":"text","text":"Auto Tuning for arbitrary models"}]}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"Chronos:在Ray上使用 AutoTS构建自动时间序列分析"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我们还开发了一个为自动时间序列分析的应用框架,称为 "},{"type":"link","attrs":{"href":"https:\/\/bigdl.readthedocs.io\/en\/latest\/doc\/Chronos\/Overview\/chronos.html","title":null,"type":null},"content":[{"type":"text","text":"Chronos"}]},{"type":"text","text":"。它基于orca.automl在自动分析期间进行超参数优化。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"为什么我们需要 Chronos?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"时间序列(TS)分析现在被广泛的应用于各个领域(例如电信中的网络质量分析、数据中心运营的日志分析、高价值设备的预测性维护等),并且变得越来越重要。在最为常用的预测与检测领域,传统统计学方法在准确性与灵活性上都面临巨大的挑战,深度学习方法通过将时间序列任务视为序列建模问题,在多个领域获得了成功。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但在另一方面,为时间序列预测\/检测构建机器学习应用程序可能是一个费力且需要很多专业知识的过程。超参数设置、预处理和特征工程都可能成为影响深度学习模型表现的瓶颈。为了提供一个高效、强大且易用的时间序列分析工具箱,我们推出了Chronos,这是一个用于构建大规模时间序列分析应用程序的框架。它可以使用 AutoML 并进行分布式训练,因为它建立在 Ray Tune、Ray Train和 RayOnSpark 之上。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Chronos 架构介绍"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Chronos 具有多个 (10+) 用于时间序列预测、检测和模拟的内置深度学习和机器学习模型,以及大量 (70+) 数据处理和特征工程工具。用户可以自己调用独立的算法和模型(预测器(Forecasters), 检测器(Detectors), 模拟器(Simulators))以获得最高的灵活性,或者使用我们高度集成、可扩展和自动化的时间序列工作流 (AutoTS)。推理过程也以多种方式进行了优化,包括集成"},{"type":"link","attrs":{"href":"https:\/\/onnxruntime.ai\/","title":null,"type":null},"content":[{"type":"text","text":"ONNX runtime"}]},{"type":"text","text":"。。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下图展示了在 BigDL 和 Ray 之上的 Chronos 架构。本节重点介绍 AutoTS 组件。AutoTS 框架使用 Ray Tune 作为超参数搜索引擎(运行在 RayOnSpark 之上)。在自动数据处理中,搜索引擎为预测任务选择最佳回看值。在自动特征工程中,搜索引擎会从各种特征生成工具(例如,tsfresh)自动生成的一组特征中选择最佳特征子集。在自动建模中,搜索引擎会搜索超参数,例如隐藏层的维度、学习率等等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/be\/be1ea67e065c39bde1104266a84e916d.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"图 3:Chronos 架构"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Chronos AutoTS 工作流的实操示例"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下面的代码展示了,使用 Chronos 易用且高度集成的 AutoTS 工作流的时间序列预测流水线的训练和推理过程。这个工作流利用TSDataset上简单的API来执行一些典型的时间序列处理(例如,填充,缩放等)和特征生成。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"1.  "},{"type":"text","text":"import pandas as pd  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"2.  "},{"type":"text","text":"from sklearn.preprocessing import StandardScaler  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"3.  "},{"type":"text","text":"from bigdl.chronos.data import TSDataset  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"4.  "},{"type":"text","text":"  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"5.  "},{"type":"text","text":"# data initialization and split  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"6.  "},{"type":"text","text":"df = pd.read_csv(\"table.csv\")  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"7.  "},{"type":"text","text":"tsdata_train, tsdata_val, tsdata_test = TSDataset.from_pandas(df,  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"8.  "},{"type":"text","text":"                      dt_col=\"StartTime\",   "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"9.  "},{"type":"text","text":"                      target_col=\"AvgRate\",  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"10. "},{"type":"text","text":"                      with_split=True,  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"11. "},{"type":"text","text":"                      val_ratio=0.1)  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"12. "},{"type":"text","text":"  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"13. "},{"type":"text","text":"# data processing and feature engineering  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"14. "},{"type":"text","text":"standard_scaler = StandardScaler()  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"15. "},{"type":"text","marks":[{"type":"color","attrs":{"color":"#006699","name":"user"}},{"type":"strong"}],"text":"for"},{"type":"text","text":" tsdata in [tsdata_train, tsdata_val, tsdata_test]:  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"16. "},{"type":"text","text":"   tsdata.gen_dt_feature()\\  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"17. "},{"type":"text","text":"         .impute(mode=\"last\")\\  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"18. "},{"type":"text","text":"         .scale(standard_scaler, fit=(tsdata is tsdata_train))  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"然后用户可以通过模型名称(model)(内置模型名称\/为第 3 方模型创建函数)、回看值(past_seq_len)和预测步数(future_seq_len)来进行初始化AutoTSEstimator。该AutoTSEstimator在 Ray Tune 上运行搜索工序,每运行一次生成多个trials(每个trial具有不同的超参数和特征子集组合),并把trials分布在 Ray 集群中。在所有trials完成后,根据目标指标检索最佳超参数集、优化模型和数据处理工序,用于组成最终的 TSPipeline。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"1.  "},{"type":"text","text":"from bigdl.chronos.autots import AutoTSEstimator  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"2.  "},{"type":"text","text":"import bigdl.orca.automl.hp as hp  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"3.  "},{"type":"text","text":"  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"4.  "},{"type":"text","text":"# create a AutoTSEstimator  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"5.  "},{"type":"text","text":"auto_estimator = AutoTSEstimator(model='tcn',  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"6.  "},{"type":"text","text":"                                 past_seq_len=hp.randint(50,100),  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"7.  "},{"type":"text","text":"                                 future_seq_len=1)  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"8.  "},{"type":"text","text":"  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"9.  "},{"type":"text","text":"# fit on the AutoTSEstimator with HPO, auto feature, past_seq_len selector  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"10. "},{"type":"text","text":"ts_pipeline = auto_estimator.fit(data=tsdata_train,  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"11. "},{"type":"text","text":"                                 validation_data=tsdata_val)  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TSPipeline可用于预测,评估和增量拟合。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"1.  "},{"type":"text","text":"# predict\/evaluate with TSPipeline  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"2.  "},{"type":"text","text":"y_pred = ts_pipeline.predict(tsdata_test)  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#5C5C5C","name":"user"}}],"text":"3.  "},{"type":"text","text":"test_mse = ts_pipeline.evaluate(tsdata_test, metrics = ['mse'])  "}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更多详细信息,可参阅"},{"type":"link","attrs":{"href":"https:\/\/bigdl.readthedocs.io\/en\/latest\/doc\/Chronos\/Overview\/chronos.html","title":null,"type":null},"content":[{"type":"text","text":"Chronos User Guide"}]},{"type":"text","text":"。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"使用 Chronos AutoTS 进行 5G 网络时间序列分析"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Chronos 已被广泛应用于许多领域,例如电信和 AIOps。Capgemini Engineering 在其 5G 介质访问控制 (MAC) 中利用 Chronos AutoML 工作流和推理优化来实现认知功能,作为智能 RAN 控制器节点的一部分。在这个项目中,Chronos 用于预测 UE 的移动性,以帮助 MAC 调度程序在 2 个关键 KPI 上进行有效的链路自适应。通过 Chronos AutoTS,Capgemini Engineering将他们的模型更改为我们内置的 TCN 模型并选用了更加适合的回看值,成功将 AI 准确率提高了 55%。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"详细信息请参考"},{"type":"link","attrs":{"href":"https:\/\/networkbuilders.intel.com\/solutionslibrary\/intelligent-5g-l2-mac-scheduler-powered-by-capgemini-netanticipate-5g-on-intel-architecture","title":null,"type":null},"content":[{"type":"text","text":"白皮书"}]},{"type":"text","text":"。"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"结论"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在本文中,我们介绍了 BigDL 如何利用 Ray 及其库为大数据构建可扩展的 AI 应用程序(使用 RayOnSpark)、提高端到端 AI 开发效率(在 Ray Tune 之上使用 AutoML)以及构建特定领域的 AI 用例(例如使用 Chronos 进行自动时间序列分析)。BigDL 在其他方面也采用了 Ray,例如BigDL Orca 项目中正在使用Ray Train,用以跨大数据集群无缝扩展单节点 Python notebook。我们还在探索其他用例,例如推荐系统、强化学习等,这些将利用在Ray上构建的AutoML功能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文链接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.anyscale.com\/blog\/from-ray-to-chronos-build-end-to-end-ai-use-cases-using-bigdl-on-top-of-ray","title":null,"type":null},"content":[{"type":"text","text":"https:\/\/www.anyscale.com\/blog\/from-ray-to-chronos-build-end-to-end-ai-use-cases-using-bigdl-on-top-of-ray"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章