我正在尝试使用多处理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'
发布于 2019-02-22 01:33:24
我不认为Google Cloud ml-engine与速度减慢有任何关系。在您的机器上运行的代码将以相同的方式在Google Cloud VM中运行。
多处理并不一定意味着更快的处理。在分派开销超过多处理增益的情况下,它将变得比单处理更慢。
在stackoverflow中,有很多关于多进程比单进程慢的讨论。例如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,这可能是您看到的延迟。上面的代码将告诉您确切的延迟。
https://stackoverflow.com/questions/54330019
复制相似问题