Passer au contenu principal

Essayer dans Colab

Les jobs Launch sont des modèles permettant de reproduire des runs W&B. Les jobs sont des W&B Artifacts qui capturent le code source, les dépendances et les entrées requises pour exécuter une charge de travail. Créez et exécutez des jobs avec la commande wandb launch.
Pour créer un job sans le soumettre à l’exécution, utilisez la commande wandb job create. Voir la documentation de référence de la commande pour plus d’informations.

Jobs basés sur Git

Vous pouvez créer un job basé sur Git, dans lequel le code et les autres ressources suivies sont clonés à partir d’un commit, d’une branche ou d’un tag donnés d’un dépôt Git distant avec W&B Launch. Utilisez l’indicateur --uri ou -u pour spécifier l’URI contenant le code et, si nécessaire, l’indicateur --build-context pour spécifier un sous-répertoire. Exécutez un job “hello world” à partir d’un dépôt Git avec la commande suivante :
wandb launch --uri "https://github.com/wandb/launch-jobs.git" --build-context jobs/hello_world --dockerfile Dockerfile.wandb --project "hello-world" --job-name "hello-world" --entry-point "python job.py"
Cette commande effectue les opérations suivantes :
  1. Clone le dépôt de jobs W&B Launch dans un répertoire temporaire.
  2. Crée un job nommé hello-world-git dans le projet hello. Le job est associé au commit le plus récent de la branche par défaut du dépôt.
  3. Construit une image de conteneur à partir du répertoire jobs/hello_world et du Dockerfile.wandb.
  4. Démarre le conteneur et exécute python job.py.
Pour construire un job à partir d’une branche spécifique ou d’un hash de commit spécifique, ajoutez l’argument -g, --git-hash. Pour obtenir la liste complète des arguments, exécutez wandb launch --help.

Format de l’URL distante

Le dépôt distant Git associé à un job Launch peut utiliser une URL HTTPS ou SSH. Le type d’URL détermine le protocole utilisé pour récupérer le code source du job.
Type d’URL distanteFormat d’URLConditions d’accès et d’authentification
httpshttps://github.com/organization/repository.gitnom d’utilisateur et mot de passe pour s’authentifier auprès du dépôt distant Git
sshgit@github.com:organization/repository.gitclé SSH pour s’authentifier auprès du dépôt distant Git
Notez que le format exact de l’URL varie selon le fournisseur d’hébergement. Les jobs créés avec wandb launch --uri utiliseront le protocole de transfert spécifié dans le --uri fourni.

Jobs d’Artifact de code

Les jobs peuvent être créés à partir de n’importe quel code source stocké dans un W&B Artifact. Utilisez un répertoire local avec l’argument --uri ou -u pour créer un nouvel Artifact de code et un job. Pour commencer, créez un répertoire vide et ajoutez un script Python nommé main.py avec le contenu suivant :
import wandb

with wandb.init() as run:
    run.log({"metric": 0.5})
Ajoutez un fichier requirements.txt contenant le contenu suivant :
wandb>=0.17.1
Enregistrez le répertoire en tant qu’artifact de code et lancez un job avec la commande suivante :
wandb launch --uri . --job-name hello-world-code --project launch-quickstart --entry-point "python main.py"
La commande précédente effectue les opérations suivantes :
  1. Enregistre le répertoire actuel en tant qu’artifact de code nommé hello-world-code.
  2. Crée un job nommé hello-world-code dans le projet launch-quickstart.
  3. Construit une image de conteneur à partir du répertoire actuel et du Dockerfile par défaut de Launch. Le Dockerfile par défaut installera le fichier requirements.txt et définira le point d’entrée sur python main.py.

Image jobs

Vous pouvez également créer des jobs à partir d’images Docker préconstruites. C’est utile si vous disposez déjà d’un système de build établi pour votre code ML, ou si vous ne prévoyez pas de modifier le code ou les dépendances du job, mais souhaitez tout de même expérimenter avec des hyperparamètres ou différentes tailles d’infrastructure. L’image est récupérée depuis un registre Docker et exécutée avec le point d’entrée spécifié, ou le point d’entrée par défaut si aucun n’est indiqué. Indiquez un tag d’image complet dans l’option --docker-image pour créer et exécuter un job à partir d’une image Docker. Pour exécuter un job simple à partir d’une image préconstruite, utilisez la commande suivante :
wandb launch --docker-image "wandb/job_hello_world:main" --project "hello-world"           

Création automatique de jobs

W&B crée et suit automatiquement un job pour tout run dont le code source est suivi, même si ce run n’a pas été créé avec Launch. Les Runs sont considérés comme ayant un code source suivi si l’une des trois conditions suivantes est remplie :
  • Le run a un dépôt distant Git associé et un hash de commit.
  • Le run a enregistré un artifact de code. Voir Run.log_code.
  • Le run a été exécuté dans un conteneur Docker avec la variable d’environnement WANDB_DOCKER définie sur un tag d’image
L’URL du dépôt distant Git est déduite du dépôt git local si votre job Launch est créé automatiquement par un run W&B.

Noms des jobs Launch

Par défaut, W&B génère automatiquement un nom de job. Ce nom dépend de la façon dont le job est créé (GitHub, artifact de code ou image Docker). Vous pouvez aussi définir le nom d’un job Launch à l’aide de variables d’environnement ou du W&B Python SDK. Le tableau suivant décrit la convention de nommage des jobs utilisée par défaut selon la source du job :
SourceConvention de nommage
GitHubjob-<git-remote-url>-<path-to-script>
Artifact de codejob-<code-artifact-name>
Image Dockerjob-<image-name>
Nommez votre job avec une variable d’environnement W&B ou avec le W&B Python SDK
Définissez la variable d’environnement WANDB_JOB_NAME sur le nom de job de votre choix. Par exemple :
WANDB_JOB_NAME=awesome-job-name
Pour les jobs basés sur une image Docker, l’alias de version est automatiquement ajouté aux alias du job.

Conteneurisation

Les jobs sont exécutés dans un conteneur. Les Image jobs utilisent une image Docker préconstruite, tandis que les jobs Git et les jobs d’artifact de code nécessitent une étape de build du conteneur. La conteneurisation des jobs peut être personnalisée à l’aide d’arguments de wandb launch et de fichiers présents dans le code source du job.

Contexte de build

Le terme build context désigne l’arborescence de fichiers et de répertoires envoyée au démon Docker pour créer une image de conteneur. Par défaut, Launch utilise la racine du code source du job comme contexte de build. Pour spécifier un sous-répertoire comme contexte de build, utilisez l’argument --build-context de wandb launch lors de la création et du lancement d’un job.
L’argument --build-context est particulièrement utile lorsque vous travaillez avec des jobs Git qui se réfèrent à un monorepo contenant plusieurs projets. En spécifiant un sous-répertoire comme contexte de build, vous pouvez créer une image de conteneur pour un projet spécifique au sein du monorepo.Voir l’exemple ci-dessus, qui montre comment utiliser l’argument --build-context avec le dépôt officiel des jobs Launch de W&B.

Dockerfile

Le Dockerfile est un fichier texte qui contient des instructions pour créer une image Docker. Par défaut, Launch utilise un Dockerfile par défaut qui installe les dépendances du fichier requirements.txt. Pour utiliser un Dockerfile personnalisé, indiquez le chemin du fichier avec l’argument --dockerfile de wandb launch. Le chemin du Dockerfile est indiqué par rapport au contexte de build. Par exemple, si le contexte de build est jobs/hello_world et que le Dockerfile se trouve dans le répertoire jobs/hello_world, l’argument --dockerfile doit être défini sur Dockerfile.wandb. Voir l’exemple ci-dessus pour un exemple d’utilisation de l’argument --dockerfile avec le dépôt officiel des jobs Launch de W&B.

Fichier requirements

Si aucun Dockerfile personnalisé n’est fourni, Launch recherchera dans le contexte de build les dépendances Python à installer. Si un fichier requirements.txt est trouvé à la racine du contexte de build, Launch installera les dépendances indiquées dans ce fichier. Sinon, si un fichier pyproject.toml est trouvé, Launch installera les dépendances à partir de la section project.dependencies.