minimal.py 1.11 KB
Newer Older
1
2
3
4
5
6
7
import torch
from apex.fp16_utils import FP16_Optimizer

torch.backends.cudnn.benchmark = True

N, D_in, D_out = 64, 1024, 16

ptrblck's avatar
ptrblck committed
8
9
x = torch.randn(N, D_in, device='cuda', dtype=torch.half)
y = torch.randn(N, D_out, device='cuda', dtype=torch.half)
10
11
12

model = torch.nn.Linear(D_in, D_out).cuda().half()

Michael Carilli's avatar
Michael Carilli committed
13
14
15
16
17
18
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3, momentum=0.9)

### Construct FP16_Optimizer
### FP16_Optimizer will ingest and remember the original optimizer's param_groups.
###
### Construct with static loss scaling...
19
optimizer = FP16_Optimizer(optimizer, static_loss_scale=128.0)
Michael Carilli's avatar
Michael Carilli committed
20
### ...or dynamic loss scaling
21
22
# optimizer = FP16_Optimizer(optimizer, 
#                            dynamic_loss_scale=True,
Michael Carilli's avatar
Michael Carilli committed
23
24
#                            dynamic_loss_args={'scale_factor' : 2})
### dynamic_loss_args is optional, for "power users," and unnecessary in most cases.
25
26
27

loss_fn = torch.nn.MSELoss()

Michael Carilli's avatar
Michael Carilli committed
28
for t in range(200):
29
30
31
    optimizer.zero_grad()
    y_pred = model(x)
    loss = loss_fn(y_pred.float(), y.float())
Michael Carilli's avatar
Michael Carilli committed
32
    ### Change loss.backward() to:
33
34
35
36
37
    optimizer.backward(loss)
    ###
    optimizer.step()

print("final loss = ", loss)