我正在尝试使用多处理python包(可以在这里找到:https://docs.python.org/3.4/library/multiprocessing.html?highlight=process)并行化我的预处理函数。
它在我的计算机上工作正常(我使用了4个CPU),但是当我在google cloud ml-engine工作上运行我的代码时,它似乎无法正常工作。这项工作所花费的时间远远超过顺序等效,并且cpu利用率在某个时间点下降到接近0%。
这是我的代码尝试:
import multiprocessing as mp
pool = mp.Pool(processes=mp.cpu_count())
params = [ some_params_lists]
pool.starmap(fn_to_run_in_parallel, params)
pool.close()
pool.join()
我也试过没有运气使用multiprocessing.Process()
。
机器配置:
ScaleTier = 'CUSTOM'
masterTYpe = 'large_model'
我不认为Google Cloud ml-engine与减速有任何关系。在您的计算机上运行的代码在Google Cloud VM中的工作方式相同。
多处理不一定意味着更快的处理。在调度开销超过多处理增益的情况下,它将变得比单个处理更慢。
关于多处理的讨论比堆栈溢出中的单个处理要慢。例如Python multiprocessing is taking much longer than single processing
我建议您在处理逻辑之前和之后添加时间,并分别在您的计算机和Google cloud ml-engine中运行,以获得多处理和单处理的确切延迟。例如
import time
start = time.time()
#your code in multiprocessing
end = time.time()
print(end - start)
start = time.time()
#your code in single processing
end = time.time()
print(end - start)
Google Cloud ml-engine需要时间来增加VM,这可能是您看到的延迟。上面的代码将告诉您确切的延迟。