Mettez en production les charges de travail d'entraînement
Aperçu
Cette fonctionnalité est en Aperçu public.
Utilisez DABs pour définir une charge de travail d’entraînement AI Runtime sous forme de code. Conservez-le dans le contrôle des sources, déployez-le dans tous les environnements, planifiez-le et associez-le à d’autres tâches. Cette page présente la méthode d’entraînement personnalisée (« bring-your-own-training »), dans laquelle un ai_runtime_task exécute votre propre commande sur un répertoire de code sur un compute GPU serverless.
Il s’agit d’une tâche différente de l’exécution d’un notebook sur un GPU serverless via un bundle. Pour un exemple de base de bundle avec notebook sur GPU, consultez Jobs API et Declarative Automation Bundles.
Configuration requise
- Un workspace avec AI Runtime activé. Consultez Requirements.
- La CLI Databricks (interface en ligne de commande) installée et configurée pour déployer des bundles.
Définir une tâche AI Runtime dans un bundle
Un ai_runtime_task nomme un Experimentation, pointe vers votre code d'entraînement avec code_source_path, et déclare un déploiement : la commande à exécuter et le GPU sur lequel l'exécuter. Ajoutez-le à un Job dans votre bundle :
resources:
jobs:
train:
tasks:
- task_key: train
ai_runtime_task:
experiment: my-experiment
code_source_path: ./src
deployments:
- command_path: ./command.sh
compute:
accelerator_type: GPU_1xA10
accelerator_count: 1
command_path correspond au script exécuté par la tâche. Les nouvelles tentatives, les délais d’expiration et les autorisations sont définis sur la tâche et le job de la même manière que pour n’importe quel job Databricks ; vos pratiques de bundle actuelles restent donc applicables.
Configurez l'accélérateur matériel
Définissez accelerator_type sur le GPU dont votre charge de travail a besoin, et accelerator_count sur le nombre total de GPU. Le décompte est un multiple du nombre de GPU par nœud : 1 pour GPU_1xA10 et GPU_1xH100, et 8 pour GPU_8xH100. Un décompte supérieur à la taille par nœud exécute la tâche sur plusieurs nœuds. Par exemple, GPU_8xH100 avec accelerator_count: 16 s’exécute sur deux nœuds. Pour obtenir des conseils sur le choix d’un accélérateur, consultez les options matérielles.
Pour les exécutions multi-nœuds, AI Runtime exécute votre commande sur chaque nœud et renseigne les variables d’environnement d’entraînement distribué standard dans l’environnement de la tâche : NUM_NODES, WORLD_SIZE, LOCAL_WORLD_SIZE, MASTER_ADDR et MASTER_PORT. Lisez-les à partir de votre commande (par exemple, un lancement torchrun) ; vous ne les définissez pas dans le bundle.
Définir l’environnement et les dépendances
Déclarez un bloc environments sur le job et faites-y référence depuis la tâche avec environment_key. Runtime installe les dépendances répertoriées avant l'exécution de votre commande :
resources:
jobs:
train:
tasks:
- task_key: train
environment_key: default
ai_runtime_task:
# experiment, code_source_path, and deployments as above
environments:
- environment_key: default
spec:
environment_version: '5'
dependencies:
- numpy
Pour les environnements disponibles, consultez Set up your environment.
Livrez votre code d’entraînement
code_source_path indique à la tâche où se trouve votre code d’entraînement. Il accepte trois formulaires :
- Un répertoire local — le CLI le package et l’upload sur
databricks bundle deploy. Il s’agit de la forme la plus simple et de celle que les exemples ci-dessus utilisent. - Un artéfact
tgzexplicite — vous déclarez vous-même l’artéfact et pointez vers son fichier de sortie. Utilisez cette option lorsque vous devez packager uniquement un sous-ensemble de fichiers ou créer un instantané d’une révision Git validée au lieu de votre arbre de travail. - Un chemin de Workspace ou de volume — code déjà upload, utilisé tel quel.
- Local directory
- Packaged artifact
- Workspace or volume path
Pointez code_source_path vers un répertoire. Sur databricks bundle deploy, la CLI compresse le répertoire en package, effectue l’upload, puis la tâche l’extrait et exécute votre commande sur celui-ci :
code_source_path: ./src
Déclarez un tgz artifact et pointez code_source_path vers son fichier de sortie. Sur databricks bundle deploy, la CLI génère l'archive tar, l'upload, et la tâche l'extrait et exécute votre commande dessus :
artifacts:
code:
type: tgz
path: .
include: [src]
files:
- source: ./dist/code.tgz
resources:
jobs:
train:
tasks:
- task_key: train
ai_runtime_task:
code_source_path: ./dist/code.tgz
Utilisez include pour empaqueter des fichiers depuis votre arbre de travail, ou git pour capturer l'état instantané d'une branch validée ou d'un commit.
Pour utiliser du code qui est déjà upload, définissez code_source_path sur un chemin /Workspace/… ou /Volumes/…. Databricks utilise le chemin tel quel et n'empaquette rien.
AI Runtime extrait votre code dans un répertoire et l’expose en tant que variable d’environnement CODE_SOURCE_PATH. Référencez-le à partir de votre commande pour que les chemins relatifs soient résolus, par exemple cd "$CODE_SOURCE_PATH" avant d’exécuter votre script.
Créer des flux de travail multi-tâches
Un ai_runtime_task est une tâche de job Databricks ; il s’intègre donc au reste d’un job. Vous pouvez exécuter une étape de préparation avant l’entraînement, combiner des tâches GPU et CPU dans un même job et utiliser différents accélérateurs par tâche.
Ordonnez les tâches avec depends_on
Utilisez depends_on pour exécuter des tâches en séquence. Le pipeline suivant exécute un Notebook de préparation, puis une tâche d’entraînement sur GPU qui ne start qu’une fois la tâche de préparation terminée avec succès :
resources:
jobs:
train_pipeline:
tasks:
- task_key: prep
notebook_task:
notebook_path: ./prep.py
- task_key: train
depends_on:
- task_key: prep
ai_runtime_task:
experiment: my-experiment
code_source_path: ./src
deployments:
- command_path: ./command.sh
compute:
accelerator_type: GPU_1xA10
accelerator_count: 1
Associer des tâches GPU et CPU
Dans le pipeline ci-dessus, seule l’étape d’entraînement nécessite un GPU. Confier les tâches sans GPU, telles que la préparation des données, à des tâches distinctes permet de consacrer le temps GPU à l’entraînement.
Un ai_runtime_task ne prend pas en charge les valeurs de tâche de job Databricks ({{tasks.<task_key>.values.<name>}} ou dbutils.jobs.taskValues). Pour transférer des données entre les étapes, écrivez-les dans un emplacement partagé que les deux tâches peuvent lire, tel qu'un volume Unity Catalog ou un fichier de workspace, et faites référence à cet chemin depuis chaque tâche.
Programmer la charge de travail
Ajoutez un schedule au job pour l’exécuter à intervalle régulier. Déployez le planning en mode suspendu afin que le déploiement du bundle ne start pas les exécutions de manière autonome, puis réactivez-le lorsque vous êtes prêt :
resources:
jobs:
train_pipeline:
schedule:
quartz_cron_expression: '0 0 9 * * ?'
timezone_id: UTC
pause_status: PAUSED
Passer du développement à la production
La promotion du développement à la production est une fonctionnalité standard du bundle que la tâche AI Runtime hérite sans modification.
Cibles et modes de bundle
Définissez une cible de production avec mode: production en même temps que votre cible de développement. La cible contrôle l'endroit où le bundle se déploie et la façon dont ses Ressources sont nommées :
targets:
dev:
mode: development
default: true
prod:
mode: production
Déployez et exécutez
Déployez et exécutez le bundle sur une cible à l’aide des commandes de bundle standard :
databricks bundle deploy --target dev
databricks bundle run train_pipeline --target dev
Étapes suivantes
- Exécutez et gérez des charges de travail AI Runtime à partir de la ligne de commande avec l'AI Runtime CLI.
- Suivez les exécutions d’entraînement et gérez les points de contrôle. Consultez Suivi de l'Experimentation et observabilité.