gpt4 book ai didi

python - joblib.Parallel 如何处理全局变量?

转载 作者:行者123 更新时间:2023-12-03 14:31:35 60 4
gpt4 key购买 nike

我的代码看起来像这样:

from joblib import Parallel, delayed

# prediction model - 10s of megabytes on disk
LARGE_MODEL = load_model('path/to/model')

file_paths = glob('path/to/files/*')

def do_thing(file_path):
pred = LARGE_MODEL.predict(load_image(file_path))
return pred

Parallel(n_jobs=2)(delayed(do_thing)(fp) for fp in file_paths)
我的问题是是否 LARGE_MODEL将在循环的每次迭代中进行腌制/取消腌制。如果是这样,我如何确保每个工作人员都缓存它(如果可能的话)?

最佳答案

TLDR

The parent process pickles large model once. That can be made more performant by ensuring large model is a numpy array backed to a memfile. Workers can load_temporary_memmap much faster than from disk.


您的工作是并行化的,可能会使用 joblibs._parallel_backends.LokyBackend .
joblib.parallel.Parallel.__call__ ,joblib 尝试初始化后端以使用 LokyBackendn_jobs设置为 count greater than 1 . LokyBackend为相同的 Parallel 使用共享的临时文件夹目的。这与修改默认酸洗行为的 reducer 有关。
现在, LokyBackend配置一个 MemmappingExecutor那个 shares this folderreducers .
如果您有 numpy installed你的模型是干净的 numpy array ,保证您拥有 腌一次 作为使用 ArrayMemmapForwardReducer 的 memapped 文件并从父进程传递给子进程。
否则就是腌制 using the default pickling作为 bytes目的。
您可以了解您的模型在父进程中如何从 joblib 读取调试日志。
每个 worker “解开”大模型,所以在那里缓存大模型真的没有意义。
您只能通过支持您的模型作为 memory mapped file 来改进从 worker 中加载腌制大模型的来源。 .

关于python - joblib.Parallel 如何处理全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64680438/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com