Table des matières

Neural Network Intelligence (NNI)

NNI est une boîte à outils pour l'optimisation des hyper-paramètres afin d'obtenir des réseaux de neurones performants.

Une documentation très complète est disponible (doc).

Cette page Wiki regroupe nos expériences sur l'installation (NNI, Pytorch, Anaconda) et l'exécution (GPU, ssh, interface Web usager) de NNI.

N'HÉSITEZ PAS À COLLABORER AVEC VOS PROPRES EXPÉRIENCES

Une vidéo d'un mini-tutoriel basé sur un premier essai est disponible.

L'installation est facile

* L'installation requiert Python>=3.6. Il est possible de faire l'installation directement avec git en utilisant le code source de NNI sur Github et en lançant le script d'installation :

  git clone -b v1.9 https://github.com/Microsoft/nni.git
  cd nni
  ./install.sh

Quelques trucs en vrac pour commencer

Tester NNI

  module load anaconda
  conda activate pytorch-1.6.0
  RCV_CONFIG = nni.get_next_parameter()
  #RCV_CONFIG = {'lr': 0.1, 'optimizer': 'Adam', 'model':'senet18'}

On doit commenter (#) la première ligne et dé-commenter la deuxième. Je recommande aussi de faire un premier test avec un nombre réduit d'epochs. Dans la partie 'main' du script python on remplace le défaut de 200 epochs par 5.

  parser.add_argument("--epochs", type=int, default=200)'' ==> ''parser.add_argument("--epochs", type=int, default=5)
  ==> Preparing data..
  .. .. 
  ==> Building model..
  Epoch: 0

Le script ne fait pas utilisation de GPU (sinon on aurait une mention de CUDA) et on remarque que c'est très long car on utilise le CPU! Nous devons faire 2 commandes supplémentaires pour pouvoir utiliser les GPU avant de relancer le script :

export MKL_THREADING_LAYER=GNU

export CUDA_VISIBLE_DEVICES=x

Pour choisir la valeur de x, on fait la commande nvidia-smi pour voir quelles sont les GPU disponibles.

nnictl create –config nni/examples/trials/cifar10-pytorch/config.yml

searchSpacePath: search_space.json

  {
  "lr":{"_type":"choice", "_value":[0.1, 0.01, 0.001, 0.0001]}, 
  "optimizer":{"_type":"choice", "_value":["SGD", "Adadelta", "Adagrad", "Adam", "Adamax"]}, 
  "model":{"_type":"choice", "_value":["vgg", "resnet18", "googlenet", "densenet121", "mobilenet", "dpn92", "senet18"]} 
  }

nnictl create pour créer une expérience.

nnictl top pour voir ce qui se passe dans l'expérience en cours.

nnictl stop pour arrêter une expérience en cours.

  logDir: /home/username/mon_repertoire_adore/NNI/nni-experiments

Utiliser plusieurs GPUs avec NNI

Paralléliser une évaluation sur plusieurs GPUs

Quelques petites choses sur l'évaluation avec plusieurs GPUs toujours en définissant correctement la variable d'environnement CUDA_VISIBLE_DEVICES. Les tests ont été fait sur pandora.

trainset = torchvision.datasets.CIFAR100(root='./data', train=True, download=True, transform=transform_train)

trainloader = torch.utils.data.DataLoader(trainset, batch_size=128, shuffle=True, num_workers=2)