python-3.x - 当我想限制它只使用一个 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 线程与我的服务代码存在相同的问题。
解决方案
推荐阅读
- node.js - 我正在尝试使用 Serialport 模块读取 Arduino 数据,但模块无法正常工作
- zurb-foundation - 自定义 JS 未加载撇号,但 CSS 加载
- python - Selenium:get_attribute 一个条件
- spring - 构造函数 TaskLaunchRequest(String, List
, null, null) 未定义 - Spring Cloud Task - python - Django:使用 slug 而不是 pk 访问通用 UpdateView
- mysql - MySql如何向所有用户PHP发送消息
- three.js - 三个 JS DefaultLoadingManager onProgress 函数首先返回错误的总项目数
- javascript - 科尔多瓦插件计步器,startPedometerUpdates 永远不会成功
- android - 错误:uid 10087 没有 uri 0 的权限
- angular - ngModel 未在带有添加和删除选项的 ngFor 的动态输入中设置