Créer une application d'entraînement Python pour un conteneur prédéfini

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 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 :

  1. 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.

  2. 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.

  3. 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 package trainer/ 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.

  1. Créez un fichier setup.py qui indique à Setuptools comment créer la distribution source. Un setup.py de base comprend les éléments suivants :

    • Instructions d'importation pour setuptools.find_packages et setuptools.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 est find_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 est True.

    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.'
    )
    
  2. 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