PyTorch je python knjižnica namijenjena razvoju aplikacija temeljenih na dubokom učenju koja se oslanja na ubrzanje grafičkim procesorima. Glavne prednosti koje PyTorch knjižnica pruža su imperativni pristup programiranju na "python" način, kroz sučelje koje omogućuje lakše otkrivanje grešaka i koje je prilagođeno postojećim python znanstvenim knjižnicama.
verzija | modul | red |
---|---|---|
1.14.0 | scientific/pytorch/1.14.0-ngc | gpu |
Ispod se nalaze primjeri aplikacija umjetnog benchmarka koji testira performanse na modelu Resnet50:
# source # - https://github.com/horovod/horovod/blob/master/examples/pytorch/pytorch_synthetic_benchmark.py import argparse import torch.backends.cudnn as cudnn import torch.nn.functional as F import torch.optim as optim import torch.utils.data.distributed from torchvision import models import sys import time import numpy as np # Benchmark settings parser = argparse.ArgumentParser(description='PyTorch Synthetic Benchmark', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("-i", "--images", type=int, help="image number", default=1024) parser.add_argument('--batch_size', type=int, default=32, help='input batch size') parser.add_argument("-e", "--epochs", type=int, help="epochs", default=10) parser.add_argument('--model', type=str, default='resnet50', help='model to benchmark') args = parser.parse_args() # model model = getattr(models, args.model)() model.cuda() lr_scaler = 1 optimizer = optim.SGD(model.parameters(), lr=0.01 * lr_scaler) cudnn.benchmark = True # data data = torch.randn(args.batch_size, 3, 224, 224) target = torch.LongTensor(args.batch_size).random_() % 1000 data, target = data.cuda(), target.cuda() # fit def benchmark_step(): optimizer.zero_grad() output = model(data) loss = F.cross_entropy(output, target) loss.backward() optimizer.step() for epoch in range(args.epochs): begin = time.time() for batches in range(args.images//args.batch_size): benchmark_step() end = time.time() imgsec = args.images//(end-begin) print('--- Epoch %i: %0.2f img/sec ---' % (epoch, imgsec)) |
#!/bin/bash #PBS -q gpu #PBS -l select=1:ncpus=32:ngpus=1 #PBS -o output/ #PBS -e output/ # pozovi modul module load scientific/pytorch/1.14.0-ngc # pomakni se u direktorij gdje se nalazi skripta cd ${PBS_O_WORKDIR:-""} # potjeraj skriptu run-singlenode.sh singlegpu.py \ --images 10240 \ --batch_size 256 \ --epochs 5 |
PyTorch ne osigurava automatsko raspodjeljivanje računa na više grafičkih procesora. Pri korištenju više procesora, potrebno je koristiti PyTorch sučelje distributed ili sučelja za distribuirano strojno učenje poput knjižnica Ray ili Dask. U slučaju da vam je ova funkcionalnost prijeko potrebna, kontaktirajte nas na computing@srce.hr. |
Ova knjižnica je dostavljena u obliku kontejnera, zbog opterećenja koje pip/conda virtualna okruženja stvaraju na Lustre dijeljenim datotečnim sustavima. Za ispravno izvršavanje python aplikacija, potrebno ih je koristiti wrapper run-singlenode.sh u skriptama sustava PBS:
|