使用joblib遇AttributeError,设置CPU亲和性失败且仅用2核
解决joblib仅用2核+psutil旧版本亲和性设置报错问题
先搞定psutil的报错问题
你碰到的AttributeError: 'Process' object has no attribute 'set_cpu_affinity'完全是版本锅——set_cpu_affinity是psutil 5.5.0才新增的方法,而你用的5.4.3还没这个接口。
不想升级的话,旧版本里用cpu_affinity()方法就能实现同样的功能,直接传入要绑定的CPU核列表就行:
import psutil p = psutil.Process() # 绑定到全部8个核(核编号从0开始) p.cpu_affinity([0, 1, 2, 3, 4, 5, 6, 7])
如果能升级psutil,直接跑这条命令就行,升级后就能用set_cpu_affinity了:
pip install --upgrade psutil
再解决joblib只用到2核的问题
默认情况下joblib应该会使用multiprocessing.cpu_count()返回的核数,但实际没用到的话,可以试试这几个方案:
- 显式指定核数:在
Parallel里直接设置n_jobs=8(或者n_jobs=-1表示用全部可用核),同时可以指定backend为multiprocessing避免loky后端的潜在限制:from joblib import Parallel, delayed Parallel(n_jobs=8, backend="multiprocessing")( delayed(your_process_function)(filename) for filename in pdb_name_list ) - 子进程内设置亲和性:如果需要更精细的核分配,比如给每个子进程绑定特定的核,可以在任务函数开头添加亲和性设置逻辑:
def your_process_function(filename): # 给当前子进程绑定指定核 p = psutil.Process() # 这里可以根据任务分配不同的核,比如按进程ID分片 p.cpu_affinity([...]) # 你的任务逻辑代码 ... - 系统层面绑定:如果是Linux系统,也可以用
taskset命令在启动脚本时直接绑定CPU,不用改代码:# 绑定到0-7号核,然后启动脚本 taskset -c 0-7 python your_script.py
内容的提问来源于stack exchange,提问作者ahmadkhalifa
相关产品推荐
相关产品推荐

