首页 > 解决方案 > 当我想限制它只使用一个 CPU 线程时,为什么 pytorch .backward() 方法会多占用两个 CPU 线程?

问题描述

我正在尝试使用 CPU 和pytorch. 我被要求将单进程服务限制为仅使用一个 CPU 线程。我已经分配了torch.set_num_interop_threads(1)torch.set_num_threads(1)。问题是,当我使用我检查实际 CPU 线程数时,pstree <pid>我得到了三个。后来我发现问题发生在a.backward(). 如果我删除这一行,我有 1 个线程;如果我保留这条线,我会得到 3 个 CPU 线程。为什么会发生这种情况,我应该怎么做才能使 CPU 线程保持为一个?

我写了一个简单的python3脚本来重现这个问题:

import torch
import time
while(1):
    w = torch.Tensor([2])
    w = torch.autograd.Variable(w, requires_grad=True)
    x = torch.rand([1])
    x = torch.autograd.Variable(x, requires_grad=True)
    y = x**w
    y.backward()
    time.sleep(3)

运行它并用于pstree <pid>检查 CPU 线程,我得到了python───2*[{python}],但如果我删除,y.backward()我只得到python. 我相信这个脚本中额外的两个 CPU 线程与我的服务代码存在相同的问题。

标签: python-3.xmultithreadingpytorchcpu

解决方案


推荐阅读