Weights & Biases (wandb)/fr: Difference between revisions

From Alliance Doc
Jump to navigation Jump to search
(Updating to match new version of source page)
No edit summary
 
(44 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages />
<languages />
[https://wandb.ai Weights & Biases (wandb)] est une plateforme de méta-apprentissage machine qui permet de construire des modèles pour des applications concrètes. La plateforme permet de suivre, comparer, décrire et reproduire les expériences d'apprentissage machine.
[[Category:AI and Machine Learning]]
[https://wandb.ai Weights & Biases (wandb)] est une <i>plateforme de méta-apprentissage machine</i> qui permet de construire des modèles pour des applications concrètes. La plateforme permet de suivre, comparer, décrire et reproduire les expériences d'apprentissage machine.


== Utilisation sur nos grappes ==
== Utilisation sur nos grappes ==


=== Disponibilité ===  
=== Disponibilité sur les nœuds de calcul ===  




Puisque wandb exige une connexion à l'internet, sa disponibilité sur les nœuds de calcul dépend de la grappe.
Puisque wandb exige une connexion à l'internet, sa disponibilité sur les nœuds de calcul dépend de la grappe.


<div class="mw-translate-fuzzy">
{| class="wikitable"
{| class="wikitable"
|-
|-
! Grappe !! Disponible !!  
! Grappe !! Disponible !!  
|-
|-
| Béluga || oui ✅ || avant d'utiliser wandb, chargez le module  <tt>httpproxy</tt> avec <tt>module load httpproxy</tt>
| Béluga || rowspan="2"| non ❌ || rowspan="2"| wandb nécessite l'accès à Google Cloud Storage, ce qui n'est pas possible sur les nœuds de calcul
|-
| Narval
|-
|-
| Cedar || oui ✅ || accès internet activé
| Cedar || oui ✅ || accès internet activé
Line 20: Line 22:
| Graham || non ❌ || accès internet désactivé sur les nœuds de calcul  
| Graham || non ❌ || accès internet désactivé sur les nœuds de calcul  
|}
|}
</div>


=== Béluga ===
=== Béluga et Narval ===


While it is possible to upload basic metrics to Weights&Biases during a job on Béluga, the wandb package automatically uploads information about the user's environment to a Google Cloud Storage bucket, resulting in a crash during or at the very end of a training run. It is not currently possible to disable this behaviour. Uploading artifacts to W&B with <tt>wandb.save()</tt> also requires access to Google Cloud Storage, which is not available on Béluga's compute nodes.
S'il est possible de téléverser des métriques de base pour Weights&Biases par une tâche sur Béluga, le paquet wandb téléverse automatiquement de l'information sur l'environnement utilisé vers un compartiment (<i>bucket</i>) Google Cloud Storage, ce qui cause un plantage (<i>crash</i>) au cours d'un entraînement ou à sa toute fin; présentement, il est impossible de désactiver ce comportement. Le téléversement d'artefacts avec <code>wandb.save()</code> nécessite aussi l'accès au Google Cloud Storage, ce qui n'est pas disponible sur les nœuds de calcul de Béluga.


Users can still use wandb on Béluga by enabling the [https://docs.wandb.ai/library/cli#wandb-offline <tt>offline</tt>] or [https://docs.wandb.ai/library/init#save-logs-offline <tt>dryrun</tt>] modes. In these two modes, wandb will write all metrics, logs and artifacts to the local disk and will not attempt to sync anything to the Weights&Biases service on the internet. After their jobs finish running, users can sync their wandb content to the online service by running the command [https://docs.wandb.ai/ref/cli#wandb-sync <tt>wandb sync</tt>] on the login node.
Vous pouvez quand même utiliser wandb sur Béluga en activant les modes [https://docs.wandb.ai/library/cli#wandb-offline <code>offline</code>] ou [https://docs.wandb.ai/library/init#save-logs-offline <code>dryrun</code>]. Avec ces modes, wandb écrit tous les métriques, journalisations et artefacts sur le disque local, sans synchronisation avec le service internet Weights&Biases. Une fois les tâches terminées, vous pouvez faire la synchronisation avec la commande [https://docs.wandb.ai/ref/cli#wandb-sync <code>wandb sync</code>] sur le nœud de connexion.


Note that [[Comet.ml]] is a product very similar to Weights & Biases, and works on Béluga.
Remarquez que le produit [[Comet.ml/fr|Comet.ml]] est très semblable à Weights & Biases et qu'il fonctionne sur Béluga.


=== Exemple ===
=== Exemple ===


<div class="mw-translate-fuzzy">
L'exemple suivant montre comment utiliser wandb pour le suivi de l'expérimentation sur Béluga. Pour reproduire ceci sur Cedar, il n'est pas nécessaire d'activer le mode hors ligne.
L'exemple suivant montre comment utiliser wandb pour le suivi de l'expérimentation sur Béluga. Pour reproduire ceci sur Cedar, il n'est pas nécessaire de charger le module <tt>httpproxy</tt>.
</div>


{{File
{{File
Line 41: Line 40:
   |contents=
   |contents=
#!/bin/bash
#!/bin/bash
#SBATCH --cpus-per-task=1
#SBATCH --account=YOUR_ACCOUNT
#SBATCH --mem=2G        
#SBATCH --cpus-per-task=2 # Nous recommandons au moins 2 CPU (un pour le processus principal et un autre pour le processus wandB)
#SBATCH --mem=4G        
#SBATCH --time=0-03:00
#SBATCH --time=0-03:00
#SBATCH --output=%N-%j.out
#SBATCH --output=%N-%j.out




<div class="mw-translate-fuzzy">
module load StdEnv/2020 python/3.8
module load python/3.6 httpproxy
virtualenv --no-download $SLURM_TMPDIR/env
virtualenv --no-download $SLURM_TMPDIR/env
source $SLURM_TMPDIR/env/bin/activate
source $SLURM_TMPDIR/env/bin/activate
pip install torchvision wandb --no-index
pip install --no-index wandb
</div>


### Save your wandb API key in your .bash_profile or replace $API_KEY with your actual API key. Uncomment the line below and comment out 'wandb offline'. if running on Cedar ###
### sauvegardez votre clé wandb API dans votre .bash_profile ou remplacez $API_KEY par votre propre clé API. Sur Cedar, supprimez la ligne ci-dessous et mettez la ligne wandb offline en commentaire. ###


#wandb login $API_KEY  
#wandb login $API_KEY  
Line 63: Line 61:
}}
}}


Le script wandb-test.py utilise la méthode <tt>watch()</tt> pour journaliser les métriques. Voir [https://docs.wandb.ai la documentation complète].
Le script wandb-test.py est un exemple simple de journalisation des métriques. Pour d'autres options, voyez [https://docs.wandb.ai la documentation complète de W&B].


{{File
{{File
Line 69: Line 67:
   |lang="python"
   |lang="python"
   |contents=
   |contents=
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.backends.cudnn as cudnn
import torchvision
import torchvision.transforms as transforms
from torchvision.datasets import CIFAR10
from torch.utils.data import DataLoader
import argparse
import wandb
import wandb


wandb.init(project="wandb-pytorch-test", settings=wandb.Settings(start_method="fork"))


parser = argparse.ArgumentParser(description='cifar10 classification models, wandb test')
for my_metric in range(10):
parser.add_argument('--lr', default=0.1, help='')
     wandb.log({'my_metric': my_metric})
parser.add_argument('--batch_size', type=int, default=768, help='')
parser.add_argument('--max_epochs', type=int, default=4, help='')
parser.add_argument('--num_workers', type=int, default=0, help='')
 
def main():
   
    args = parser.parse_args()
 
    print("Starting Wandb...")
 
    wandb.init(project="wandb-pytorch-test", config=args)
 
    class Net(nn.Module):
 
      def __init__(self):
          super(Net, self).__init__()
 
          self.conv1 = nn.Conv2d(3, 6, 5)
          self.pool = nn.MaxPool2d(2, 2)
          self.conv2 = nn.Conv2d(6, 16, 5)
          self.fc1 = nn.Linear(16 * 5 * 5, 120)
          self.fc2 = nn.Linear(120, 84)
          self.fc3 = nn.Linear(84, 10)
 
      def forward(self, x):
          x = self.pool(F.relu(self.conv1(x)))
          x = self.pool(F.relu(self.conv2(x)))
          x = x.view(-1, 16 * 5 * 5)
          x = F.relu(self.fc1(x))
          x = F.relu(self.fc2(x))
          x = self.fc3(x)
          return x
 
    net = Net()
 
    transform_train = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
 
    dataset_train = CIFAR10(root='./data', train=True, download=False, transform=transform_train)
 
    train_loader = DataLoader(dataset_train, batch_size=args.batch_size, num_workers=args.num_workers)
 
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.SGD(net.parameters(), lr=args.lr)
 
    wandb.watch(net)
 
    for epoch in range(args.max_epochs):
 
        train(epoch, net, criterion, optimizer, train_loader)
 
 
def train(epoch, net, criterion, optimizer, train_loader):
 
     for batch_idx, (inputs, targets) in enumerate(train_loader):
 
      outputs = net(inputs)
      loss = criterion(outputs, targets)
 
      optimizer.zero_grad()
      loss.backward()
      optimizer.step()
 
 
if __name__=='__main__':
  main()


}}
}}


 
Après que l'entraînement a été effectué en mode hors ligne, vous aurez le nouveau répertoire <code>./wandb/offline-run*</code>. Pour envoyer les métriques au serveur, utilisez la commande <code>wandb sync ./wandb/offline-run*</code> où l'astérisque synchronise toutes les exécutions.
== Notes ==
 
* Uploading metrics and other artifacts to a centralized cloud is useful for many reasons
* For metrics, wandb connects to it's own domain, which we can whitelist (as it's done for Comet.ml on Béluga).
* For file uploads, wandb connects to googlecloudstorage.com/wandb (or something like that). It's not possible to whitelist a url with https, it's only possible to whitelist domains/subdomains.
* If wandb would connect using a subdomain, like wandb.googlecloudstorage.com, maybe we could whitelist that.
* Wandb offer an on-premise version that could probably work on Graham; but someone would have to maintain that service.
* Comet.ml works right now on Cedar and Béluga; it might appear simple to just switch to Comet.ml, but it's not that simple.

Latest revision as of 19:38, 15 July 2024

Other languages:

Weights & Biases (wandb) est une plateforme de méta-apprentissage machine qui permet de construire des modèles pour des applications concrètes. La plateforme permet de suivre, comparer, décrire et reproduire les expériences d'apprentissage machine.

Utilisation sur nos grappes

Disponibilité sur les nœuds de calcul

Puisque wandb exige une connexion à l'internet, sa disponibilité sur les nœuds de calcul dépend de la grappe.

Grappe Disponible
Béluga non ❌ wandb nécessite l'accès à Google Cloud Storage, ce qui n'est pas possible sur les nœuds de calcul
Narval
Cedar oui ✅ accès internet activé
Graham non ❌ accès internet désactivé sur les nœuds de calcul

Béluga et Narval

S'il est possible de téléverser des métriques de base pour Weights&Biases par une tâche sur Béluga, le paquet wandb téléverse automatiquement de l'information sur l'environnement utilisé vers un compartiment (bucket) Google Cloud Storage, ce qui cause un plantage (crash) au cours d'un entraînement ou à sa toute fin; présentement, il est impossible de désactiver ce comportement. Le téléversement d'artefacts avec wandb.save() nécessite aussi l'accès au Google Cloud Storage, ce qui n'est pas disponible sur les nœuds de calcul de Béluga.

Vous pouvez quand même utiliser wandb sur Béluga en activant les modes offline ou dryrun. Avec ces modes, wandb écrit tous les métriques, journalisations et artefacts sur le disque local, sans synchronisation avec le service internet Weights&Biases. Une fois les tâches terminées, vous pouvez faire la synchronisation avec la commande wandb sync sur le nœud de connexion.

Remarquez que le produit Comet.ml est très semblable à Weights & Biases et qu'il fonctionne sur Béluga.

Exemple

L'exemple suivant montre comment utiliser wandb pour le suivi de l'expérimentation sur Béluga. Pour reproduire ceci sur Cedar, il n'est pas nécessaire d'activer le mode hors ligne.


File : wandb-test.sh

#!/bin/bash
#SBATCH --account=YOUR_ACCOUNT
#SBATCH --cpus-per-task=2 # Nous recommandons au moins 2 CPU (un pour le processus principal et un autre pour le processus wandB)
#SBATCH --mem=4G       
#SBATCH --time=0-03:00
#SBATCH --output=%N-%j.out


module load StdEnv/2020 python/3.8
virtualenv --no-download $SLURM_TMPDIR/env
source $SLURM_TMPDIR/env/bin/activate
pip install --no-index wandb

### sauvegardez votre clé wandb API dans votre .bash_profile ou remplacez $API_KEY par votre propre clé API. Sur Cedar, supprimez la ligne ci-dessous et mettez la ligne wandb offline en commentaire. ###

#wandb login $API_KEY 

wandb offline

python wandb-test.py


Le script wandb-test.py est un exemple simple de journalisation des métriques. Pour d'autres options, voyez la documentation complète de W&B.


File : wandb-test.py

import wandb

wandb.init(project="wandb-pytorch-test", settings=wandb.Settings(start_method="fork"))

for my_metric in range(10):
    wandb.log({'my_metric': my_metric})


Après que l'entraînement a été effectué en mode hors ligne, vous aurez le nouveau répertoire ./wandb/offline-run*. Pour envoyer les métriques au serveur, utilisez la commande wandb sync ./wandb/offline-run* où l'astérisque synchronise toutes les exécutions.