Scikit-Learn下同时并行运行多个KMeans是否会导致系统冻结
结论
可以同时运行两个KMeans程序,只要调整两个任务的OMP_NUM_THREADS总配额不超过30,就不会出现系统冻结、SSH无法连接的问题。
核心逻辑
单任务设置OMP_NUM_THREADS=30时CPU利用率低于3000%,是因为KMeans只有距离计算阶段是完全并行的,中心点更新、收敛判断、数据IO等环节都是串行逻辑,所以不会始终占满分配的线程数。但需要避免两个任务同时进入并行计算阶段时总线程数超出系统预留,因此需要拆分线程配额。
注意:不要继续给两个任务都设置
OMP_NUM_THREADS=30,如果两个任务同时进入并行计算阶段,总线程需求远大于32核,会触发CPU资源耗尽,导致系统无响应。
推荐配置方案
- 两个任务的
OMP_NUM_THREADS数值之和控制在30以内即可,比如给两个任务各设置15线程,启动命令分别为:
和OMP_NUM_THREADS=15 python your_first_kmeans_script.py
这种配置下就算两个任务同时跑满并行阶段,总CPU占用也不会超过30核,剩余2核留给系统处理SSH连接、后台进程等需求,完全不会出现系统冻结的情况。OMP_NUM_THREADS=15 python your_second_kmeans_script.py - 可选冗余配置:如果担心偶发峰值占用,可以给KMeans进程调低调度优先级,确保系统进程优先获得CPU资源:
nice -n 10 OMP_NUM_THREADS=15 python your_kmeans_script.py - 如果你能确认两个任务的并行计算峰值不会重叠,也可以适当调高单任务配额,比如各设20线程,只要峰值总CPU占用不超过30即可。
内容的提问来源于stack exchange,提问作者Pan
相关产品推荐
相关产品推荐

