当前位置: 首页 > news >正文

在 Ray Data 和 Ray Serve 中推出原生 LLM API

https://www.anyscale.com/blog/llm-apis-ray-data-serve 译文


一、引言

2025年4月2日,我们激动地宣布在 Ray Data 和 Ray Serve 中为 LLM 推理提供原生 API。

随着 LLM 在现代 AI 基础设施部署中变得越来越核心,平台需要能够高效地部署和扩展这些模型。虽然 Ray Data 和 Ray Serve 很适合快速部署和扩展这些模型,但开发人员必须编写大量冗余代码才能利用这些库来扩展 LLM 应用程序。

  • 在 Ray 2.44 中,我们正式发布 Ray Data LLM 和 Ray Serve LLM。

  • Ray Data LLM 提供用于现有 Ray Data pipeline 中对 LLM 进行离线批量推理的 API。

  • Ray Serve LLM 提供用于 Ray Serve 应用程序中为在线推理部署 LLM 的 API。

这两个模块均支持与 vLLM 和 OpenAI 兼容的endpoint的无缝集成。

二、Ray Data LLM

ray.data.llm 模块与关键的大型语言模型(LLM)推理引擎和已部署模型集成,以实现 LLM 批量推理。

Ray Data LLM 旨在解决开发人员在批量推理过程中遇到的几个常见痛点:

  • 我们发现许多用户正在为高吞吐量的批量推理构建临时解决方案。这些解决方案一般需要启动多个在线推理服务器,并构建额外的代理/负载均衡工具来最大化吞吐量。为了解决这个问题,我们希望利用 Ray Data 并利用其预先构建的分布式数据加载和处理功能。

  • 我们发现用户常将批量数据发送至现有推理服务器。为了解决这个问题,我们希望确保用户可以将其数据pipeline与 OpenAI 兼容的 API endpoint集成,并为用户提供灵活的模板化查询功能,以便向服务器发送查询。

  • 我们观察到用户正在将大型语言模型(LLMs)集成到现有的 Ray Data pipeline中(链接 LLM 后处理阶段)。为了解决这个问题,我们希望确保该 API 与现有的惰性加载和函数式的 Ray Data API 兼容。

图片

在使用 Ray Data LLM时,用户可以创建一个 Processor 对象,该对象可以对 Ray Data Dataset 进行调用,并返回一个 Ray Data Dataset。其中该 Processor 对象将包含如下配置:

  • 提示词和模板

  • OpenAI 兼容的采样参数,这些参数可以按行进行指定

  • vLLM 引擎配置(如果适用)

import ray
from ray.data.llm import vLLMEngineProcessorConfig, build_llm_processor
import numpy as np
config = vLLMEngineProcessorConfig(model="meta-llama/Llama-3.1-8B-Instruct",engine_kwargs={"enable_chunked_prefill": True,"max_num_batched_tokens": 4096,"max_model_len": 16384,},concurrency=1,batch_size=64,
)
processor = build_llm_processor(config,preprocess=lambda row: dict(messages=[{"role": "system", "content": "You are a bot that responds with haikus."},{"role": "user", "content": row["item"]}],sampling_params=dict(temperature=0.3,max_tokens=250,)),postprocess=lambda row: dict(answer=row["generated_text"],**row  # This will return all the original columns in the dataset.),
)
ds = ray.data.from_items(["Start of the haiku is: Complete this for me..."])
ds = processor(ds)
ds.show(limit=1)

在上面这个特定示例中,Processor 对象将:

  • 执行必要的预处理和后处理,以正确处理 LLM 的输出。

  • 根据指定的并发度和提供的引擎配置,实例化并配置多个 vLLM 副本。这些副本本身也可以进一步分布式部署。

  • 通过利用 Ray 中的异步 actor 持续为每个副本提供数据,以利用连续批处理并最大化吞吐量。

  • 调用各种 Ray Data 方法(map、map_batches),这些方法可以在执行过程中由 Ray Data 将他们与pipeline中的其他预处理阶段进行融合和优化。

正如您所见,Ray Data LLM 可以轻松简化在您现有数据pipeline中使用 LLM 的过程。更多详情请参阅文档。

三、Ray Serve LLM

Ray Serve LLM API 允许用户使用熟悉的 Ray Serve API 同时部署多个 LLM 模型,同时兼容 OpenAI API

Ray Serve LLM 的设计具有以下特点:

  • 自动扩展和负载均衡

  • 统一的多节点多模型部署

  • OpenAI 兼容性

  • 支持多 LoRA 模型并共享基础模型

  • 与推理引擎(从 vLLM 开始)的深度集成

  • 可组合的多模型 LLM 管道

尽管 vLLM 在过去一年中发展迅速,但我们观察到越来越多的用户开始利用Ray Serve部署vLLM以支持多个模型,并构建更复杂的pipeline。

对于生产部署,Ray Serve + vLLM 可以绝佳的互补。

图片

vLLM 提供了一个简单的抽象层,能够以高吞吐量和低延迟的方式支持数百个不同的模型。然而,vLLM 仅负责单个模型实例,而在生产部署中,通常需要一个编排层,以便能够自动扩展、处理不同的微调适配器、处理分布式模型并行,以及构建可能非常复杂的多模型复合 AI pipeline。

Ray Serve 的构建旨在弥补 vLLM 在扩展和生产化方面的不足。Ray Serve 提供:

  • 用于自动扩展的 Pythonic 风格API

  • 内置对模型复用的支持

  • 提供一种 Python 风格的、命令式的方式来编写复杂的多模型/部署管道

  • 通过利用 Ray,为分布式模型并行提供了一流的支持。

以下是一个简单示例,演示如何使用 Ray Serve 在本地计算机上部署一个 Qwen 模型,该计算机配备两块GPU并连接至与OpenAI兼容的路由器,然后使用 OpenAI 客户端对其进行查询。

from ray import serve
from ray.serve.llm import LLMConfig, LLMServer, LLMRouterllm_config = LLMConfig(model_loading_config=dict(model_id="qwen-0.5b",model_source="Qwen/Qwen2.5-0.5B-Instruct",),deployment_config=dict(autoscaling_config=dict(min_replicas=1, max_replicas=2,)),# Pass the desired accelerator type (e.g. A10G, L4, etc.)accelerator_type="A10G",# You can customize the engine arguments (e.g. vLLM engine kwargs)engine_kwargs=dict(tensor_parallel_size=2,),
)# Deploy the application
deployment = LLMServer.as_deployment(llm_config.get_serve_options(name_prefix="vLLM:")).bind(llm_config)
llm_app = LLMRouter.as_deployment().bind([deployment])
serve.run(llm_app)

然后使用 OpenAI Python API 对其进行查询:

from openai import OpenAI# Initialize client
client = OpenAI(base_url="http://localhost:8000/v1", api_key="fake-key")# Basic chat completion with streaming
response = client.chat.completions.create(model="qwen-0.5b",messages=[{"role": "user", "content": "Hello!"}],stream=True
)for chunk in response:if chunk.choices[0].delta.content is not None:print(chunk.choices[0].delta.content, end="", flush=True)

更多详情请访问文档

Ray Serve LLM 也可以通过使用 KubeRay 在 Kubernetes 上进行部署。更多详情请参阅Ray Serve production guide。

四、未来发展

欢迎试用这些新功能并向我们反馈!如果您有兴趣与开发人员交流,欢迎加入the Ray Slack讨论,并在此处关注 Ray Serve LLM 和 Ray Data LLM 的路线图以获取未来更新。

Ray 中文社区

Ray 是 UC Berkeley RISELab 针对机器学习领域开源的一种新的分布式计算引擎,用于构建在任何规模下运行的分布式应用。在国内,Ray 中文社区是由蚂蚁集团和 Anyscale 共同运营的针对中国技术爱好者的宣传沟通渠道。

  • GitHub:https://github.com/ray-project/ray

  • Ray 中文问答:https://ray.osanswer.net 

  • Anyscale官网:https://www.anyscale.com

http://www.xdnf.cn/news/1446823.html

相关文章:

  • 生产环境中redis的SCAN命令如何替代KEYS命令?
  • 学习嵌入式的第三十二天——网络编程——TCP
  • Python/JS/Go/Java同步学习(第二篇)四语言数据基本类型对照表: 老板让我统一系统数据类型?(附源码/截图/参数表/老板沉默术)
  • 关于嵌入式学习——嵌入式硬件2
  • surveygo源码分析
  • “十五五”国家科技创新规划-建议
  • Pytorch笔记一之 cpu模型保存、加载与推理
  • 四维轻云:多期地理数据管理的得力助手
  • 【保姆级选型指南】2025年国产开源AI算力平台怎么选?覆盖企业级_制造业_国际化场景
  • 哈希表-271.存在重复元素-力扣(LeetCode)
  • Strapi 富文本内容转 HTML 页面显示:基于 marked.js 的完整实现方案
  • 在Spring Boot中使用H2数据库
  • 停止所有dcoker容器
  • Linux操作系统从入门到实战(二十四)进程控制
  • PixPin截图工具完全体下载|解决Snipaste无法长截图问题+比QQ截图更专业+无广告绿色版支持Win7-Win11全系统兼容
  • AssetStudio解包Unity游戏资源
  • 如何从PDF中高效提取表格数据
  • 什么是端到端保护?天硕工业级 SSD 固态硬盘怎么做?
  • ansible中配置并行以及包含和导入
  • burpsuite攻防实验室-JWT漏洞
  • 【机器学习学习笔记】线性回归实现与应用
  • Shell-AWK详解
  • 单片机day2
  • Chapter1—设计模式基础
  • 线性代数基础 | 基底 / 矩阵 / 行列式 / 秩 / 线性方程组
  • 在线性代数里聊聊word embedding
  • Java:跨越时代的编程语言,持续赋能数字化转型
  • java面试:可以讲解一下mysql的索引吗
  • 「数据获取」《吉林企业统计年鉴(2004)》(获取方式看绑定的资源)
  • 基于区块链的商品信息追溯平台(源码+论文+部署+安装)