Exécuter un job d'entraînement avec suivi des tests

Vertex AI fournit un service d'entraînement géré qui vous permet d'opérationnaliser l'entraînement de modèles à grande échelle. Vous pouvez activer le suivi des tests à l'aide du SDK Vertex AI pour Python afin de capturer les paramètres et les métriques de performances lors de l'envoi du job d'entraînement personnalisé.

Cette fonctionnalité n'est pas disponible dans les cas suivants :

  • Vous envoyez un job d'entraînement via la console Google Cloud ou Google Cloud CLI.
  • Vous utilisez TPU dans le job d'entraînement.
  • Vous utilisez l'entraînement distribué dans le job d'entraînement.

Les conteneurs d'entraînement prédéfinis et les conteneurs personnalisés sont compatibles. Obligatoire : Une version du SDK Vertex AI pour Python supérieure à la version 1.24.1 pour google-cloud-aiplatform est installée. Si vous effectuez l'entraînement avec TensorFlow, assurez-vous que la version protobuf inférieure à 4.0 est installée pour éviter les conflits.

Il existe deux options de journalisation des données dans Vertex AI Experiments : la journalisation automatique et la journalisation manuelle.

La journalisation automatique est recommandée si vous utilisez l'un des frameworks compatibles suivants : Fastai, Gluon, Keras, LightGBM, Pytorch Lightning, scikit-learn, Spark, Statsmodels, XGBoost. Si votre framework n'est pas compatible ou si vous souhaitez consigner des métriques personnalisées dans votre exécution de test, vous pouvez adapter manuellement votre script d'entraînement pour consigner les paramètres, les métriques et les artefacts.

Journalisation automatique des données

Pour activer la journalisation automatique, il vous suffit de définir enable_autolog=True. Pour ce faire, consultez from_local_script. Vous avez la possibilité de créer ou non une exécution de test. Si aucun nom de test n'est spécifié, un nom est créé pour vous.

Le SDK Vertex AI pour Python gère la création des ressources ExperimentRun pour vous.

Python

def create_custom_job_with_experiment_autologging_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    service_account: str,
    experiment: str,
    experiment_run: Optional[str] = None,
) -> None:
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket, experiment=experiment)

    job = aiplatform.CustomJob.from_local_script(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        enable_autolog=True,
    )

    job.run(
        service_account=service_account,
        experiment=experiment,
        experiment_run=experiment_run,
    )

  • project : l'ID de votre projet. Vous pouvez trouver ces ID de projet sur la page d'accueil de la console Google Cloud.
  • location : consultez la liste des emplacements disponibles
  • staging_bucket : nom que vous avez attribué à votre bucket, par exemple, my_bucket
  • display_name : nom défini par l'utilisateur du CustomJob
  • script_path : chemin d'accès au script qui est le point d'entrée de votre code d'entraînement et qui se trouve dans le répertoire de travail de votre système de fichiers local
  • container_uri : URI de l'image du conteneur d'entraînement peut être un conteneur d'entraînement prédéfini Vertex AI ou un conteneur personnalisé
  • service_account : consultez la section Créer un compte de service avec les autorisations requises
  • experiment : attribuez un nom à votre test. Le test doit comporter une instance TensorBoard. Pour trouver la liste des tests dans la console Google Cloud, sélectionnez Tests dans le menu de navigation.
  • experiment_run (facultatif) : spécifiez un nom d'exécution. S'il n'est pas spécifiée, une exécution est créée automatiquement.

Journalisation manuelle des données

Utilisez l'option de journalisation manuelle des données pour intégrer votre script d'entraînement.

Voici comment modifier le script d'entraînement :

import os
import pickle
import pandas as pd
from sklearn.linear_model import LinearRegression
# To use manual logging APIs, import aiplatform
from google.cloud import aiplatform

# Create Dataset
data = {'A': [1.1,2.2,4.1,5.2],
        'B': [200, 212.12, 22, 123],
        'Y': [1,0,1,0]}
df = pd.DataFrame(data)
X = df[['A', 'B']]
Y = df['Y']

# Train model
model = LinearRegression().fit(X, Y)

# Save the model to gcs
model_dir = os.getenv('AIP_MODEL_DIR')
model_gcs = model_dir.replace('gs://', '/gcs/')
model_name = 'model.pkl'
os.mkdir(model_gcs)
f = open(os.path.join(model_gcs, model_name), 'wb')
pickle.dump(model, f)

f = open(os.path.join(model_gcs, model_name), 'wb')
    pickle.dump(model, f)

# Call aiplatform's logging APIs to save data to Vertex AI Experiments.
params = model.get_params()
aiplatform.log_params(params)
metrics = {"training_accuracy": model.score(X,Y)}
aiplatform.log_metrics(metrics)

Vous avez la possibilité de créer ou non une exécution de test. Si aucun nom de test n'est spécifié, un nom est créé pour vous.

Pour en savoir plus, consultez la page Consigner manuellement des données dans une exécution de test.

Python

def create_custom_job_with_experiment_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    service_account: str,
    experiment: str,
    experiment_run: Optional[str] = None,
) -> None:
    aiplatform.init(
        project=project,
        location=location,
        staging_bucket=staging_bucket,
        experiment=experiment
    )

    job = aiplatform.CustomJob.from_local_script(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
    )

    job.run(
        service_account=service_account,
        experiment=experiment,
        experiment_run=experiment_run,
    )

  • project : l'ID de votre projet. Vous pouvez trouver ces ID de projet sur la page d'accueil de la console Google Cloud.
  • location : consultez la liste des emplacements disponibles.
  • staging_bucket : nom que vous avez attribué à votre bucket, par exemple, my_bucket
  • display_name : nom défini par l'utilisateur du CustomJob
  • script_path : chemin d'accès au script qui est le point d'entrée de votre code d'entraînement et qui se trouve dans le répertoire de travail de votre système de fichiers local
  • container_uri : URI de l'image du conteneur d'entraînement peut être un conteneur d'entraînement prédéfini Vertex AI ou un conteneur personnalisé Si vous utilisez un conteneur personnalisé, assurez-vous que google-cloud-aiplatform>=1.24.0 est installé.
  • service_account : consultez la section Créer un compte de service avec les autorisations requises
  • experiment : attribuez un nom à votre test. Pour trouver la liste des tests dans la console Google Cloud, sélectionnez Tests dans le menu de navigation.
  • experiment_run : spécifiez un nom d'exécution. S'il n'est pas spécifié, une exécution est créée automatiquement.

Afficher les paramètres et les métriques enregistrés automatiquement

Utilisez le SDK Vertex AI pour Python pour comparer les exécutions et obtenir des données d'exécution. La console Google Cloud permet de comparer facilement ces exécutions.

Étapes suivantes

Exemple de notebook pertinent