0%

pytorch-cuda

关于pytorch中模型的多GPU

1.cudnn.benchmark = True

1
2
from torch.backends import cudnn
cudnn.benchmark = True

而且大家都说这样可以增加程序的运行效率。那到底有没有这样的效果,或者什么情况下应该这样做呢?
总的来说,大部分情况下,设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题。

一般来讲,应该遵循以下准则:

  • 如果网络的输入数据维度或类型上变化不大,设置 torch.backends.cudnn.benchmark = true 可以增加运行效率;
  • 如果网络的输入数据在每次 iteration 都变化的话,会导致 cnDNN 每次都会去寻找一遍最优配置,这样反而会降低运行效率。

这下就清晰明了很多了。

其实看完这段还是很蒙蔽,不知道具体什么情况下使用,暂且算加速过程好了。

2. nn.DataParallel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from torch import nn
model2 = nn.DataParallel(model1)
model2.cuda()

````


```python
from torch import nn
import torch as t
class Model(nn.Module): # Our model
def __init__(self, input_size, output_size):
super(Model, self).__init__()
self.fc = nn.Linear(input_size, output_size)
def forward(self, input):
output = self.fc(input)
print(" In Model: input size", input.size(), "output size", output.size())
return output
----
model1 = Model(3,4)
print(model1)
for var in model1.parameters():
print(var)

Model(
(fc): Linear(in_features=3, out_features=4, bias=True)
)

Parameter containing:
tensor([[ 0.1964, 0.4389, -0.2216],
[-0.1046, -0.2055, -0.5383],
[ 0.0673, 0.0949, 0.5205],
[ 0.5473, -0.3700, -0.4179]])
Parameter containing:
tensor([ 0.2416, 0.4188, -0.0096, 0.1569])
----
model2 = nn.DataParallel(model1)
print(model2)
for var in model2.parameters():
print(var)

DataParallel(
(module): Model(
(fc): Linear(in_features=3, out_features=4, bias=True)
)
)
Parameter containing:
tensor([[ 0.1964, 0.4389, -0.2216],
[-0.1046, -0.2055, -0.5383],
[ 0.0673, 0.0949, 0.5205],
[ 0.5473, -0.3700, -0.4179]], device='cuda:0')
Parameter containing:
tensor([ 0.2416, 0.4188, -0.0096, 0.1569], device='cuda:0')
----
model2.cuda()
print(model2)
for var in model2.parameters():
print(var)

DataParallel(
(module): Model(
(fc): Linear(in_features=3, out_features=4, bias=True)
)
)
Parameter containing:
tensor([[ 0.1964, 0.4389, -0.2216],
[-0.1046, -0.2055, -0.5383],
[ 0.0673, 0.0949, 0.5205],
[ 0.5473, -0.3700, -0.4179]], device='cuda:0')
Parameter containing:
tensor([ 0.2416, 0.4188, -0.0096, 0.1569], device='cuda:0')