小编Pra*_*ana的帖子

为什么我没有通过Python中的多处理看到加速?

我试图并行for循环(一个尴尬的并行以前问这里)和解决这个实现适合我的参数:

    with Manager() as proxy_manager:
        shared_inputs = proxy_manager.list([datasets, train_size_common, feat_sel_size, train_perc,
                                            total_test_samples, num_classes, num_features, label_set,
                                            method_names, pos_class_index, out_results_dir, exhaustive_search])
        partial_func_holdout = partial(holdout_trial_compare_datasets, *shared_inputs)

        with Pool(processes=num_procs) as pool:
            cv_results = pool.map(partial_func_holdout, range(num_repetitions))
Run Code Online (Sandbox Code Playgroud)

我需要使用代理对象(在进程之间共享)的原因是共享代理列表datasets中的第一个元素,它是一个大对象列表(每个大约200-300MB).此datasets列表通常包含5-25个元素.我通常需要在HPC群集上运行此程序.

这是一个问题,当我用32个进程和50GB内存运行这个程序(num_repetitions = 200,数据集是10个对象的列表,每个250MB)时,我甚至没有看到16倍的加速(32并行)流程).我不明白为什么 - 任何线索?任何明显的错误,或错误的选择?我在哪里可以改进这个实现?任何替代品?

我确信之前已经讨论过这个问题,原因可能多种多样,而且非常具体,因此我要求你提供2美分.谢谢.

更新:我使用cProfile进行了一些分析以获得更好的想法 - 这是一些信息,按累计时间排序.

In [19]: p.sort_stats('cumulative').print_stats(50)
Mon Oct 16 16:43:59 2017    profiling_log.txt

         555404 function calls (543552 primitive calls) in 662.201 seconds

   Ordered by: cumulative time
   List reduced from 4510 to 50 …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multiprocessing scikit-learn

12
推荐指数
1
解决办法
858
查看次数