Python 3.x 添加cuda设备时出现类型错误

Python 3.x 添加cuda设备时出现类型错误,python-3.x,pytorch,Python 3.x,Pytorch,我正在运行Pytorch 1.0的一个简单演示,在尝试cuda设置时遇到了问题 我的pytorch代码如下所示 import torch from torch import cuda if cuda.is_available(): devic=cuda.device(0) layer=torch.rand([5,3,2],requires_grad=True) 一切正常…但当我尝试添加cuda设备时 layer=torch.rand([5,3,2],requires_grad=

我正在运行Pytorch 1.0的一个简单演示,在尝试cuda设置时遇到了问题

我的pytorch代码如下所示

import torch
from torch import cuda
if cuda.is_available():
    devic=cuda.device(0)
    layer=torch.rand([5,3,2],requires_grad=True)
一切正常…但当我尝试添加cuda设备时

layer=torch.rand([5,3,2],requires_grad=True,device=devic)
出现了一个打字错误

Traceback (most recent call last):
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\ptvsd_launcher.py", line 43, in <module>
    main(ptvsdArgs)
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\__main__.py", line 410, in main
    run()
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\__main__.py", line 291, in run_file
    runpy.run_path(target, run_name='__main__')
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\Users\H\Desktop\pth_test\tutorial1.py", line 25, in <module>
    layer1=torch.rand([5,3,2],requires_grad=True,device=devic)
TypeError: rand() received an invalid combination of arguments - got (list, requires_grad=bool, device=device), but expected one of:
 * (tuple of ints size, torch.Generator generator, Tensor out, torch.dtype dtype, torch.layout layout, torch.device device, bool requires_grad)
 * (tuple of ints size, Tensor out, torch.dtype dtype, torch.layout layout, torch.device device, bool requires_grad)
Traceback (most recent call last):
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\ptvsd_launcher.py", line 43, in <module>
    main(ptvsdArgs)
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\__main__.py", line 410, in main
    run()
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\__main__.py", line 291, in run_file
    runpy.run_path(target, run_name='__main__')
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\Users\H\Desktop\pth_test\tutorial1.py", line 25, in <module>
    layer1=torch.empty([5,3,2],requires_grad=True,device=devic)
TypeError: empty(): argument 'device' must be torch.device, not device
回溯(最近一次呼叫最后一次):
文件“c:\Users\H\.vscode\extensions\ms python.python-2019.4.11987\pythonFiles\ptvsd_launcher.py”,第43行,在
干管(ptvsdArgs)
文件“c:\Users\H\.vscode\extensions\ms python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\\uuuuuuu main\uuuuuu.py”,第410行,在main中
运行()
文件“c:\Users\H\.vscode\extensions\ms python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\\ uuuuuu main\uuuuuu.py”,第291行,在run\u文件中
runpy.run\u路径(目标,run\u名称=“”\uu主\uuuuuuuuuuuu')
文件“D:\ProgramData\Anaconda3\lib\runpy.py”,第263行,在运行路径中
pkg_name=pkg_name,script_name=fname)
文件“D:\ProgramData\Anaconda3\lib\runpy.py”,第96行,在运行模块代码中
模块名称、模块规格、组件名称、脚本名称)
文件“D:\ProgramData\Anaconda3\lib\runpy.py”,第85行,在运行代码中
exec(代码、运行\全局)
文件“c:\Users\H\Desktop\pth\u test\tutorial1.py”,第25行,在
layer1=火炬.兰德([5,3,2],需要_grad=True,device=devic)
TypeError:rand()接收到无效的参数组合-get(list,requires_grad=bool,device=device),但应为以下参数之一:
*(ints尺寸元组、torch.发电机、张量输出、torch.D类型、torch.layout布局、torch.device设备、bool REQUIRED_grad)
*(整数大小元组、张量输出元组、torch.D类型、torch.layout布局元组、torch.device设备元组、bool REQUIRED\U grad)
将rand()更改为randn()不会影响任何内容,而empty()和zeros()会引发另一个TypeError

Traceback (most recent call last):
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\ptvsd_launcher.py", line 43, in <module>
    main(ptvsdArgs)
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\__main__.py", line 410, in main
    run()
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\__main__.py", line 291, in run_file
    runpy.run_path(target, run_name='__main__')
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\Users\H\Desktop\pth_test\tutorial1.py", line 25, in <module>
    layer1=torch.rand([5,3,2],requires_grad=True,device=devic)
TypeError: rand() received an invalid combination of arguments - got (list, requires_grad=bool, device=device), but expected one of:
 * (tuple of ints size, torch.Generator generator, Tensor out, torch.dtype dtype, torch.layout layout, torch.device device, bool requires_grad)
 * (tuple of ints size, Tensor out, torch.dtype dtype, torch.layout layout, torch.device device, bool requires_grad)
Traceback (most recent call last):
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\ptvsd_launcher.py", line 43, in <module>
    main(ptvsdArgs)
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\__main__.py", line 410, in main
    run()
  File "c:\Users\H\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\__main__.py", line 291, in run_file
    runpy.run_path(target, run_name='__main__')
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "D:\ProgramData\Anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\Users\H\Desktop\pth_test\tutorial1.py", line 25, in <module>
    layer1=torch.empty([5,3,2],requires_grad=True,device=devic)
TypeError: empty(): argument 'device' must be torch.device, not device
回溯(最近一次呼叫最后一次):
文件“c:\Users\H\.vscode\extensions\ms python.python-2019.4.11987\pythonFiles\ptvsd_launcher.py”,第43行,在
干管(ptvsdArgs)
文件“c:\Users\H\.vscode\extensions\ms python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\\uuuuuuu main\uuuuuu.py”,第410行,在main中
运行()
文件“c:\Users\H\.vscode\extensions\ms python.python-2019.4.11987\pythonFiles\lib\python\ptvsd\\ uuuuuu main\uuuuuu.py”,第291行,在run\u文件中
runpy.run\u路径(目标,run\u名称=“”\uu主\uuuuuuuuuuuu')
文件“D:\ProgramData\Anaconda3\lib\runpy.py”,第263行,在运行路径中
pkg_name=pkg_name,script_name=fname)
文件“D:\ProgramData\Anaconda3\lib\runpy.py”,第96行,在运行模块代码中
模块名称、模块规格、组件名称、脚本名称)
文件“D:\ProgramData\Anaconda3\lib\runpy.py”,第85行,在运行代码中
exec(代码、运行\全局)
文件“c:\Users\H\Desktop\pth\u test\tutorial1.py”,第25行,在
layer1=火炬。空([5,3,2],需要_grad=True,device=devic)
TypeError:empty():参数“device”必须是torch.device,而不是device

事情失去了控制:(任何帮助都将受到感激,只需将devic=cuda.device(0)交换到devic=torch.device('cuda:0'))

令人困惑的原因是,
torch.device
用于将张量分配给物理设备,而
torch.cuda.device
是一个上下文管理器,用于告诉torch在哪个gpu上计算内容

所以如果你这样做了

torch.zeros(1, device=torch.device('cuda:0'))
一切都会好的,但是,如果你这样做了

torch.zeros(1, device=torch.cuda.device(0))
您将得到与以前相同的错误

TypeError: zeros(): argument 'device' must be torch.device, not device
例如,您还可以将
层用于(设备)