Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pytork-使用内部设备';带有语句';_Python_Gpu_Pytorch - Fatal编程技术网

Python Pytork-使用内部设备';带有语句';

Python Pytork-使用内部设备';带有语句';,python,gpu,pytorch,Python,Gpu,Pytorch,是否有一种方法可以在特定(GPU)设备的上下文中运行pytorch(无需为每个新的张量指定设备,例如.to选项) 类似于带有tf.device('/device:GPU:0'):的tensorflow的等价物 似乎默认设备是cpu(除非我做错了): 不幸的是,在当前的实现中,with device语句不能以这种方式工作,它只能用于在cuda设备之间切换。 您仍然需要使用device参数指定使用哪个设备(或.cuda()将张量移动到指定的GPU),术语如下: #在GPU 1上分配张量 a=火炬张

是否有一种方法可以在特定(GPU)设备的上下文中运行
pytorch
(无需为每个新的张量指定设备,例如
.to
选项)

类似于带有tf.device('/device:GPU:0'):的tensorflow的等价物

似乎默认设备是cpu(除非我做错了):


不幸的是,在当前的实现中,
with device
语句不能以这种方式工作,它只能用于在cuda设备之间切换。


您仍然需要使用
device
参数指定使用哪个设备(或
.cuda()
将张量移动到指定的GPU),术语如下:

#在GPU 1上分配张量
a=火炬张量([1,2.],装置=cuda)
因此,要访问cuda:1:

cuda=torch.device('cuda'))
带火炬.cuda.装置(1):
#在GPU 1上分配张量
a=火炬张量([1,2.],装置=cuda)
和访问cuda:2:

cuda=torch.device('cuda'))
带火炬.cuda.装置(2):
#在GPU 2上分配张量
a=火炬张量([1,2.],装置=cuda)
但是,没有
设备
参数的张量仍然是CPU张量:

cuda=torch.device('cuda'))
带火炬.cuda.装置(1):
#在CPU上分配张量
a=火炬张量([1,2.])
总之:

否-不幸的是,它在设备的
当前实现中
声明不可能以您在报告中描述的方式使用
问题


以下是来自以下方面的更多示例:

cuda=torch.device('cuda')#默认cuda设备
cuda0=torch.device('cuda:0')
cuda2=火炬。设备('cuda:2')#GPU 2(这些是0索引的)
x=火炬张量([1,2.],装置=cuda0)
#x.device是设备(type='cuda',index=0)
y=火炬张量([1,2.]).cuda()
#y.device是设备(type='cuda',index=0)
带火炬.cuda.装置(1):
#在GPU 1上分配张量
a=火炬张量([1,2.],装置=cuda)
#将张量从CPU传输到GPU 1
b=火炬张量([1,2.]).cuda()
#a.设备和b.设备是设备(type='cuda',index=1)
#您也可以使用``Tensor.to``传递张量:
b2=火炬张量([1,2.])至(装置=cuda)
#b.设备和b2.设备是设备(type='cuda',index=1)
c=a+b
#c.设备为设备(类型='cuda',索引=1)
z=x+y
#z.device是设备(type='cuda',index=0)
#即使在上下文中,也可以指定设备
#(或为.cuda调用提供GPU索引)
d=火炬。randn(2,装置=cuda2)
e=火炬。randn(2)。至(cuda2)
f=火炬。随机数(2)。cuda(cuda2)
#d.设备、e.设备和f.设备都是设备(type='cuda',index=2)

不幸的是,在当前的实现中,
with device
语句不能以这种方式工作,它只能用于在cuda设备之间切换。


您仍然需要使用
device
参数指定使用哪个设备(或
.cuda()
将张量移动到指定的GPU),术语如下:

#在GPU 1上分配张量
a=火炬张量([1,2.],装置=cuda)
因此,要访问cuda:1

cuda=torch.device('cuda'))
带火炬.cuda.装置(1):
#在GPU 1上分配张量
a=火炬张量([1,2.],装置=cuda)
和访问cuda:2:

cuda=torch.device('cuda'))
带火炬.cuda.装置(2):
#在GPU 2上分配张量
a=火炬张量([1,2.],装置=cuda)
但是,没有
设备
参数的张量仍然是CPU张量:

cuda=torch.device('cuda'))
带火炬.cuda.装置(1):
#在CPU上分配张量
a=火炬张量([1,2.])
总之:

否-不幸的是,它在设备的
当前实现中
声明不可能以您在报告中描述的方式使用
问题


以下是来自以下方面的更多示例:

cuda=torch.device('cuda')#默认cuda设备
cuda0=torch.device('cuda:0')
cuda2=火炬。设备('cuda:2')#GPU 2(这些是0索引的)
x=火炬张量([1,2.],装置=cuda0)
#x.device是设备(type='cuda',index=0)
y=火炬张量([1,2.]).cuda()
#y.device是设备(type='cuda',index=0)
带火炬.cuda.装置(1):
#在GPU 1上分配张量
a=火炬张量([1,2.],装置=cuda)
#将张量从CPU传输到GPU 1
b=火炬张量([1,2.]).cuda()
#a.设备和b.设备是设备(type='cuda',index=1)
#您也可以使用``Tensor.to``传递张量:
b2=火炬张量([1,2.])至(装置=cuda)
#b.设备和b2.设备是设备(type='cuda',index=1)
c=a+b
#c.设备为设备(类型='cuda',索引=1)
z=x+y
#z.device是设备(type='cuda',index=0)
#即使在上下文中,也可以指定设备
#(或为.cuda调用提供GPU索引)
d=火炬。randn(2,装置=cuda2)
e=火炬。randn(2)。至(cuda2)
f=火炬。随机数(2)。cuda(cuda2)
#d.设备、e.设备和f.设备都是设备(type='cuda',index=2)

是的,我现在就是这么做的。问题是,是否有可能将“默认”实例化(比如,如果我没有指定
设备
参数)作为gpu而不是cpu(特定设备,无论0,1或2是否不那么重要)@nivniv,正如我上面所说的-不,不幸的是它不起作用,它只影响cuda设备,而不是cpu。是的,这就是我现在正在做的。问题是,是否可以将“默认”实例化(例如,如果我没有指定
设备
参数)作为gpu而不是cpu(特定设备,无论0,1还是2不太重要)@niv
with torch.cuda.device('0'):
   a = torch.zeros(1)
   print(a.device)

>>> cpu