Python 导入PyTorch后导入OpenCV会与CPU亲和力发生冲突
这是我曾经处理过的奇怪软件问题的极端结局。寻求帮助 考虑以下Python脚本:Python 导入PyTorch后导入OpenCV会与CPU亲和力发生冲突,python,opencv,multiprocessing,pytorch,affinity,Python,Opencv,Multiprocessing,Pytorch,Affinity,这是我曾经处理过的奇怪软件问题的极端结局。寻求帮助 考虑以下Python脚本: import psutil import torch def run(): curr_process = psutil.Process() curr_process.cpu_affinity([3]) print('Before', curr_process.cpu_affinity()) import cv2 print('After', curr_process.cpu
import psutil
import torch
def run():
curr_process = psutil.Process()
curr_process.cpu_affinity([3])
print('Before', curr_process.cpu_affinity())
import cv2
print('After', curr_process.cpu_affinity())
import multiprocessing
multiprocessing.Process(target=run).start()
您可能会认为导入OpenCV与CPU亲和力无关,前后的输出是相同的,但不是。在我的机器上,此脚本的输出是:
Before [3]
After [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
当然,这个问题是在一个大型应用程序中出现的,它花费了相当大的努力将其归结为这个最小的示例。我发现复制它需要一个关键条件:PyTorch和OpenCV应该从不同的进程导入。一个在叉子前面,一个在叉子后面。如果同时在子进程或主进程中导入,则不会复制,但如果在此脚本中交换cv2
和torch
,则会复制
首先,导入库与CPU相关性有什么关系?也许这是该库的作者进行的某种优化尝试,但却遭到了恶意攻击
那么,我该如何解决这样的问题呢?当然,我可以在fork之前导入所有内容,作为一个快速的黑客解决方案,但我想弄清事情的真相
我的库版本(均从Conda repo安装):
opencv=4.1.0=py37h3aa1047_6
pytorch=1.4.0=py3.7_cuda10.1.243_cudnn7.6.3_0