Avant de pouvoir effectuer un entraînement personnalisé avec un conteneur prédéfini, vous devez créer une distribution source Python contenant votre application d'entraînement, puis l'importer dans un bucket Cloud Storage auquel votre projet Google Cloud peut accéder.
Alternatives à la création d'une distribution source
Ce guide explique comment créer manuellement une distribution source et l'importer dans Cloud Storage. Avant de suivre le guide, envisagez les autres workflows suivants, qui peuvent s'avérer plus pratiques dans certains cas :
Si vous souhaitez effectuer l'entraînement à l'aide du code sur votre ordinateur local et réduire autant que possible les tâches de création de packages manuelles, nous vous recommandons d'utiliser la fonctionnalité d'empaquetage automatique de Google Cloud CLI. Cette fonctionnalité vous permet de créer une image de conteneur Docker, de la transférer vers Container Registry et de créer une ressource
CustomJob
basée sur l'image du conteneur, le tout à l'aide d'une seule commande. Pour en savoir plus, consultez le guide de création d'une ressourceCustomJob
.Pour utiliser la fonctionnalité de création de packages automatique, vous devez installer Docker sur votre ordinateur local. Cette option ne vous permet de créer qu'une ressource
CustomJob
, et non une ressourceTrainingPipeline
ouHyperparameterTuningJob
. (Découvrez les différences entre les ressources d'entraînement personnalisées.)Pour personnaliser davantage votre image de conteneur et exécuter votre code dans un conteneur en local avant de l'exécuter sur Vertex AI, vous pouvez exécuter la commande
local-run
de la CLI gcloud pour conteneuriser votre code et l'exécuter localement. Vous pouvez ensuite transmettre manuellement l'image à Artifact Registry ou à Container Registry.Pour exécuter la commande
local-run
, vous devez installer Docker sur votre ordinateur local.Si vous pouvez écrire votre code d'entraînement dans un seul script Python, vous pouvez utiliser la classe
CustomJob
du SDK Vertex AI pour Python pour créer une tâche personnalisée ou la classeCustomTrainingJob
pour créer unTrainingPipeline
personnalisé. Votre code d'entraînement est empaqueté automatiquement en tant que distribution source et importé dans Cloud Storage.Pour plus de flexibilité, vous pouvez créer manuellement une image de conteneur personnalisé et la transférer vers Artifact Registry ou Container Registry.
Si aucune des options précédentes ne convient à votre cas d'utilisation ou si vous préférez empaqueter manuellement votre application d'entraînement en tant que distribution source, suivez les autres étapes de ce guide.
Avant de commencer
Avant de préparer votre application d'entraînement pour qu'elle s'exécute dans le cloud, procédez comme suit :
Développez votre application d'entraînement à l'aide d'un framework de machine learning (ML) disponible dans l'un des conteneurs prédéfinis de Vertex AI pour l'entraînement. Assurez-vous que votre application d'entraînement répond aux exigences concernant le code d'entraînement.
Si vous écrivez l'application d'entraînement à partir de zéro, nous vous recommandons d'organiser votre code en fonction de la structure de l'application décrite dans la section suivante de ce document.
Créez un bucket Cloud Storage dans le projet Google Cloud dans lequel vous prévoyez d'utiliser l'IA Vertex. Vous allez stocker votre application d'entraînement dans ce bucket. (Bien qu'il soit possible d'utiliser un bucket dans un autre bucket Google Cloud, une configuration supplémentaire est requise en dehors du cadre de ce guide.)
Pour des performances optimales, assurez-vous que le bucket Cloud Storage se trouve à l'emplacement dans lequel vous prévoyez d'utiliser l'IA Vertex.
Veillez à connaître toutes les bibliothèques Python dont l'application d'entraînement dépend, qu'elles soient sous forme de dépendances personnalisées ou disponibles gratuitement via PyPI.
Structure de l'application
Lorsque vous procédez à un entraînement personnalisé à l'aide d'un conteneur prédéfini, vous devez spécifier votre code d'entraînement en respectant les conditions suivantes :
Fournissez le code sous la forme d'une ou de plusieurs distributions source Python.
Si vous utilisez l'API Vertex AI pour démarrer un entraînement personnalisé, spécifiez ces valeurs dans le champ
packageUris
.Créez un module dans l'une de ces distributions source qui servira de point d'entrée pour l'entraînement.
Si vous utilisez l'API Vertex AI pour démarrer un entraînement personnalisé, spécifiez cette information dans le champ
pythonModule
.
Tant que vous remplissez ces conditions, vous pouvez structurer votre application d'entraînement comme vous le souhaitez. Cependant, nous vous recommandons de créer une seule distribution source Python en organisant votre code dans la structure suivante (souvent utilisée dans les exemples d'IA Vertex) :
Utilisez un répertoire de projet principal, contenant votre fichier
setup.py
. Consultez la section suivante pour obtenir des conseils sur le contenu de ce fichier.Dans le répertoire du projet principal, créez un sous-répertoire nommé
trainer/
qui sert de package principal pour votre code d'entraînement.Dans
trainer/
, créez un module nommétask.py
qui sert de point d'entrée pour votre code d'entraînement.Pour accepter
trainer/task.py
, créez tous les modules Python supplémentaires que vous souhaitez dans le packagetrainer/
et créez tous les sous-répertoires supplémentaires avec ce code supplémentaire que vous souhaitez dans le répertoire de projet principal.Créez un fichier
__init__.py
dans chaque sous-répertoire pour en faire un package.
La suite de ce guide part du principe que votre code est organisé conformément à cette structure.
Créer une distribution source
La création d'une distribution source Python est un sujet vaste qui dépasse largement le cadre de cette documentation. Pour plus de commodité, cette section fournit une présentation de l'utilisation de Setuptools pour créer une distribution source à utiliser avec Vertex AI. Vous pouvez utiliser d'autres bibliothèques aux mêmes fins.
Créez un fichier
setup.py
qui indique à Setuptools comment créer la distribution source. Unsetup.py
de base comprend les éléments suivants :Instructions d'importation pour
setuptools.find_packages
etsetuptools.setup
Appel à
setuptools.setup
avec (au minimum) les paramètres suivants définis :name
défini sur le nom de votre distribution source.version
défini sur le numéro de version de cette version de votre distribution source.install_requires
défini sur la liste des dépendances requises par l'application, ainsi que des exigences de version, comme'docutils>=0.3'
La valeur de
packages
estfind_packages()
. Cela indique à Setuptools d'inclure tous les sous-répertoires du répertoire parent contenant un fichier__init__.py
en tant que packages.La valeur de
include_package_data
estTrue
.
L'exemple suivant présente un fichier
setup.py
de base pour une application d'entraînement :from setuptools import find_packages from setuptools import setup setup( name='trainer', version='0.1', packages=find_packages(), include_package_data=True, description='My training application.' )
Exécutez la commande suivante pour créer une distribution source,
dist/trainer-0.1.tar.gz
:python setup.py sdist --formats=gztar
Dépendances pour l'application Python
Les dépendances sont des packages que vous importez (import
) dans le code. Votre application peut nécessiter de nombreuses dépendances pour fonctionner.
Pour chaque instance dupliquée de votre job d'entraînement personnalisé, votre code s'exécute dans un conteneur avec de nombreuses dépendances Python courantes déjà installées. Vérifiez les dépendances incluses dans le conteneur prédéfini que vous prévoyez d'utiliser pour l'entraînement et notez toutes les dépendances qui ne sont pas déjà installées. Il vous suffit de suivre les étapes suivantes pour les dépendances qui ne sont pas déjà installées dans le conteneur prédéfini.
Il existe deux types de dépendances potentiellement à ajouter :
- Dépendances standards : packages de distribution communs disponibles sur PyPI
- Dépendances personnalisées : par exemple, packages que vous avez développés vous-même ou packages internes d'une organisation
Les sections ci-dessous décrivent la procédure associée à chaque type.
Dépendances standards (PyPI)
Vous pouvez indiquer les dépendances standards de votre application dans son script setup.py
. L'IA Vertex utilise pip
pour installer votre application d'entraînement sur les instances dupliquées qu'il alloue à votre tâche. La commande pip install
recherche les dépendances configurées et les installe.
L'exemple suivant montre un setup.py
semblable à celui d'une section précédente. Toutefois, ce fichier setup.py
indique à Vertex AI d'installer some_PyPI_package
lors de l'installation de l'application d'entraînement :
from setuptools import find_packages
from setuptools import setup
REQUIRED_PACKAGES = ['some_PyPI_package>=1.0']
setup(
name='trainer',
version='0.1',
install_requires=REQUIRED_PACKAGES,
packages=find_packages(),
include_package_data=True,
description='My training application.'
)
Dépendances personnalisées
Vous pouvez indiquer les dépendances personnalisées de l'application en transmettant leurs chemins d'accès dans la configuration de votre tâche. Vous avez besoin de l'URI de la distribution source de chaque dépendance. Les dépendances personnalisées doivent se trouver dans un emplacement Cloud Storage. Vertex AI utilise pip install
pour installer des dépendances personnalisées. Elles peuvent ainsi avoir leurs propres dépendances standards dans leurs scripts setup.py
.
Chaque URI inclus correspond au chemin d'accès à une distribution source au format "tarball" (.tar.gz
) ou "wheel" (.whl
). Vertex AI installe chaque dépendance en utilisant pip install
sur chaque instance dupliquée qu'il alloue à votre tâche d'entraînement.
Si vous utilisez l'API Vertex AI pour démarrer un entraînement personnalisé, spécifiez les URI Cloud Storage vers ces dépendances avec votre application d'entraînement dans le champ packageUris
.
Modules Python
Votre application peut contenir plusieurs modules (fichiers Python). Vous devez identifier le module qui contient le point d'entrée de votre application. Le service d'entraînement exécute ce module en faisant appel à Python, comme vous le feriez localement.
Par exemple, si vous respectez la structure recommandée dans une section précédente, votre module principal est task.py
. Étant donné qu'il se trouve dans un package importé (répertoire contenant un fichier __init__.py
) nommé trainer
, le nom complet de ce module est trainer.task
. Ainsi, si vous utilisez l'API Vertex AI pour démarrer un entraînement personnalisé, définissez le champ moduleName
sur trainer.task
.
Consultez le guide Python relatif aux packages pour plus d'informations sur les modules.
Importer votre distribution source dans Cloud Storage
Vous pouvez utiliser l'outil gsutil
pour importer votre distribution source et toutes les dépendances personnalisées dans un bucket Cloud Storage. Exemple :
gsutil cp dist/trainer-0.1.tar.gz CLOUD_STORAGE_DIRECTORY
Remplacez CLOUD_STORAGE_DIRECTORY par l'URI (commençant par gs://
et se terminant par /
) d'un répertoire Cloud Storage dans un bucket auquel votre projet Google Cloud peut accéder.
Pour découvrir d'autres façons d'importer votre distribution source dans Cloud Storage, consultez la page Importer des objets dans la documentation de Cloud Storage.
Étape suivante
- Découvrez les exigences concernant le code d'entraînement supplémentaires pour l'entraînement personnalisé.
- Apprenez à créer une tâche d'entraînement personnalisée ou un pipeline d'entraînement personnalisé utilisant votre application d'entraînement.