cmendezc

Ejemplo NPUs

1 +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2 +<html><head>
3 +<title>403 Forbidden</title>
4 +</head><body>
5 +<h1>Forbidden</h1>
6 +<p>You don't have permission to access this resource.</p>
7 +<hr>
8 +<address>Apache/2.4.18 (Ubuntu) Server at yann.lecun.com Port 443</address>
9 +</body></html>
1 +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2 +<html><head>
3 +<title>403 Forbidden</title>
4 +</head><body>
5 +<h1>Forbidden</h1>
6 +<p>You don't have permission to access this resource.</p>
7 +<hr>
8 +<address>Apache/2.4.18 (Ubuntu) Server at yann.lecun.com Port 443</address>
9 +</body></html>
1 +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2 +<html><head>
3 +<title>403 Forbidden</title>
4 +</head><body>
5 +<h1>Forbidden</h1>
6 +<p>You don't have permission to access this resource.</p>
7 +<hr>
8 +<address>Apache/2.4.18 (Ubuntu) Server at yann.lecun.com Port 443</address>
9 +</body></html>
1 +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2 +<html><head>
3 +<title>403 Forbidden</title>
4 +</head><body>
5 +<h1>Forbidden</h1>
6 +<p>You don't have permission to access this resource.</p>
7 +<hr>
8 +<address>Apache/2.4.18 (Ubuntu) Server at yann.lecun.com Port 443</address>
9 +</body></html>
1 +from __future__ import print_function
2 +import argparse
3 +import torch
4 +import torch.npu
5 +import torch.nn as nn
6 +import torch.nn.functional as F
7 +import torch.optim as optim
8 +from torchvision import datasets, transforms
9 +from torch.optim.lr_scheduler import StepLR
10 +
11 +
12 +class Net(nn.Module):
13 + def __init__(self):
14 + super(Net, self).__init__()
15 + self.conv1 = nn.Conv2d(1, 32, 3, 1)
16 + self.conv2 = nn.Conv2d(32, 64, 3, 1)
17 + self.dropout1 = nn.Dropout(0.25)
18 + self.dropout2 = nn.Dropout(0.5)
19 + self.fc1 = nn.Linear(9216, 128)
20 + self.fc2 = nn.Linear(128, 10)
21 +
22 + def forward(self, x):
23 + x = self.conv1(x)
24 + x = F.relu(x)
25 + x = self.conv2(x)
26 + x = F.relu(x)
27 + x = F.max_pool2d(x, 2)
28 + x = self.dropout1(x)
29 + x = torch.flatten(x, 1)
30 + x = self.fc1(x)
31 + x = F.relu(x)
32 + x = self.dropout2(x)
33 + x = self.fc2(x)
34 + output = F.log_softmax(x, dim=1)
35 + return output
36 +
37 +
38 +def train(args, model, device, train_loader, optimizer, epoch):
39 + model.train()
40 + for batch_idx, (data, target) in enumerate(train_loader):
41 + if device.type=="npu":
42 + target = target.to(torch.int32)
43 + data, target = data.to(device), target.to(device)
44 + optimizer.zero_grad()
45 + output = model(data)
46 + loss = F.nll_loss(output, target)
47 + loss.backward()
48 + optimizer.step()
49 + if batch_idx % args.log_interval == 0:
50 + print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
51 + epoch, batch_idx * len(data), len(train_loader.dataset),
52 + 100. * batch_idx / len(train_loader), loss.item()))
53 + if args.dry_run:
54 + break
55 +
56 +
57 +def test(model, device, test_loader):
58 + model.eval()
59 + test_loss = 0
60 + correct = 0
61 + with torch.no_grad():
62 + for data, target in test_loader:
63 + if device.type=="npu":
64 + target = target.to(torch.int32)
65 + data, target = data.to(device), target.to(device)
66 + output = model(data)
67 + test_loss += F.nll_loss(output, target, reduction='sum').item() # sum up batch loss
68 + pred = output.argmax(dim=1, keepdim=True) # get the index of the max log-probability
69 + correct += pred.eq(target.view_as(pred)).sum().item()
70 +
71 + test_loss /= len(test_loader.dataset)
72 +
73 + print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
74 + test_loss, correct, len(test_loader.dataset),
75 + 100. * correct / len(test_loader.dataset)))
76 +
77 +
78 +def main():
79 + # Training settings
80 + parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
81 + parser.add_argument('--batch-size', type=int, default=64, metavar='N',
82 + help='input batch size for training (default: 64)')
83 + parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',
84 + help='input batch size for testing (default: 1000)')
85 + parser.add_argument('--epochs', type=int, default=14, metavar='N',
86 + help='number of epochs to train (default: 14)')
87 + parser.add_argument('--lr', type=float, default=1.0, metavar='LR',
88 + help='learning rate (default: 1.0)')
89 + parser.add_argument('--gamma', type=float, default=0.7, metavar='M',
90 + help='Learning rate step gamma (default: 0.7)')
91 + parser.add_argument('--no-cuda', action='store_true', default=False,
92 + help='disables CUDA training')
93 + parser.add_argument('--dry-run', action='store_true', default=False,
94 + help='quickly check a single pass')
95 + parser.add_argument('--seed', type=int, default=1, metavar='S',
96 + help='random seed (default: 1)')
97 + parser.add_argument('--log-interval', type=int, default=10, metavar='N',
98 + help='how many batches to wait before logging training status')
99 + parser.add_argument('--save-model', action='store_true', default=False,
100 + help='For Saving the current Model')
101 + args = parser.parse_args()
102 + use_cuda = not args.no_cuda and torch.npu.is_available()
103 +
104 + torch.manual_seed(args.seed)
105 +
106 + device = torch.device("npu:0" if use_cuda else "cpu")
107 +
108 + train_kwargs = {'batch_size': args.batch_size}
109 + test_kwargs = {'batch_size': args.test_batch_size}
110 + if use_cuda:
111 + cuda_kwargs = {'num_workers': 1,
112 + 'pin_memory': True,
113 + 'shuffle': True}
114 + train_kwargs.update(cuda_kwargs)
115 + test_kwargs.update(cuda_kwargs)
116 +
117 + transform=transforms.Compose([
118 + transforms.ToTensor(),
119 + transforms.Normalize((0.1307,), (0.3081,)),
120 + ])
121 + dataset1 = datasets.MNIST('../data', train=True, download=True,
122 + transform=transform)
123 + dataset2 = datasets.MNIST('../data', train=False,
124 + transform=transform)
125 + train_loader = torch.utils.data.DataLoader(dataset1,**train_kwargs)
126 + test_loader = torch.utils.data.DataLoader(dataset2, **test_kwargs)
127 +
128 + model = Net().to(device)
129 + optimizer = optim.Adadelta(model.parameters(), lr=args.lr)
130 +
131 + scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)
132 + for epoch in range(1, args.epochs + 1):
133 + train(args, model, device, train_loader, optimizer, epoch)
134 + test(model, device, test_loader)
135 + scheduler.step()
136 +
137 + if args.save_model:
138 + torch.save(model.state_dict(), "mnist_cnn.pt")
139 +
140 +
141 +if __name__ == '__main__':
142 + main()
143 +