首页 > 其他分享 >【MLOps】使用Ray缩放AI

【MLOps】使用Ray缩放AI

时间:2024-01-08 16:03:38浏览次数:39  
标签:endpoint 缩放 serve RL MLOps import ray Ray


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。

【MLOps】使用Ray缩放AI_强化学习

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 Runtimepip 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 gymimport 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 wrapper
    that 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.0
        done = False
        while not done:
            action = query_action(endpoint_uri, obs)
            obs, r, done, _ = env.step(action)
            reward += r
        rewards.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 served
    RL 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 GPUresult = 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的诞生。

【MLOps】使用Ray缩放AI_Ray_02

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

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

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

【MLOps】使用Ray缩放AI_数据_03

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

自我介绍

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

【MLOps】使用Ray缩放AI_人工智能_04

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

标签:endpoint,缩放,serve,RL,MLOps,import,ray,Ray
From: https://blog.51cto.com/jiagoushipro/9146240

相关文章

  • PHP的array_column()函数用法详解
    在PHP中,经常需要对数组进行处理和操作。有时候,需要从一个多维数组中获取特定的一列数据,这时候就可以使用array_column()函数来实现。本文将详细介绍array_column()函数的用法。一、什么是array_column()函数array_column()是一个PHP函数,用于从一个多维数组中获取指定的一列数据。该......
  • (05)系统托盘TrayIcon1使用方法
    TrayIcon1.Visible一定要设为True01]绑定右键菜单02]汽泡显示信息03]托盘闪烁04]更改ico图标01]绑定右键菜单拖一个PopupMenu1,设置好菜单,绑定即可显示02]汽泡显示信息procedureTForm1.Button1Click(Sender:TObject);beginTrayIcon1.BalloonFlags:=bfWarning;//bfNone,bfI......
  • 【JDK源码】ArrayList的代码实现
    JDK版本:1.8.0_271基础介绍ArrayList底层数据结构就是一个数组:index表示数组下标,从0开始计数,elementDatda表示数组本身DEFAULT_CAPACITY表示数组的初始化大小,默认是10size表示数组的大小,int类型,没有使用volatile修饰,非线程安全modCount统计当前数组被修改的版本次数,数......
  • JavaScript元素根据父级元素宽高缩放
    /***等比缩放*@paramwrap外部容器*@paramcontainer待缩放的容器*@returns{{width:number,height:number}}*返回值:width:宽度,height:高度*/aspectRatio(wrap:any,container:any){//w=h/ratio,h=w*rat......
  • CF121E Lucky Array
    题意给定一个序列,维护下列操作。区间加区间查询数中只包含\(4,7\)数的个数。所有数前后不超过\(1e4\)。Sol块块版。\(1e4\),发现满足条件的数的个数只有\(30\)个。对于每个块开一个桶,记录每种数有多少个。查询时暴力枚举\(30\)个数,暴力判断即可。修改是平凡的......
  • 【并发编程】CopyOnWriteArrayList详解与原理
    ......
  • Applied Statistics - 应用统计学习 - numpy array交换两行 ? How to Swap Two Rows in
    https://www.statology.org/qualitative-vs-quantitative-variables/https://www.statology.org/numpy-swap-rows/HowtoSwapTwoRowsinaNumPyArray(WithExample)YoucanusethefollowingbasicsyntaxtoswaptworowsinaNumPyarray:some_array[[0,3],:......
  • oray招聘
    岗位职责1、OpenWrt系统应用开发与维护(procd/netifd等);2、OpenWrt应用程序开发(需熟悉uloop/libev/libuv/libevent等开发流程);3、与云端软件功能的联调和白盒测试;4、Linux容器管理系统开发;任职要求:1、精通C/lua/Shell编程,3年以上程序开发经验;2、熟悉LinuxC开发环境,......
  • 方法&Arrays_API总结
    总结方法方法的组成:修饰符+返回值类型+方法名+形参列表+方法体方法签名:方法名+形参列表调用方法:方法有static修饰,调用是:类名.方法名();调用方法使用参数是实际参数(必须是具体的数据)在java里面用static修饰的方法叫做:类方法或者静态方法形参和实参声明......
  • vuejs+echarts实现x轴为时间轴且数据区域可缩放
    1、效果图2、具体功能描述①选择的时间为时间轴的开始和结束时间;②鼠标可以左右拖动x轴时间轴;③鼠标放入图表中可以缩放数据,x轴会相应的更改当前坐标轴间隔值,最小间隔值为1分钟,最大间隔值为1年,且在缩放时可以获取到数据窗口范围的起始数值;④点击y轴名称会对相应数据显示隐......