Construire un pipeline

Agent Platform Pipelines vous permet d'orchestrer vos workflows de machine learning (ML) de manière sans serveur. Avant qu'Agent Platform Pipelines ne puisse orchestrer votre workflow de ML, vous devez décrire votre workflow en tant que pipeline. Les pipelines de ML sont des workflows de ML portables et évolutifs basés sur des conteneurs et Cloud de Confiance by S3NS des services.

Ce guide explique comment commencer à créer des pipelines de ML.

Quel SDK de pipeline dois-je utiliser ?

Agent Platform Pipelines peut exécuter des pipelines créés à l'aide de l'un des SDK suivants :

  • SDK Kubeflow Pipelines version 2.0 ou ultérieure

  • TensorFlow Extended version 0.30.0 ou ultérieure

Si vous utilisez TensorFlow dans un workflow de ML qui traite des téraoctets de données structurées ou de données textuelles, nous vous recommandons de créer votre pipeline à l'aide de TFX.

Pour les autres cas d'utilisation, nous vous recommandons de créer votre pipeline à l'aide du SDK Kubeflow Pipelines. La création d'un pipeline avec le SDK Kubeflow Pipelines vous permet de mettre en œuvre votre workflow en créant des composants personnalisés ou en réutilisant des composants prédéfinis, tels que les Cloud de Confiance by S3NS composants de pipeline. Cloud de Confiance by S3NS Les composants de pipeline facilitent l'utilisation de services Gemini Enterprise Agent Platform tels qu'AutoML dans votre pipeline.

Ce guide explique comment créer des pipelines à l'aide du SDK Kubeflow Pipelines.

Avant de commencer

Avant de créer et d'exécuter des pipelines, suivez les instructions ci-dessous pour configurer votre projet et votre environnement de développement. Cloud de Confiance

  1. Pour préparer votre Cloud de Confiance projet à exécuter des pipelines de ML, suivez les instructions du guide de configuration de votre Cloud de Confiance projet.

  2. Installez la version 2 ou une version ultérieure du SDK Kubeflow Pipelines.

    pip install --upgrade "kfp>=2,<3"
    
  1. Pour utiliser le client Python Gemini Enterprise Agent Platform dans vos pipelines, installez les bibliothèques clientes Gemini Enterprise Agent Platform version 1.7 ou ultérieure.

  2. Pour utiliser les services Gemini Enterprise Agent Platform dans vos pipelines, installez le Cloud de Confiance by S3NS SDK.

Premiers pas pour créer un pipeline

Pour orchestrer votre workflow de ML sur Agent Platform Pipelines, vous devez d'abord décrire votre workflow en tant que pipeline. L'exemple suivant montre comment utiliser les Cloud de Confiance by S3NS composants de pipeline avec Gemini Enterprise Agent Platform pour créer un ensemble de données, entraîner un modèle à l'aide d'AutoML et déployer le modèle entraîné pour les prédictions.

Avant d'exécuter l'exemple de code suivant, vous devez configurer l'authentification.

Comment configurer l'authentification

Pour configurer l'authentification, vous devez créer une clé de compte de service et définir une variable d'environnement pour le chemin d'accès à la clé de compte de service.

  1. Créez un compte de service :

    1. Dans la Cloud de Confiance console, accédez à la page Créer un compte de service.

      Accéder à la page "Créer un compte de service"

    2. Dans le champ Nom du compte de service, saisissez un nom.
    3. Facultatif : Dans le champ Description du compte de service, saisissez une description.
    4. Cliquez sur Créer.
    5. Cliquez sur le champ Sélectionner un rôle. Sous Tous les rôles, sélectionnez Gemini Enterprise Agent Platform > Utilisateur Agent Platform.
    6. Cliquez sur Terminé pour créer le compte de service.

      Ne fermez pas la fenêtre de votre navigateur. Vous en aurez besoin lors de la tâche suivante.

  2. Créez une clé de compte de service pour l'authentification :

    1. Dans la Cloud de Confiance console, cliquez sur l'adresse e-mail du compte de service que vous avez créé.
    2. Cliquez sur Keys (Clés).
    3. Cliquez sur AJOUTER UNE CLÉ -> Créer une clé.
    4. Cliquez sur Créer. Un fichier de clé JSON est téléchargé sur votre ordinateur.
    5. Cliquez sur Fermer.
  3. Accordez à votre nouveau compte de service l'accès au compte de service que vous utilisez pour exécuter des pipelines.
    1. Cliquez sur pour revenir à la liste des comptes de service.
    2. Cliquez sur le nom du compte de service que vous utilisez pour exécuter des pipelines. La page Détails du compte de service s'affiche.

      Si vous avez suivi les instructions du guide de configuration de votre projet pour Gemini Enterprise Agent Platform Pipelines, il s'agit du compte de service que vous avez créé à l'étape Configurer un compte de service avec des autorisations précises. Sinon, Gemini Enterprise Agent Platform utilise le compte de service Compute Engine par défaut pour exécuter des pipelines. Le compte de service Compute Engine par défaut service est nommé comme suit : PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com

    3. Cliquez sur l'onglet Autorisations.
    4. Cliquez sur Accorder l'accès. Le panneau Ajouter des comptes principaux s'affiche.
    5. Dans la zone Nouveaux comptes principaux, saisissez l'adresse e-mail du compte de service que vous avez créé à une étape précédente.
    6. Dans la liste déroulante Rôle, sélectionnez Comptes de service > Utilisateur du compte de service.
    7. Cliquez sur Enregistrer.
  4. Définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS pour qu'elle pointe vers le chemin d'accès au fichier JSON contenant la clé de votre compte de service. Cette variable ne s'applique qu'à la session d'interface système actuelle. Par conséquent, si vous ouvrez une nouvelle session, vous devez la définir à nouveau.

    Exemple : Linux ou macOS

    Remplacez [PATH] par le chemin d'accès au fichier JSON contenant votre clé de compte de service.

    export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

    Exemple :

    export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

    Exemple : Windows

    Remplacez [PATH] par le chemin du fichier JSON contenant la clé de votre compte de service et [FILE_NAME] par le nom du fichier.

    Avec PowerShell :

    $env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

    Exemple :

    $env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\[FILE_NAME].json"

    Avec l'invite de commande :

    set GOOGLE_APPLICATION_CREDENTIALS=[PATH]

Définir votre workflow à l'aide du package DSL des pipelines Kubeflow

Le package kfp.dsl contient le langage spécifique au domaine (DSL pour "Domain-Specific Language") que vous pouvez utiliser pour définir et interagir avec les pipelines et les composants.

Les composants du pipeline Kubeflow sont des fonctions de fabrique qui créent des étapes de pipeline. Chaque composant décrit les entrées, les sorties et la mise en œuvre du composant. Par exemple, dans l'exemple de code suivant, ds_op est un composant.

Les composants sont utilisés pour créer des étapes de pipeline. Lorsqu'un pipeline s'exécute, les étapes sont exécutées à mesure que les données dont elles dépendent deviennent disponibles. Par exemple, un composant d'entraînement peut utiliser un fichier CSV en entrée et l'utiliser pour entraîner un modèle.

import kfp
from google.cloud import aiplatform
from google_cloud_pipeline_components.v1.dataset import ImageDatasetCreateOp
from google_cloud_pipeline_components.v1.automl.training_job import AutoMLImageTrainingJobRunOp
from google_cloud_pipeline_components.v1.endpoint import EndpointCreateOp, ModelDeployOp

project_id = PROJECT_ID
pipeline_root_path = PIPELINE_ROOT

# Define the workflow of the pipeline.
@kfp.dsl.pipeline(
    name="automl-image-training-v2",
    pipeline_root=pipeline_root_path)
def pipeline(project_id: str):
    # The first step of your workflow is a dataset generator.
    # This step takes a Google Cloud Pipeline Component, providing the necessary
    # input arguments, and uses the Python variable `ds_op` to define its
    # output. Note that here the `ds_op` only stores the definition of the
    # output but not the actual returned object from the execution. The value
    # of the object is not accessible at the dsl.pipeline level, and can only be
    # retrieved by providing it as the input to a downstream component.
    ds_op = ImageDatasetCreateOp(
        project=project_id,
        display_name="flowers",
        gcs_source="gs://cloud-samples-data/vision/automl_classification/flowers/all_data_v2.csv",
        import_schema_uri=aiplatform.schema.dataset.ioformat.image.single_label_classification,
    )

    # The second step is a model training component. It takes the dataset
    # outputted from the first step, supplies it as an input argument to the
    # component (see `dataset=ds_op.outputs["dataset"]`), and will put its
    # outputs into `training_job_run_op`.
    training_job_run_op = AutoMLImageTrainingJobRunOp(
        project=project_id,
        display_name="train-iris-automl-mbsdk-1",
        prediction_type="classification",
        model_type="CLOUD",
        dataset=ds_op.outputs["dataset"],
        model_display_name="iris-classification-model-mbsdk",
        training_fraction_split=0.6,
        validation_fraction_split=0.2,
        test_fraction_split=0.2,
        budget_milli_node_hours=8000,
    )

    # The third and fourth step are for deploying the model.
    create_endpoint_op = EndpointCreateOp(
        project=project_id,
        display_name = "create-endpoint",
    )

    model_deploy_op = ModelDeployOp(
        model=training_job_run_op.outputs["model"],
        endpoint=create_endpoint_op.outputs['endpoint'],
        automatic_resources_min_replica_count=1,
        automatic_resources_max_replica_count=1,
    )

Remplacez les éléments suivants :

  • PROJECT_ID : projet dans lequel ce pipeline s'exécute. Cloud de Confiance
  • PIPELINE_ROOT_PATH : spécifiez un URI Cloud Storage auquel votre compte de service de pipelines peut accéder. Les artefacts des exécutions de votre pipeline sont stockés dans la racine du pipeline. L'URI Cloud Storage doit commencer par gs://.

    La racine du pipeline peut être définie en tant qu'argument de l'annotation @kfp.dsl.pipeline sur la fonction du pipeline, ou elle peut être définie lorsque vous appelez create_run_from_job_spec pour créer une exécution de pipeline.

Compiler votre pipeline dans un fichier YAML

Une fois le workflow de votre pipeline défini, vous pouvez le compiler au format YAML. Le fichier YAML inclut toutes les informations concernant l'exécution de votre pipeline sur Agent Platform Pipelines.

from kfp import compiler

compiler.Compiler().compile(
    pipeline_func=pipeline,
    package_path='image_classif_pipeline.yaml'
)

Envoyer votre pipeline pour exécution

Une fois le workflow du pipeline compilé au format YAML, vous pouvez utiliser le client Python Gemini Enterprise Agent Platform pour envoyer et exécuter votre pipeline.

import google.cloud.aiplatform as aip

# Before initializing, make sure to set the GOOGLE_APPLICATION_CREDENTIALS
# environment variable to the path of your service account.
aip.init(
    project=project_id,
    location=PROJECT_REGION,
)

# Prepare the pipeline job
job = aip.PipelineJob(
    display_name="automl-image-training-v2",
    template_path="image_classif_pipeline.yaml",
    pipeline_root=pipeline_root_path,
    parameter_values={
        'project_id': project_id
    }
)

job.submit()

Remplacez les éléments suivants :

  • PROJECT_REGION : région dans laquelle ce pipeline s'exécute.

Dans l'exemple précédent :

  1. Un pipeline Kubeflow est défini comme une fonction Python. La fonction est annotée avec le décorateur @kfp.dsl.pipeline, qui spécifie le nom et le chemin d'accès racine du pipeline. Le chemin d'accès racine du pipeline est l'emplacement où sont stockés les artefacts du pipeline.
  2. Les étapes du workflow du pipeline sont créées à l'aide des Cloud de Confiance by S3NS composants de pipeline. En utilisant les sorties d'un composant comme entrée d'un autre composant, vous définissez le workflow du pipeline sous forme de graphe. Par exemple, training_job_run_op dépend du résultat dataset de ds_op.
  3. Vous allez compiler le pipeline à l'aide de kfp.compiler.Compiler.
  4. Vous créez une exécution de pipeline sur Agent Platform Pipelines à l'aide du client Python Gemini Enterprise Agent Platform. Lorsque vous exécutez un pipeline, vous pouvez remplacer son nom et son chemin d'accès racine. Les exécutions de pipeline peuvent être regroupées à l'aide du nom du pipeline. Remplacer le nom du pipeline peut vous aider à distinguer les exécutions de pipeline de production et de test.

Pour en savoir plus sur la création de pipelines, consultez la section Créer des pipelines Kubeflow, puis suivez les exemples et les tutoriels.

Tester un pipeline en local (facultatif)

Une fois que vous avez défini vos pipelines et vos composants, vous pouvez tester le code du composant en l'exécutant dans votre environnement de création local. En exécutant votre pipeline ou un composant localement, vous pouvez identifier et déboguer les problèmes potentiels avant de créer une exécution de pipeline dans un environnement distant, tel qu’Agent Platform Pipelines. Pour en savoir plus sur l'exécution des pipelines et des composants localement, consultez la section Exécution locale dans la documentation KFP.

Cette page vous explique comment définir et exécuter un pipeline en deux tâches.

Configurer votre environnement local

  1. Facultatif : Installez Docker.

  2. Utilisez l'exemple de code suivant pour définir un pipeline de démarrage :

    from kfp import dsl
    
    # Define a component to add two numbers.
    @dsl.component
    def add(a: int, b: int) -> int:
        return a + b
    
    # Define a simple pipeline using the component.
    @dsl.pipeline
    def addition_pipeline(x: int, y: int, z: int) -> int:
        task1 = add(a=x, b=y)
        task2 = add(a=task1.output, b=z)
        return task2.output
    

Appeler une exécution locale

Initialisez une session locale à l'aide de la fonction local.init(). Lorsque vous utilisez local.init(), le SDK KFP exécute localement vos pipelines et composants lorsque vous les appelez.

Lorsque vous utilisez local.init(), vous devez spécifier un type d'exécuteur. Le type d'exécuteur indique comment KFP doit exécuter chaque tâche.

Utilisez l'exemple suivant pour spécifier le type d'exécuteur DockerRunner pour exécuter chaque tâche dans un conteneur. Pour plus d'informations sur les exécuteurs locaux compatibles avec KFP, consultez la page Exécuteurs locaux dans la documentation KFP.

from kfp import local

local.init(runner=local.DockerRunner())

pipeline_task = addition_pipeline(x=1, y=2, z=3)

Utilisez le code suivant pour afficher le résultat de la tâche de pipeline lors de l'exécution locale :

print(f'Result: {pipeline_task.output}')

Créer des pipelines Kubeflow

Procédez comme suit pour créer un pipeline.

  1. Concevez votre pipeline sous la forme d'une série de composants. Pour favoriser la réutilisation, chaque composant doit avoir une seule responsabilité. Dans la mesure du possible, concevez votre pipeline de manière à réutiliser des composants éprouvés, tels que les Cloud de Confiance by S3NS composants de pipeline.

    Apprenez-en plus sur la conception de pipelines.

  2. Créez tous les composants personnalisés nécessaires à la mise en œuvre de votre workflow de ML à l'aide du SDK Kubeflow Pipelines. Les composants sont des ensembles de code autonomes qui effectuent une étape de votre workflow de ML. Utilisez les options suivantes pour créer vos composants de pipeline.

  3. Créez le pipeline en tant que fonction Python.

    En savoir plus sur la définition de votre pipeline en tant que fonction Python.

  4. Utilisez le compilateur du SDK Kubeflow Pipelines pour compiler votre pipeline.

    from kfp import compiler
    
    compiler.Compiler().compile(
        pipeline_func=PIPELINE_FUNCTION,
        package_path=PIPELINE_PACKAGE_PATH)
    

    Remplacez les éléments suivants :

    • PIPELINE_FUNCTION : nom de la fonction de votre pipeline.
    • PIPELINE_PACKAGE_PATH : chemin d'accès où stocker votre pipeline compilé.
  5. Exécutez votre pipeline à l'aide de la Cloud de Confiance console ou de Python.

Accéder aux Cloud de Confiance by S3NS ressources dans un pipeline

Si vous ne spécifiez pas de compte de service lorsque vous exécutez un pipeline, Agent Platform Pipelines utilise le compte de service Compute Engine par défaut pour exécuter le pipeline. Agent Platform Pipelines utilise également le compte de service d'une exécution de pipeline pour autoriser votre pipeline à accéder aux Cloud de Confiance by S3NS ressources. Le compte de service Compute Engine par défaut dispose du rôle d'éditeur de projet par défaut. Cela peut accorder à vos pipelines un accès excessif aux Cloud de Confiance by S3NS ressources de votre Cloud de Confiance projet.

Nous vous recommandons de créer un compte de service pour exécuter vos pipelines, puis d'accorder à ce compte des autorisations précises sur les Cloud de Confiance by S3NS ressources nécessaires à l'exécution de votre pipeline.

Obtenez plus d'informations sur l'utilisation de Cloud Identity and Access Management pour créer un compte de service et gérer l'accès accordé à un compte de service.

Maintenir vos pipelines à jour

Les clients du SDK et les images de conteneur que vous utilisez pour créer et exécuter des pipelines sont régulièrement mis à jour vers les nouvelles versions afin de corriger les failles de sécurité et d'ajouter de nouvelles fonctionnalités. Pour maintenir vos pipelines à jour avec la dernière version, nous vous recommandons de procéder comme suit :

Étape suivante