为什么在Python中使用Ray并行化任务时会出现PicklingError?
我试图在一个巨大的为什么在Python中使用Ray并行化任务时会出现PicklingError?,python,pandas,multiprocessing,ray,Python,Pandas,Multiprocessing,Ray,我试图在一个巨大的pandasdataframe上并行运行一个机器学习预测作业。看起来,ray是一个很好的Python多处理包。代码如下: model_path = './models/lr.pkl' df = pd.read_csv('./data/input.csv') dfs = np.array_split(df, 4) features = ['item_text', 'description', 'amount'] ray.init() @ray.remote def predi
pandas
dataframe上并行运行一个机器学习预测作业。看起来,ray
是一个很好的Python多处理包。代码如下:
model_path = './models/lr.pkl'
df = pd.read_csv('./data/input.csv')
dfs = np.array_split(df, 4)
features = ['item_text', 'description', 'amount']
ray.init()
@ray.remote
def predict(model_path, df, features):
model = joblib.load(model_path)
pred_df = model.predict(df[features])
return pred_df
result_ids = []
for i in range(4):
result_ids.append(predict.remote(model_path, dfs[i], features))
results = ray.get(result_ids)
当我运行它时,我得到了以下错误:
PicklingError: args[0] from __newobj__ args has the wrong class
我认为
args[0]
指的是model\u路径
。这只是一个字符串,为什么错了类?我遗漏了什么?原来远程函数不能接受两个以上的参数。在我将这两个静态参数组合在一起之后,它就工作了
@ray.remote
def predict(df, args):
model_path, features = args
model = joblib.load(model_path)
pred_df = model.predict(df[features])
return pred_df
args = (model_path, features)
result_ids = []
for i in range(4):
result_ids.append(predict.remote(dfs[i], args))
结果证明远程函数不能接受两个以上的参数。在我将这两个静态参数组合在一起之后,它就工作了
@ray.remote
def predict(df, args):
model_path, features = args
model = joblib.load(model_path)
pred_df = model.predict(df[features])
return pred_df
args = (model_path, features)
result_ids = []
for i in range(4):
result_ids.append(predict.remote(dfs[i], args))
也许有帮助。如果导入要加载到def中的类,它可能会起作用。可能会有帮助。如果导入要在def中加载的类,则可能会起作用。请注意,您还可以将
num\u return\u vals
添加到@ray.remote(num\u return\u vals=2)请注意,您还可以将num\u return\u vals
添加到@ray.remote(num\u return\u vals=2)