【MLOps】使用Ray缩放AI

2024-01-05 21:04
文章标签 ai 使用 缩放 ray mlops

本文主要是介绍【MLOps】使用Ray缩放AI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Ray正在人工智能工程领域崭露头角,对扩展LLM和RL至关重要

Spark在数据工程中几乎是必不可少的。Ray正在人工智能工程领域崭露头角。

雷是伦敦大学学院Spark的继任者。Spark和Ray有很多相似之处,例如用于计算的统一引擎。但Spark主要专注于大规模数据分析,而Ray则是为机器学习应用程序设计的。

在这里,我将介绍Ray,并介绍如何使用Ray扩展大型语言模型(LLM)和强化学习(RL),然后总结Ray的怀旧和趋势。

Ray简介

Ray是一个开源的统一计算框架,可以轻松扩展人工智能和Python的工作负载,从强化学习到深度学习,再到模型调整和服务。

下面是Ray的最新架构。它主要有三个组件:Ray Core、Ray AI Runtime和Storage and Tracking。

Ray 2.x and Ray AI Runtime (AIR) (Source: January 2023 Ray Meetup)

Ray Core为构建和扩展分布式应用程序提供了少量核心原语(即任务、参与者、对象)。

Ray AI Runtime(AIR)是一个可扩展的统一ML应用工具包。AIR能够简单地扩展单个工作负载、端到端工作流和流行的生态系统框架,所有这些都只需使用Python。

AIR建立在Ray一流的预处理、培训、调整、评分、服务和强化学习库的基础上,将集成生态系统整合在一起。

Ray实现了工作负载从笔记本电脑到大型集群的无缝扩展。Ray集群由单个头节点和任意数量的连接辅助节点组成。工作节点的数量可以根据Ray集群配置指定的应用程序需求进行自动缩放。头节点运行自动缩放器。

我们可以提交作业以在Ray集群上执行,也可以通过连接到头部节点并运行Ray.init来交互使用集群。

启动并运行Ray很简单。下面将说明如何安装它。

安装Ray

$ pip install ray
████████████████████████████████████████ 100%
Successfully installed ray
$ python
>>>import ray; ray.init()... INFO worker.py:1509 -- Started a local Ray instance. View the dashboard at 127.0.0.1:8265 ...

Install Ray libraries

pip install -U "ray[air]" # installs Ray + dependencies for Ray AI Runtime
pip install -U "ray[tune]"  # installs Ray + dependencies for Ray Tune
pip install -U "ray[rllib]"  # installs Ray + dependencies for Ray RLlib
pip install -U "ray[serve]"  # installs Ray + dependencies for Ray Serve

此外,Ray可以在Kubernetes和云虚拟机上大规模运行。

使用Ray缩放LLM和RL

ChatGPT是一个重要的人工智能里程碑,具有快速增长和前所未有的影响力。它建立在OpenAI的GPT-3大型语言模型家族(LLM)的基础上,采用了Ray。

OpenAI首席技术官兼联合创始人Greg Brockman表示,在OpenAI,我们正在解决世界上一些最复杂、最苛刻的计算问题。Ray为这些最棘手的问题提供了解决方案,并使我们能够比以前更快地大规模迭代。

在SageMaker培训平台的240 ml.p4d.24个大型实例上训练GPT-3大约需要25天。挑战不仅在于处理,还在于记忆。Wu Tao 2.0似乎只需要1000多个GPU来存储其参数。

训练ChatGPT,包括像GPT-3这样的大型语言模型,需要大量的计算资源,估计要花费数千万美元。通过授权ChatGPT,我们可以看到Ray的可扩展性。

Ray试图解决具有挑战性的ML问题。它从一开始就支持培训和服务强化学习模式。

让我们用Python编写代码,看看如何训练大规模的强化学习模型,并使用Ray serve为其提供服务。

步骤1:安装强化学习策略模型的依赖项。

!pip install -qU "ray[rllib,serve]" gym

第二步:定义大规模强化学习策略模型的培训、服务、评估和查询。

import gym
import numpy as np
import requests# import Ray-related libs
from ray.air.checkpoint import Checkpoint
from ray.air.config import RunConfig
from ray.train.rl.rl_trainer import RLTrainer
from ray.air.config import ScalingConfig
from ray.train.rl.rl_predictor import RLPredictor
from ray.air.result import Result
from ray.serve import PredictorDeployment
from ray import serve
from ray.tune.tuner import Tuner# train API for RL by specifying num_workers and use_gpu
def train_rl_ppo_online(num_workers: int, use_gpu: bool = False) -> Result:print("Starting online training")trainer = RLTrainer(run_config=RunConfig(stop={"training_iteration": 5}),scaling_config=ScalingConfig(num_workers=num_workers, use_gpu=use_gpu),algorithm="PPO",config={"env": "CartPole-v1","framework": "tf",},)tuner = Tuner(trainer,_tuner_kwargs={"checkpoint_at_end": True},)result = tuner.fit()[0]return result# serve RL model
def serve_rl_model(checkpoint: Checkpoint, name="RLModel") -> str:""" Serve an RL model and return deployment URI.This function will start Ray Serve and deploy a model wrapperthat loads the RL checkpoint into an RLPredictor."""serve.run(PredictorDeployment.options(name=name).bind(RLPredictor, checkpoint))return f"http://localhost:8000/"# evaluate RL policy
def evaluate_served_policy(endpoint_uri: str, num_episodes: int = 3) -> list:""" Evaluate a served RL policy on a local environment.This function will create an RL environment and step through it.To obtain the actions, it will query the deployed RL model."""env = gym.make("CartPole-v1")rewards = []for i in range(num_episodes):obs = env.reset()reward = 0.0done = Falsewhile not done:action = query_action(endpoint_uri, obs)obs, r, done, _ = env.step(action)reward += rrewards.append(reward)return rewards# query API on the RL endpoint
def query_action(endpoint_uri: str, obs: np.ndarray):""" Perform inference on a served RL model.This will send an HTTP request to the Ray Serve endpoint of the servedRL policy model and return the result."""action_dict = requests.post(endpoint_uri, json={"array": obs.tolist()}).json()return action_dict

步骤3:现在训练模型,使用Ray serve为其服务,评估服务的模型,最后关闭Ray serve。

# training in 20 workers using GPU
result = train_rl_ppo_online(num_workers=20, use_gpu=True)# serving
endpoint_uri = serve_rl_model(result.checkpoint)# evaluating
rewards = evaluate_served_policy(endpoint_uri=endpoint_uri)# shutdown
serve.shutdown()

Ray怀旧与潮流

Ray是作为UCB RISELab的一个研究项目启动的。RISELab是Spark诞生地AMPLab的继任者。

Ion Stoica教授是Spark和Ray的灵魂。他开始以Spark和Anyscale为核心产品创建Databricks。

我有幸在RISELab的早期阶段与研究员合作,见证了Ray的诞生。

Ray's project post at the conference 2017 (Photo courtesy by author)

以上是雷在2017年的项目帖子。我们可以看到,它非常简单,但对于人工智能应用程序来说功能强大。

雷是一艘恒星飞船,正在增殖。它是增长最快的开源之一,正如下面Github的星级数量所示。

Ray正在人工智能工程领域崭露头角,是扩展LLM和RL的重要工具。Ray为未来巨大的人工智能机会做好了准备。

本文:【MLOps】使用Ray缩放AI | 开发者开聊

自我介绍

  • 做一个简单介绍,酒研年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【架构师研究会】和【开发者开聊】,有更多的内容分享,谢谢大家收藏。
  • 企业架构师需要比较广泛的知识面,了解一个企业的整体的业务,应用,技术,数据,治理和合规。之前4年主要负责企业整体的技术规划,标准的建立和项目治理。最近一年主要负责数据,涉及到数据平台,数据战略,数据分析,数据建模,数据治理,还涉及到数据主权,隐私保护和数据经济。 因为需要,比如数据资源入财务报表,另外数据如何估值和货币化需要财务和金融方面的知识,最近在学习财务,金融和法律。打算先备考CPA,然后CFA,如果可能也想学习法律,备战律考。
  • 欢迎爱学习的同学朋友关注,也欢迎大家交流。全网同号【架构师研究会】

欢迎收藏  【全球IT瞭望】,【架构师酒馆】和【开发者开聊】.

这篇关于【MLOps】使用Ray缩放AI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/574158

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min