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

  • vous envoyez un job d'entraînement via la console Google Cloud ou la Google Cloud CLI ;
  • vous utilisez un 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. Une version du SDK Vertex AI pour Python ultérieure à la 1.24.1 pour google-cloud-aiplatform doit obligatoirement être installée. Si vous effectuez l'entraînement avec TensorFlow, assurez-vous qu'une version protobuf antérieure à la 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 et 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 : . Vous pouvez le trouver 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 du CustomJob défini par l'utilisateur.
  • 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 pouvant être un conteneur d'entraînement prédéfini Vertex AI ou un conteneur personnalisé.
  • service_account : consultez Créer un compte de service avec les autorisations requises.
  • experiment : spécifiez le nom de votre test. Le test doit comporter une instance TensorBoard. Pour accéder à la liste des tests dans la console Google Cloud , sélectionnez Tests dans le menu de navigation.
  • experiment_run (facultatif) : spécifiez le nom de l'exécution. S'il n'est pas spécifié, 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.joblib'
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 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 : . Vous pouvez le trouver 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 du CustomJob défini par l'utilisateur.
  • 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 pouvant ê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 Créer un compte de service avec les autorisations requises.
  • experiment : spécifiez le nom de votre test. Pour accéder à la liste des tests dans la console Google Cloud , sélectionnez Tests dans le menu de navigation.
  • experiment_run : spécifiez le nom de l'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 leurs données. La consoleGoogle Cloud permet de comparer facilement les exécutions.

Étape suivante

Exemple de notebook associé