Image Added
Opis
Tensorflow je python knjižnica namijenjena razvoju aplikacija temeljenih na dubokom učenju koja se oslanja na ubrzanje grafičkim procesorima. Jedna od glavnih značajki ove knjižnice je postojanje API-a za brži razvoj modela strojnog učenja Keras, koja u sebi sadrži module i funkcije za svaki dio pipelinea u tipičnoj ML aplikaciji (preprocessing podataka, definicija modela, načina optimizacije i validacije)
Opis
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce varius nunc at convallis porta. Suspendisse diam massa, varius a tempor non, fringilla vitae diam. Proin ac mollis est. Vivamus malesuada in sapien at posuere. Morbi eget ante tempus, aliquam diam et, iaculis arcu. Sed egestas laoreet ornare. Proin eget justo rhoncus, lobortis mauris sed, congue tellus. Fusce id sem sem. Duis auctor est sit amet leo dignissim interdum.
Verzije
verzija | modul | paralelna okolina |
---|
Službena dokumentacija
| red |
---|
2.10.1 | scientific/tensorflow/2.10.1-ngc | gpu |
Dokumentacija
- Službena stranica - https://www.tensorflow.org
- Priručnik - https://letmegooglethatwww.tensorflow.com/?q=Kako+koristiti+aplikaciju+%C5%BEnj%3Forg/versions
- Keras API za razvoj aplikacija - https://stackoverflowkeras.comio/api
- Repozitorij modela i baza podataka - https://github.com/
Primjeri
...
Primjeri
Ispod se nalaze primjeri aplikacija umjetnog benchmarka koji testira performanse na modelu Resnet50:
- benchmark.py - python skripta umjetnog bencmarka
- singlegpu.sh - skripta sustava PBS koja koristi jedan grafički procesor
- multigpu-singlenode.sh - skripta sustava PBS koja koristi više grafičkih procesora na jednom čvoru
Code Block |
---|
language | bashpy |
---|
title | PBS skripta | linenumbers | truebenchmark.py |
---|
linenumbers | true |
---|
collapse | true |
---|
|
#!/usr/bin/env python3
# source:
# - https://github.com/leondgarse/Keras_insightface/discussions/17
import sys
import time
import argparse
import numpy as np
import tensorflow as tf
# input arguments
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-s",
"--strategy",
type=int, help="{1: OneDeviceStrategy, 2: MirroredStrategy}",
default=1)
parser.add_argument("-i",
"--images",
type=int,
help="batch size",
default=1024)
parser.add_argument("-b",
"--batch_size",
type=int,
help="batch size",
default=8)
parser.add_argument("-e",
"--epochs",
type=int,
help="epochs",
default=10)
parser.add_argument("-m",
"--model_name",
type=str,
help="model name",
default="ResNet50")
parser.add_argument("-f",
"--use_fp16",
action="store_true",
help="Use fp16")
args = parser.parse_known_args(sys.argv[1:])[0]
# do not allocate all GPU memory
gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
# use fp16 for faster inference
if args.use_fp16:
tf.keras.mixed_precision.set_global_policy('mixed_float16')
# strategy
gpus = tf.config.experimental.list_physical_devices('GPU')
devices = [ gpu.name[-5:] for gpu in gpus ]
if args.strategy == 2:
strategy = tf.distribute.MirroredStrategy(devices=devices)
else:
strategy = tf.distribute.OneDeviceStrategy(device=devices[0])
# dummy dataset
batch_size = args.batch_size * strategy.num_replicas_in_sync
data = np.random.uniform(size=[args.images, 224, 224, 3])
target = np.random.uniform(size=[args.images, 1], low=0, high=999).astype("int64")
dataset = tf.data.Dataset.from_tensor_slices((data, target)).batch(batch_size)
# define model
with strategy.scope():
model = getattr(tf.keras.applications, args.model_name)(weights=None)
opt = tf.optimizers.SGD(0.01)
model.compile(optimizer=opt,
loss=tf.keras.losses.SparseCategoricalCrossentropy())
# fit
model.fit(dataset,
epochs=args.epochs,
verbose=2) |
Code Block |
---|
language | bash |
---|
title | Bash skriptasinglegpu.sh |
---|
linenumbers | true |
---|
collapse | true |
---|
|
#!/bin/bash
#PBS -q gpu
#PBS -l select=1:ncpus=8:ngpus=1:mem=10GB
#PBS -o output/
#PBS -e output/
# pozovi modul
module load scientific/tensorflow/2.10.1-ngc
# pomakni se u direktorij gdje se nalazi skripta
cd $PBS_O_WORKDIR
# potjeraj skriptu
run-singlenode.sh singlegpu.py \
--strategy 1 \
--images 10240 \
--batch_size 256 \
--epochs 10 \
--use_fp16 |
Code Block |
---|
language | py |
---|
title | Python skriptamultigpu-singlenode.py |
---|
linenumbers | true |
---|
|
Napomene
...
Novosti i promjene
|
#!/bin/bash
#PBS -q gpu
#PBS -l select=1:ncpus=32:ngpus=4 :mem=10GB
#PBS -o output/
#PBS -e output/
# pozovi modul
module load scientific/tensorflow/2.10.1-ngc
# pomakni se u direktorij gdje se nalazi skripta
cd $PBS_O_WORKDIR
# potjeraj skriptu
run-singlenode.sh benchmark.py \
--strategy 2 \
--images 10240 \
--batch_size 512 \
--epochs 10 \
--use_fp16 |
...
Napomene
Note |
---|
title | Apptainer i run-singlenode.sh |
---|
|
Ova knjižnica je dostavljena u obliku kontejnera, zbog opterećenja koje pip/conda virtualna okruženja stvaraju na Lustre dijeljenim datotečnim sustavima koje se koristi na superračunalu Supek. Za ispravno izvršavanje python aplikacija, potrebno ih je koristiti wrapper run-singlenode.sh u skriptama sustava PBS: Code Block |
---|
...
run-singlenode.sh moja_python_skripta.py
... |
|
Warning |
---|
title | Korištenje više grafičkih procesora |
---|
|
Tensorflow ne raspodjeljuje automatski aplikaciju na više grafičkih procesora. Pri razvoju aplikacije, bitno je koristiti odgovarajuće funkcionalnosti poput primjera iznad: Code Block |
---|
language | py |
---|
title | MirroredStrategy primjer |
---|
linenumbers | true |
---|
| ...
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
model = ... definirati model ...
model.compile() |
|
...