You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Python Ray Serve中是否需使用对象存储?如何实现?

在Ray Serve中使用对象存储共享大型对象的方法与必要性

能不能用对象存储?

可以,但你当前的写法存在问题:Ray Serve部署的初始化参数如果是对象ID,不会自动解析为实际对象,需要手动调用ray.get()来获取真实数据。

正确实现方式

修改初始化逻辑,在部署实例启动时解析对象ID,就能正常使用共享的大型对象:

import ray
from ray import serve
from fastapi import FastAPI
import numpy as np

fast_app = FastAPI()

# 将大型对象存入Ray对象存储
large_array = np.zeros((5000, 5000))
array_id = ray.put(large_array)

@serve.deployment()
@serve.ingress(fast_app)
class ModelDeployment:
    def __init__(self, obj_id):
        # 解析对象ID,获取实际数组
        self.large_obj = ray.get(obj_id)

    @fast_app.get("/check-shape")
    def get_shape(self):
        # 正常使用共享的大型对象
        return {"shape": self.large_obj.shape}

# 绑定对象ID到部署实例
app = ModelDeployment.bind(array_id)

如果你的部署需要多个副本(比如通过num_replicas参数设置),所有副本都会通过同一个对象ID读取对象存储中的数据,无需重复传输整个大数组,这正是对象存储的核心价值。

是否有必要使用?

分场景判断:

  • 非常有必要的场景:对象体积大(如你的5000×5000数组)、需要被多个Ray Serve副本或其他Ray Actor共享。直接传递对象会导致每个副本都复制一份,浪费内存和跨节点带宽;用对象存储后,集群内仅保留一份数据,所有实例共享引用,大幅节省资源。
  • 必要性低的场景:对象体积小、仅单个部署副本使用。这种情况下直接传递对象更简单,额外的对象存储操作反而增加复杂度。

内容的提问来源于stack exchange,提问作者user60150

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:33:27