Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Image Added





Table of Contents

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

verzijamodulparalelna okolina

Službena dokumentacija

red
2.10.1scientific/tensorflow/2.10.1-ngcgpu

Dokumentacija

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
true
languagebashpy
titlePBS skriptalinenumbersbenchmark.py
linenumberstrue
collapsetrue
#!/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
languagebash
titleBash skriptasinglegpu.sh
linenumberstrue
collapsetrue
#!/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
languagepy
titlePython skriptamultigpu-singlenode.py
linenumberstrue

Napomene

...

Novosti i promjene

collapsetrue
#!/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
titleApptainer 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
titleKoriš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
languagepy
titleMirroredStrategy primjer
linenumberstrue
...
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
	model = ... definirati model ...
	model.compile()

...