如何将导入的函数设置为带num_cpus等参数的Ray remote远程函数
正确实现方式
你之前写法报错的核心原因是ray.remote的传参逻辑完全错误:你先执行了导入的sp_workflow函数,把函数返回值传给了ray.remote,还把资源参数放到了第二个入参位置,不符合ray.remote的调用规则,才触发了断言错误。
以下是两种符合Ray设计规范的实现方案:
方案1:提前包装为固定资源配置的远程函数
如果所有调用该函数的任务都使用相同的资源配置,提前包装是最高效的写法,等价于直接在原函数定义处加装饰器:
from other_library import sp_workflow # 手动给导入的函数加上ray.remote装饰,指定CPU核心数 sp_workflow_remote = ray.remote(num_cpus=config["n_cores"])(sp_workflow) # 后续调用逻辑和你原代码完全一致 model_pool = [{"input":1},{"input":2},{"input":3}] result_ids = [sp_workflow_remote.remote(df=df_id, sp=sp) for sp in model_pool]
方案2:调用时动态指定资源配置
如果不同任务需要不同的资源配置,可以在每次调用时用options方法动态传参:
from other_library import sp_workflow # 调用时动态指定本次任务的CPU核心数 result_ids = [ ray.remote(sp_workflow).options(num_cpus=config["n_cores"]).remote(df=df_id, sp=sp) for sp in model_pool ]
如果需要更灵活的资源分配(比如部分任务占1核,部分占2核),直接修改options里的参数即可。
内容的提问来源于stack exchange,提问作者user3062260
相关产品推荐
相关产品推荐

