Ajustar um modelo de classificação de imagens com dados personalizados nos pipelines da plataforma de agentes do Gemini Enterprise

Neste tutorial, mostramos como usar os pipelines do Gemini Enterprise Agent Platform para executar um fluxo de trabalho de ML completo, incluindo as seguintes tarefas:

  • importar e transformar dados;
  • ajustar um modelo de classificação de imagem do TFHub usando os dados transformados.
  • Importe o modelo treinado para o Model Registry da Gemini Enterprise Agent Platform.
  • Opcional: implante o modelo para veiculação on-line com a Vertex AI Inference.

Antes de começar

  1. Verifique se você concluiu as etapas de 1 a 3 em Configurar um projeto.

  2. Crie um ambiente Python isolado e instale o SDK da plataforma de agentes para Python.

  3. Instale o SDK do Kubeflow Pipelines:

    python3 -m pip install "kfp<2.0.0" "google-cloud-aiplatform>=1.16.0" --upgrade --quiet
    

Execute o pipeline de treinamento do modelo de ML

O exemplo de código faz o seguinte:

  • Carrega componentes de um repositório de componentes para serem usados como elementos básicos do pipeline.
  • Cria um pipeline criando tarefas de componente e transmitindo dados entre eles usando argumentos.
  • Envia o pipeline para execução nos pipelines da plataforma de agentes do Gemini Enterprise. Consulte os preços dos pipelines da plataforma de agentes do Gemini Enterprise.

Copie o exemplo de código a seguir no ambiente de desenvolvimento e execute-o.

Classificação de imagens

# python3 -m pip install "kfp<2.0.0" "google-cloud-aiplatform>=1.16.0" --upgrade --quiet
from kfp import components
from kfp.v2 import dsl

# %% Loading components
upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/component.yaml')
deploy_model_to_endpoint_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml')
transcode_imagedataset_tfrecord_from_csv_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/community-content/pipeline_components/image_ml_model_training/transcode_tfrecord_image_dataset_from_csv/component.yaml')
load_image_classification_model_from_tfhub_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/b5b65198a6c2ffe8c0fa2aa70127e3325752df68/community-content/pipeline_components/image_ml_model_training/load_image_classification_model/component.yaml')
preprocess_image_data_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/community-content/pipeline_components/image_ml_model_training/preprocess_image_data/component.yaml')
train_tensorflow_image_classification_model_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/community-content/pipeline_components/image_ml_model_training/train_image_classification_model/component.yaml')


# %% Pipeline definition
def image_classification_pipeline():
    class_names = ['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips']
    csv_image_data_path = 'gs://cloud-samples-data/ai-platform/flowers/flowers.csv'
    deploy_model = False

    image_data = dsl.importer(
        artifact_uri=csv_image_data_path, artifact_class=dsl.Dataset).output

    image_tfrecord_data = transcode_imagedataset_tfrecord_from_csv_op(
        csv_image_data_path=image_data,
        class_names=class_names
    ).outputs['tfrecord_image_data_path']

    loaded_model_outputs = load_image_classification_model_from_tfhub_op(
        class_names=class_names,
    ).outputs

    preprocessed_data = preprocess_image_data_op(
        image_tfrecord_data,
        height_width_path=loaded_model_outputs['image_size_path'],
    ).outputs

    trained_model = (train_tensorflow_image_classification_model_op(
        preprocessed_training_data_path = preprocessed_data['preprocessed_training_data_path'],
        preprocessed_validation_data_path = preprocessed_data['preprocessed_validation_data_path'],
        model_path=loaded_model_outputs['loaded_model_path']).
                   set_cpu_limit('96').
                   set_memory_limit('128G').
                   add_node_selector_constraint('cloud.google.com/gke-accelerator', 'NVIDIA_TESLA_A100').
                   set_gpu_limit('8').
                   outputs['trained_model_path'])

    vertex_model_name = upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op(
        model=trained_model,
    ).outputs['model_name']

    # Deploying the model might incur additional costs over time
    if deploy_model:
        vertex_endpoint_name = deploy_model_to_endpoint_op(
            model_name=vertex_model_name,
        ).outputs['endpoint_name']

pipeline_func = image_classification_pipeline

# %% Pipeline submission
if __name__ == '__main__':
    from google.cloud import aiplatform
    aiplatform.PipelineJob.from_pipeline_func(pipeline_func=pipeline_func).submit()

Observe o seguinte sobre o exemplo de código fornecido:

  • Um pipeline do Kubeflow é definido como uma função do Python.
  • As etapas do fluxo de trabalho do pipeline são criadas usando componentes do pipeline do Kubeflow. Ao usar as saídas de um componente como entrada de outro componente, o fluxo de trabalho do pipeline é definido como um gráfico. Por exemplo, a tarefa do componente preprocess_image_data_op depende da saída tfrecord_image_data_path da tarefa do componente transcode_imagedataset_tfrecord_from_csv_op.
  • Crie um pipeline executado nos pipelines da Agent Platform do Gemini Enterprise usando o SDK da Agent Platform para Python.

Monitorar o pipeline

No Google Cloud console, na seção "Plataforma de agentes", acesse a página Pipelines e abra a guia Execuções.

Acessar "Execuções do pipeline"

A seguir