Vous pouvez exécuter la commande gcloud ai custom-jobs local-run
pour créer une image de conteneur Docker à partir de votre code d'entraînement et l'exécuter en tant que conteneur sur votre ordinateur local. Cette fonctionnalité présente plusieurs avantages :
Vous pouvez créer une image de conteneur même en n'ayant que des connaissances basiques sur Docker. Vous n'avez pas besoin d'écrire votre propre fichier Dockerfile. Vous pouvez ensuite transférer cette image vers Artifact Registry et l'utiliser pour l'entraînement de conteneurs personnalisés.
Pour les cas d'utilisation avancés, vous voudrez peut-être tout de même écrire votre propre fichier Dockerfile.
Votre image de conteneur peut exécuter une application d'entraînement Python ou un script Bash.
Vous pouvez utiliser un script Bash pour exécuter du code d'entraînement écrit dans un autre langage de programmation, à condition de spécifier également une image de conteneur de base compatible avec l'autre langage.
L'exécution d'un conteneur en local exécute votre code d'entraînement de la même manière que sur Vertex AI.
L'exécution locale de votre code peut vous aider à résoudre les problèmes liés à votre code avant d'effectuer un entraînement personnalisé sur Vertex AI.
Avant de commencer
Si vous utilisez Linux, configurez Docker pour pouvoir l'exécuter sans
sudo
.La commande
local-run
nécessite cette configuration pour pouvoir utiliser Docker.
Utiliser la commande local-run
Exécutez la commande suivante pour créer une image de conteneur basée sur votre code d'entraînement et exécuter un conteneur localement :
gcloud ai custom-jobs local-run \
--executor-image-uri=BASE_IMAGE_URI \
--local-package-path=WORKING_DIRECTORY \
--script=SCRIPT_PATH \
--output-image-uri=OUTPUT_IMAGE_NAME
Remplacez l'élément suivant :
BASE_IMAGE_URI : URI d'une image Docker à utiliser comme base du conteneur. Choisissez une image de base incluant les dépendances requises par votre code d'entraînement.
Vous pouvez utiliser l'URI d'une image de conteneur d'entraînement prédéfini ou toute autre valeur valide pour une instruction Dockerfile
FROM
(par exemple, une image Docker accessible au public ou une image Docker à laquelle vous avez accès dans Artifact Registry).WORKING_DIRECTORY : répertoire de niveau inférieur de votre système de fichiers contenant tous le code d'entraînement et les dépendances locales à utiliser pour l'entraînement.
Par défaut, la commande ne copie que le répertoire parent du fichier spécifié par l'option
--script
(consultez l'élément de liste suivant) dans l'image Docker obtenue. L'image Docker n'inclut pas nécessairement tous les fichiers de WORKING_DIRECTORY. Pour personnaliser les fichiers à inclure, consultez la section de ce document sur l'inclusion des dépendances.Si vous omettez l'option
--local-package-path
(et cet espace réservé), la commandelocal-run
utilise le répertoire de travail actuel pour cette valeur.SCRIPT_PATH : chemin d'accès, par rapport à WORKING_DIRECTORY sur votre système de fichiers local, vers le script qui est le point d'entrée de votre code d'entraînement. Il peut s'agir d'un script Python (se terminant par
.py
) ou d'un script Bash.Par exemple, si vous souhaitez exécuter
/hello-world/trainer/task.py
et que WORKING_DIRECTORY est défini sur/hello-world
, utiliseztrainer/task.py
pour cette valeur.Si vous spécifiez un script Python, Python doit être installé sur votre image de base. Si vous spécifiez un script bash, Bash doit être installé sur votre image de base. (Tous les conteneurs d'entraînement prédéfinis et de nombreuses autres images Docker accessibles publiquement incluent ces deux dépendances.)
Utilisez
--python-module
à la place de--script
.Si vous omettez l'option
--script
(et SCRIPT_PATH), vous devez utiliser l'option--python-module
pour spécifier le nom d'un module Python dans WORKING_DIRECTORY, qui sera exécuté comme point d'entrée de l'entraînement. Par exemple, au lieu de--script=trainer/task.py
, vous pouvez spécifier--python-module=trainer.task
.Dans ce cas, le conteneur Docker obtenu charge votre code en tant que module plutôt que sous forme de script. Vous souhaiterez probablement utiliser cette option si votre script de point d'entrée importe d'autres modules Python dans WORKING_DIRECTORY.
OUTPUT_IMAGE_NAME : nom de l'image Docker résultante créée par la commande. Vous pouvez utiliser n'importe quelle valeur acceptée par l'option
-t
dedocker build
.Si vous envisagez de transférer ultérieurement l'image vers Artifact Registry, vous pouvez utiliser un nom d'image conforme aux exigences d'Artifact Registry. Vous pouvez aussi taguer l'image avec d'autres noms ultérieurement.
Si vous omettez l'option
--output-image-uri
(et cet espace réservé), la commandelocal-run
ajoute à l'image un nom basé sur l'heure actuelle et le nom de fichier de votre script de point d'entrée.
La commande crée une image de conteneur Docker basée sur votre configuration. Une fois l'image créée, la commande affiche le résultat suivant :
A training image is built.
Starting to run ...
La commande utilise immédiatement cette image de conteneur pour exécuter un conteneur sur votre ordinateur local. La commande affiche le résultat suivant à la fermeture du conteneur :
A local run is finished successfully using custom image: OUTPUT_IMAGE_NAME
Options supplémentaires
Les sections suivantes décrivent des options supplémentaires que vous pouvez utiliser pour personnaliser le comportement de la commande local-run
.
Installer des dépendances
Votre code d'entraînement peut s'appuyer sur toutes les dépendances installées sur votre image de base (par exemple, les images de conteneurs d'entraînement prédéfinis incluent de nombreuses bibliothèques Python pour le machine learning), ainsi que sur tous les fichiers que vous incluez dans l'image Docker créée par la commande local-run
.
Lorsque vous spécifiez un script avec l'option --script
ou --python-module
, la commande copie le répertoire parent du script (et ses sous-répertoires) dans l'image Docker. Par exemple, si vous spécifiez --local-package-path=/hello-world
et --script=trainer/task.py
, la commande copie /hello-world/trainer/
dans l'image Docker.
Vous pouvez également inclure des dépendances Python supplémentaires ou des fichiers arbitraires à partir de votre système de fichiers en effectuant les étapes supplémentaires décrites dans l'une des sections suivantes :
- Utiliser un fichier
requirements.txt
pour les dépendances Python - Utiliser un fichier
setup.py
pour les dépendances Python - Spécifier des dépendances PyPI individuelles
- Spécifier des dépendances Python locales
- Inclure d'autres fichiers
Installer des dépendances Python supplémentaires
Vous pouvez inclure des dépendances Python supplémentaires dans l'image Docker de plusieurs manières :
Utiliser un fichier requirements.txt
Si le répertoire de travail contient un fichier nommé requirements.txt
, la commande local-run
traite ce fichier comme un fichier d'exigences pip et l'utilise pour installer les dépendances Python dans l'image Docker.
Utiliser un fichier setup.py
Si le répertoire de travail contient un fichier nommé setup.py
, la commande local-run
traite ce fichier comme unfichier Python setup.py
, copie le fichier dans l'image Docker et exécute pip install
dans le répertoire de l'image Docker qui contient ce fichier.
Vous pouvez, par exemple, ajouter un argument install_requires
à setup.py
afin d'installer des dépendances Python dans l'image Docker.
Spécifier les dépendances PyPI individuelles
Vous pouvez utiliser l'option --requirements
pour installer des dépendances spécifiques à partir de PyPI dans l'image Docker. Exemple :
gcloud ai custom-jobs local-run \
--executor-image-uri=BASE_IMAGE_URI \
--local-package-path=WORKING_DIRECTORY \
--script=SCRIPT_PATH \
--output-image-uri=OUTPUT_IMAGE_NAME \
--requirements=REQUIREMENTS
Remplacez REQUIREMENTS par une liste de spécificateurs d'exigences Python séparés par des virgules.
Spécifier des dépendances Python locales supplémentaires
Vous pouvez utiliser l'option --extra-packages
pour installer des dépendances Python locales spécifiques. Ces dépendances Python doivent se trouver dans le répertoire de travail et chaque dépendance doit être dans un format compatible avec pip install
(par exemple, un fichier wheel ou une distribution source Python).
Exemple :
gcloud ai custom-jobs local-run \
--executor-image-uri=BASE_IMAGE_URI \
--local-package-path=WORKING_DIRECTORY \
--script=SCRIPT_PATH \
--output-image-uri=OUTPUT_IMAGE_NAME \
--extra-packages=LOCAL_DEPENDENCIES
Remplacez LOCAL_DEPENDENCIES par une liste de chemins d'accès locaux aux fichiers séparés par des virgules, exprimée par rapport au répertoire de travail.
Inclure d'autres fichiers
Pour copier des répertoires supplémentaires dans l'image Docker (sans les installer en tant que dépendances Python), vous pouvez utiliser l'option --extra-dirs
. Vous ne pouvez spécifier des répertoires qu'à l'intérieur du répertoire de travail. Exemple :
gcloud ai custom-jobs local-run \
--executor-image-uri=BASE_IMAGE_URI \
--local-package-path=WORKING_DIRECTORY \
--script=SCRIPT_PATH \
--output-image-uri=OUTPUT_IMAGE_NAME \
--extra-dirs=EXTRA_DIRECTORIES
Remplacez EXTRA_DIRECTORIES par une liste de répertoires locaux séparés par une virgule, exprimés par rapport au répertoire de travail.
Arguments de l'application d'entraînement
Si le script de point d'entrée de votre application d'entraînement attend des arguments de ligne de commande, vous pouvez les spécifier lorsque vous exécutez la commande local-run
. Ces arguments ne sont pas enregistrés dans l'image Docker et sont transmis en tant qu'arguments lorsque l'image s'exécute en tant que conteneur.
Pour transmettre des arguments à votre script de point d'entrée, transmettez à la commande local-run
l'argument --
suivi de ceux de votre script, après tous les autres options de la commande.
Par exemple, imaginez un script que vous exécutez en local à l'aide de la commande suivante :
python /hello-world/trainer/task.py \
--learning_rate=0.1 \
--input_data=gs://BUCKET/small-dataset/
Lorsque vous utilisez la commande local-run
, vous pouvez utiliser les options suivantes pour exécuter le script dans le conteneur avec les mêmes arguments :
gcloud ai custom-jobs local-run \\
--executor-image-uri=BASE_IMAGE_URI \
--local-package-path=/hello-world \
--script=/trainer/task.py \
--output-image-uri=OUTPUT_IMAGE_NAME \
-- \
--learning_rate=0.1 \
--input_data=gs://BUCKET/small-dataset/
Accélérer l'entraînement de modèle avec les GPU
Si vous souhaitez à un moment donné déployer l'image Docker créée par la commande local-run
sur Vertex AI et utiliser des GPU pour l'entraînement, assurez-vous d'écrire un code d'entraînement qui exploite les GPU et utilise une image Docker compatible avec les GPU pour la valeur de l'option --executor-image-uri
. Par exemple, vous pouvez utiliser l'une des images du conteneur d'entraînement préconfiguré compatible avec les GPU.
Si votre ordinateur local exécute Linux et dispose de GPU, vous pouvez également configurer la commande local-run
pour qu'elle utilise vos GPU lorsqu'elle exécute un conteneur localement. Cette option est facultative, mais elle peut être utile si vous souhaitez tester le fonctionnement de votre code d'entraînement avec des GPU. Procédez comme suit :
Installez le NVIDIA Container Toolkit (
nvidia-docker
) sur votre ordinateur local, si ce n'est pas déjà fait.Utilisez l'indicateur
--gpu
lorsque vous exécutez la commandelocal-run
: Exemple :gcloud ai custom-jobs local-run \ --executor-image-uri=BASE_IMAGE_URI \ --local-package-path=WORKING_DIRECTORY \ --script=SCRIPT_PATH \ --output-image-uri=OUTPUT_IMAGE_NAME \ --gpu
Spécifier un compte de service personnalisé
Par défaut, lorsque la commande local-run
exécute votre code d'entraînement dans un conteneur local, elle installe les identifiants Google Cloud disponibles dans votre environnement local via des Identifiants par défaut de l'application (ADC) dans le conteneur, de sorte que votre code d'entraînement puisse utiliser l'ADC pour l'authentification avec les mêmes identifiants. En d'autres termes, les identifiants disponibles via le service ADC dans votre interface système locale sont également disponibles via ADC pour votre code lorsque vous exécutez la commande local-run
.
Vous pouvez utiliser la commande gcloud auth application-default login
afin d'utiliser votre compte utilisateur pour l'ADC, ou vous pouvez définir une variable d'environnement dans votre interface système pour utiliser un compte de service pour l'ADC.
Si vous souhaitez que le conteneur s'exécute avec des identifiants Google Cloud autres que ceux disponibles par ADC dans votre interface système locale, procédez comme suit :
Créez ou sélectionnez un compte de service avec les autorisations auxquelles vous souhaitez que votre code d'entraînement ait accès.
Téléchargez une clé de compte de service associée à ce compte sur votre ordinateur local.
Lorsque vous exécutez la commande
local-run
, spécifiez l'option--service-account-key-file
. Exemple :gcloud ai custom-jobs local-run \ --executor-image-uri=BASE_IMAGE_URI \ --local-package-path=WORKING_DIRECTORY \ --script=SCRIPT_PATH \ --output-image-uri=OUTPUT_IMAGE_NAME \ --service-account-key-file=KEY_PATH
Remplacez KEY_PATH par le chemin d'accès à la clé de compte de service dans votre système de fichiers local. Ce chemin d'accès doit être absolu ou relatif au répertoire de travail actuel de votre interface système, et non au répertoire spécifié par l'option
--local-package-path
.
Dans le conteneur obtenu, votre code d'entraînement peut utiliser ADC pour s'authentifier avec les identifiants du compte de service spécifiés.
Comparaison avec l'entraînement sur Vertex AI
Lorsque vous effectuez un entraînement personnalisé sur Vertex AI, celui-ci utilise par défaut l'agent de service de code personnalisé Vertex AI pour votre projet pour exécuter le code. Vous pouvez également associer un autre compte de service pour l'entraînement personnalisé.
Lorsque vous utilisez la commande local-run
, vous ne pouvez pas vous authentifier en tant qu'agent de service de code personnalisé Vertex AI, mais vous pouvez créer un compte de service avec des autorisations similaires et l'utiliser localement.
Étapes suivantes
En savoir plus sur les exigences concernant votre code d'entraînement.
Découvrez comment envoyer votre image Docker vers Artifact Registry et l'utiliser comme conteneur personnalisé pour l'entraînement sur Vertex AI.