使用PyTorch结合多进程时scipy differential_evolution运行变慢的问题求助
PyTorch结合多进程时scipy differential_evolution运行变慢的问题求助
各位好,我最近在做优化任务时遇到了个头疼的问题,想请教下大家的经验。
我原本用numpy配合scipy的differential_evolution做优化,为了提速,把计算核心部分换成了PyTorch,同时还想用多进程来并行运算。下面是我当前的核心代码片段:
from torch.multiprocessing import set_start_method, Pool import sys import torch import numpy as np from scipy.optimize import differential_evolution, NonlinearConstraint # 以下是我自定义的几个函数,就不贴完整实现了 def likelihood(x): # 内部用PyTorch替代numpy完成计算逻辑 pass def print_de(x, convergence): pass def positive_definite(x): pass if __name__ == '__main__': # device = get_device() device = torch.device('cpu') # 先在CPU环境下测试 num_workers=int(sys.argv[1]) set_start_method("spawn", force=True) pool=Pool(num_workers) results = differential_evolution(likelihood, seed=np.random.seed(0), workers=pool.map, callback=print_de, bounds=bounds, maxiter=1500, disp=True, recombination=0.1, mutation=(0.9,1), constraints=NonlinearConstraint(positive_definite, lb=0, ub=np.inf), popsize=25, polish=False )
在我自己的M1 MacBook上,我发现换成PyTorch加多进程的组合后,differential_evolution的运行速度反而比之前用numpy单进程时还要慢,完全达不到我预期的加速效果。我已经尝试设置了spawn作为多进程启动方式,也特意指定了CPU设备来排除GPU的影响,但问题依然存在。
想问问大家,有没有遇到过类似的情况?可能是什么原因导致的?有没有什么可行的解决办法能让PyTorch配合多进程在differential_evolution里正常发挥加速作用?
备注:内容来源于stack exchange,提问作者jasmine
相关产品推荐
相关产品推荐

