Python Pytork-使用内部设备';带有语句';
是否有一种方法可以在特定(GPU)设备的上下文中运行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=火炬张
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