标签:torch gpu 笔记 try 015GPU 深度 device GPU cuda
我的thinkpad没有GPU(哭哭惹);
我家里那台顶配偏科机也没有GPU!!!(放声大哭);
所以只能在google上玩玩了,唉。
倒也还可以,最起码是免费的。
因为我没有GPU,自然也装不了cuda……
关于上述GPU参数:https://www.cnblogs.com/testzcy/p/13298748.html
但是咱可以用torch里面的api查看thinkpad:
1 print(torch.cuda.is_available()) 2 3 print(torch.device('cpu'),torch.cuda.device('cuda'),torch.cuda.device('cuda:1')) 4 5 # 查询可用gpu的数量: 6 print(torch.cuda.device_count())
在google上:
接下来是两个比较常用的GPu函数:
1 # 如果有gpu,就返回GPU(i),否则就返回CPU() 2 def try_gpu(i=0): 3 if torch.cuda.device_count()>=i+1: 4 return torch.device(f'cuda:{i}') 5 return torch.device('cpu') 6 7 # 返回所有GPU,如果没有GPU,就返回cpu 8 def try_all_gpus(): 9 devices=[torch.device(f'cuda:{i}') for i in range(torch.cuda.device_count())] 10 return devices if devices else [torch.device('cpu')] 11 12 # 测试一下 13 print(try_gpu()) 14 print(try_gpu(10)) 15 print(try_all_gpus())
1 # 查询张量所在的设备 2 x=torch.tensor([1,2,3]) 3 x.device
# 将X存储在GPU上 X=torch.ones(2,3,device=try_gpu()) X
# 可以给try_gpu里写编号,这里我只有一个gpu,就不写了 Y=torch.ones(2,3,device=try_gpu()) Y
# 在做运算的时候,必须保证两个变量都在同一个gpu上 # 这里假设Y在第一块GPU上,为了运算,我要将Y移动到第0块GPU Z=Y.cuda(0) # 参数为目标gpu编号 X+Z # 注意,X和Y本应可以在不同的device上存储,但是在GPU之间,或者GPu与CPU之间挪动数据,非常慢,会造成严重的性能问题。 # 因此,为了保证性能,设计者禁止了在跨设备之间的数据不允许运算。
Z.cuda(0) is Z # 自己往自己的设备copy不会发生任何事情,这也是性能的考虑
重点来了,神经网络与GPU:
# 神经网络与GPU net=nn.Sequential(nn.Linear(3,1)) net=net.to(device=try_gpu()) #将所有的参数在第0号GPU上copy一份,日后都是在第0号GPU运行 net(X)
net[0].weight.data.device
购买GPU
对于GPU,3件事比较重要:
1、现存
2、计算能力(每秒钟能完成的浮点数运算)
3、价格
Q&A
现存不够的时候,可以把batch_size调小;或者把模型规模调小。
GPU使用可以满负荷,但不要过热(大于80),容易烧卡。
一般使用gpu训练,data在net之前to gpu比较好。
标签:torch,gpu,笔记,try,015GPU,深度,device,GPU,cuda 来源: https://www.cnblogs.com/loveandninenine/p/15847958.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。