pytorch中to(device)和cuda()有哪些区别
这篇文章主要为大家展示了“pytorch中to(device)和cuda()有哪些区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“pytorch中to(device)和cuda()有哪些区别”这篇文章吧。
原理.to(device) 可以指定CPU 或者GPUdevice=torch.device("cuda:0"iftorch.cuda.is_available()else"cpu")#单GPU或者CPUmodel.to(device)#如果是多GPUiftorch.cuda.device_count()>1:model=nn.DataParallel(model,device_ids=[0,1,2])model.to(device).cuda() 只能指定GPU
#指定某个GPUos.environ['CUDA_VISIBLE_DEVICE']='1'model.cuda()#如果是多GPUos.environment['CUDA_VISIBLE_DEVICES']='0,1,2,3'device_ids=[0,1,2,3]net=torch.nn.Dataparallel(net,device_ids=device_ids)net=torch.nn.Dataparallel(net)#默认使用所有的device_idsnet=net.cuda()
classDataParallel(Module):def__init__(self,module,device_ids=None,output_device=None,dim=0):super(DataParallel,self).__init__()ifnottorch.cuda.is_available():self.module=moduleself.device_ids=[]returnifdevice_idsisNone:device_ids=list(range(torch.cuda.device_count()))ifoutput_deviceisNone:output_device=device_ids[0]
补充:Pytorch使用To方法编写代码在不同设备(CUDA/CPU)上兼容(device-agnostic)
以前版本的PyTorch编写device-agnostic代码非常困难(即,在不修改代码的情况下在CUDA可以使用或者只能使用CPU的设备上运行)。
device-agnostic的概念即设备无关,可以理解为无论什么设备都可以运行您编写的代码。(PS:个人理解,我没有在网上找到专业解释)
PyTorch 0.4.0使代码兼容PyTorch 0.4.0通过两种方法使代码兼容变得非常容易:
张量的device属性为所有张量提供了torch.device设备。(注意:get_device仅适用于CUDA张量)
to方法Tensors和Modules可用于容易地将对象移动到不同的设备(代替以前的cpu()或cuda()方法)
我们推荐以下模式:
#开始脚本,创建一个张量device=torch.device("cuda:0"iftorch.cuda.is_available()else"cpu")...#但是无论你获得一个新的Tensor或者Module#如果他们已经在目标设备上则不会执行复制操作input=data.to(device)model=MyModule(...).to(device)
以上是“pytorch中to(device)和cuda()有哪些区别”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。