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

Ray中如何移除对象引用并返回对象,无需复制以减少内存占用

解决方案

你完全不需要通过深拷贝来实现需求,直接返回ray.get获取的对象即可,同时可以主动清理Ray分布式存储中的对应对象来释放集群内存,这样就不会出现双倍内存占用的问题。

修正后的代码

def some_func():
    # 从Ray分布式存储拉取对象到本地内存
    results = ray.get(hash_for_given_job)
    # 主动通知Ray释放分布式存储中的目标对象(加速集群内存回收,可选)
    ray.internal.free([hash_for_given_job])
    # 直接返回本地对象,内存中仅保留一份实例
    return results

关键说明

  • 无需深拷贝:ray.get已经将分布式对象拉取到本地内存,返回这个对象本身就可以让调用者获取到数据,深拷贝完全是多余的操作,会额外占用一倍内存。
  • 清理分布式存储对象:如果担心Ray集群的分布式存储还占用该对象的内存,可以调用ray.internal.free主动删除对应ObjectRef的分布式实例,避免集群层面的内存浪费。
  • 本地引用的自动回收:函数执行完毕后,本地变量results会超出作用域,Python的垃圾回收机制会自动处理该引用,不需要额外执行del results;而返回的对象会被调用者持有,不会被回收。

注意事项

  • hash_for_given_job需要是有效的Ray ObjectRef,ray.internal.free接受ObjectRef的列表作为参数。
  • 若使用较新版本的Ray,也可以尝试ray.delete(hash_for_given_job)来替代ray.internal.free,具体以对应版本的Ray官方说明为准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:24:21