Aller au contenu principal

Outil de visualisation TensorBoard pour TensorFlow et PyTorch

Les algorithmes d'apprentissage automatique sont généralement coûteux en calcul. Il est donc essentiel de quantifier les performances de votre application de Machine Learning. L'outil graphique TensorBoard a été créé pour ce genre d'étude.

L'outil de visualisation TensorBoard est disponible sur Jean Zay via le JupyterHub de l'IDRIS.

La manière d'y accéder est décrite précisément dans la documentation dédiée : JupyterHub > JupyterLab Usage > Jupyter interface > Applications.

attention

Pour accéder à Tensorboard, il faut se placer dans un environnement dans lequel l'outil a été installé :

  • si vous avez ouvert une instance JupyterLab, il faudra prĂ©alablement charger un module (tensorflow, pytorch, ...) contenant TensorBoard comme indiquĂ© dans JupyterHub > JupyterLab Usage > Jupyter interface > Environment modules.
  • si vous avez ouvert directement une instance TensorBoard sur un noeud de calcul (Spawn server on SLURM node + Frontend = Tensorboard), l'outil est disponible sans autre action de votre part.

Les fonctionnalités TensorBoard​

TensorBoard propose différents onglets de visualisation. Les principaux outils sont :

  • Scalars affiche l'Ă©volution du loss et des mĂ©triques Ă  chaque Ă©poque par dĂ©faut (Il est possible de l'adapter pour suivre la vitesse d'entraĂ®nement, le taux d'apprentissage et d'autres valeurs scalaires.)
  • Graphs aide Ă  visualiser la structure de votre modèle
  • Distributions et Histograms montrent la distribution des poids et des biais Ă  chaque Ă©poque
Image 1Image 2
Image 3Image 4

Vous avez également accès aux onglets et aux fonctionnalités Image Data, Hyperparameter Tuning, Embedding projector pour les applications de Natural Language Processing, What If Tool et Debugger V2.

Former un modèle avec les rappels TensorBoard​

Pour bénéficier des fonctionnalités offertes par TensorBoard, il faut instrumenter votre code.

Instrumenter votre code TensorFlow​

Pour générer des logs TensorBoard au format adéquat en sortie de votre application TensorFlow, il faut :

  • crĂ©er un rappel TensorBoard pour capturer les mĂ©triques (ici profile_batch = 0 pour dĂ©sactiver le profiler)
# Create a TensorBoard callback
logs = "logs/" + datetime.now().strftime("%Y%m%d-%H%M%S")

tboard_callback = tf.keras.callbacks.TensorBoard(log_dir = logs,
histogram_freq = 1,
profile_batch = 0)
  • l'appeler pendant l'entraĂ®nement du modèle
# Train model
model.fit(ds_train,
epochs=2,
validation_data=ds_test,
callbacks = [tboard_callback])

Instrumenter votre code PyTorch​

Pour générer des logs TensorBoard en sortie de votre application PyTorch, il faut

  • dĂ©finir un writer
from torch.utils.tensorboard import SummaryWriter

# default `log_dir` is "runs" - we'll be more specific here
writer = SummaryWriter('runs/fashion_mnist_experiment_1')
  • insĂ©rer des ordres de rappels TensorBoard adaptĂ©s aux rĂ©sultats que vous souhaitez visualiser. Par exemple :
# TensorBoard callback for Scalars visualisation
# here we report running loss value at each iteration i
writer.add_scalar('training loss',
running_loss / 1000,
epoch * len(trainloader) + i)
# TensorBoard callback for ImageData visualisation
writer.add_image('four_fashion_mnist_images', img_grid)
# TensorBoard callback for Graphs visualisation
writer.add_graph(net, images)
# TensorBoard callback for Embedding Projector visualisation
writer.add_embedding(features,
metadata=class_labels,
label_img=images.unsqueeze(1))
# TensorBoard callback for Weights/Bias histogramms
writer.add_histogram('distribution_weight', np.concatenate([j[1].detach().cpu().numpy().flatten()
for j in model.named_parameters()
if 'bn' not in j[0] and 'weight' in j[0]]), epoch + 1)
writer.add_histogram('distribution_bias', np.concatenate([j[1].detach().cpu().numpy().flatten()
for j in model.named_parameters()
if 'bn' not in j[0] and 'bias' in j[0]]), epoch + 1)

Documentation officielle​