Weights & Biases (wandb)/fr: Difference between revisions
(Created page with "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'env...") |
(Created page with "Vous pouvez quand même utiliser wandb sur Béluga en activant les modes [https://docs.wandb.ai/library/cli#wandb-offline <tt>offline</tt>] ou [https://docs.wandb.ai/library/i...") |
||
Line 24: | Line 24: | ||
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 entrainement ou à sa toute fin; présentement, il est impossible de désactiver ce comportement. Le téléversement d'artefacts avec <tt>wandb.save()</tt> 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 | 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 entrainement ou à sa toute fin; présentement, il est impossible de désactiver ce comportement. Le téléversement d'artefacts avec <tt>wandb.save()</tt> 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 [https://docs.wandb.ai/library/cli#wandb-offline <tt>offline</tt>] ou [https://docs.wandb.ai/library/init#save-logs-offline <tt>dryrun</tt>]. 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 <tt>wandb sync</tt>] sur le nœud de connexion. | |||
Remarquez que le produit [[Comet.ml/fr Comet.ml]] est très semblable à Weights & Biases et qu'il fonctionne sur Béluga. | Remarquez que le produit [[Comet.ml/fr Comet.ml]] est très semblable à Weights & Biases et qu'il fonctionne sur Béluga. |
Revision as of 22:50, 5 July 2021
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é
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 noeuds de calcul |
Cedar | oui ✅ | accès internet activé |
Graham | non ❌ | accès internet désactivé sur les nœuds de calcul |
Béluga
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 entrainement 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/fr 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.
#!/bin/bash
#SBATCH --cpus-per-task=1
#SBATCH --mem=2G
#SBATCH --time=0-03:00
#SBATCH --output=%N-%j.out
virtualenv --no-download $SLURM_TMPDIR/env
source $SLURM_TMPDIR/env/bin/activate
pip install torchvision wandb --no-index
### 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 ###
#wandb login $API_KEY
wandb offline
python wandb-test.py
Le script wandb-test.py utilise la méthode watch() pour journaliser les métriques. Voir la documentation complète.
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
parser = argparse.ArgumentParser(description='cifar10 classification models, wandb test')
parser.add_argument('--lr', default=0.1, help='')
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()