You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多进程处理CPU受限任务无法满负载运行问题排查

numpy多进程并行性能异常问题

我正在给一段重度依赖numpy的Python数值计算代码做并行化,代码需要在大量参数空间求解问题,理论上可通过多进程分配不同参数区域实现并行加速。

二维参数空间并行化伪代码

import numpy as np
import itertools
from multiprocessing import Pool
import MyNumericalProblemSolver

chunksize = 100
n_values_per_param = 50
n_processes = 8
p1_values = np.logspace(1,2,n_values_per_param)
p2_values = np.logspace(3,5,n_values_per_param)
param_iterator = itertools.product(p1_values,p2_values)
solver = MyNumericalProblemSolver()
def wrapper(params):
    p1,p2 = params
    solver.set_parameters(p1=p1,p2=p2)
    solver.solve()

p = Pool(n_processes)
p.map(wrapper,param_iterator,chunksize=chunksize)

CPU使用率异常表现

我的笔记本搭载Intel(R) Core(TM) i7-7700HQ CPU(8核),预期性能提升约8倍,但实际仅提升1.5倍,CPU使用率表现异常:

  • 无多进程:单进程占100%CPU
  • n_processes=1:单进程占100%CPU
  • n_processes=2:2个进程各占100%CPU
  • n_processes=4:4个进程各占50%CPU
  • n_processes=8:8个进程各占25%CPU

总使用率最高仅200%。但在8个终端分别启动单进程版本时,每个进程均可占100%CPU。

已尝试的解决方案

  • 修改chunksize,无效果
  • 尝试用os.system(f"taskset -p 0xff {os.getpid()}")重置CPU亲和性,os.sched_getaffinity(0)显示亲和性正常为{0,1,2,3,4,5,6,7},但问题依旧

numpy验证测试脚本

为验证是否为numpy本身的问题,编写了如下测试脚本:

from multiprocessing import Pool
import numpy as np

matrix_dim = 100
n_processes = 8

def test_function(x):
    for i in range(5000):
        matrix = np.random.rand(matrix_dim,matrix_dim)
        np.linalg.solve(matrix,np.ones(matrix_dim))

n_iter = 100
chunksize = 10
p = Pool(n_processes)
p.map(test_function,range(n_iter),chunksize=chunksize)

原以为8个进程都会占100%CPU,但偶尔也会出现8个进程各占25%CPU的情况,且不同n_processes设置下性能无差异。

环境与补充信息

  • 环境:conda虚拟环境,Python3.11,Ubuntu22.04
  • cat /proc/cpuinfo显示CPU型号为Intel(R) Core(TM) i7-7700HQ CPU @2.80GHz
  • hwloc-ps -t显示所有8个进程均运行在Core:0上

内容的提问来源于stack exchange,提问作者Gianni Cataldi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:33:26