Créer un point de terminaison public

Pour déployer un modèle à l'aide de la gcloud CLI ou de l'API Vertex AI, vous devez d'abord créer un point de terminaison public.

Si vous l'avez déjà fait, vous pouvez ignorer cette étape et passer à la section Déployer un modèle à l'aide de la gcloud CLI ou de l'API Vertex AI.

Ce document décrit comment créer un point de terminaison public.

Le délai avant expiration par défaut des requêtes pour un point de terminaison public dédié est de 10 minutes. Dans l'API Vertex AI et le SDK Vertex AI pour Python, vous avez la possibilité de spécifier un autre délai avant expiration en ajoutant un objet clientConnectionConfig contenant une nouvelle valeur inferenceTimeout, comme illustré dans l'exemple suivant. La valeur maximale du délai avant expiration est de 3 600 secondes (1 heure).

ConsoleGoogle Cloud

  1. Dans la section Vertex AI de la console Google Cloud , accédez à la page Prédiction en ligne.
    Accéder à la page "Prédiction en ligne"
  2. Cliquez sur  Créer.
  3. Dans le volet Nouveau point de terminaison :
    1. Saisissez le nom du point de terminaison.
    2. Sélectionnez Standard pour le type d'accès.
    3. Cochez la case Activer le DNS dédié.
    4. Cliquez sur Continuer.
  4. Cliquez sur OK.

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • LOCATION_ID : votre région.
  • PROJECT_ID : ID de votre projet.
  • ENDPOINT_NAME : nom à afficher pour le point de terminaison.
  • INFERENCE_TIMEOUT_SECS (facultatif) : nombre de secondes dans le champ inferenceTimeout facultatif.

Méthode HTTP et URL :

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints

Corps JSON de la requête :

{
  "display_name": "ENDPOINT_NAME"
  "dedicatedEndpointEnabled": true,
  "clientConnectionConfig": {
    "inferenceTimeout": {
      "seconds": INFERENCE_TIMEOUT_SECS
    }
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateEndpointOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-11-05T17:45:42.812656Z",
      "updateTime": "2020-11-05T17:45:42.812656Z"
    }
  }
}
Vous pouvez interroger l'état de l'opération jusqu'à ce que la réponse indique "done": true.

Python

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Python.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • LOCATION_ID : région dans laquelle vous utilisez Vertex AI.
  • ENDPOINT_NAME : nom à afficher pour le point de terminaison.
  • INFERENCE_TIMEOUT_SECS (facultatif) : nombre de secondes dans le champ inference_timeout facultatif.
from google.cloud import aiplatform

PROJECT_ID = "PROJECT_ID"
LOCATION = "LOCATION_ID"
ENDPOINT_NAME = "ENDPOINT_NAME"
INFERENCE_TIMEOUT_SECS = "INFERENCE_TIMEOUT_SECS"

aiplatform.init(
    project=PROJECT_ID,
    location=LOCATION,
    api_endpoint=ENDPOINT_NAME,
)

dedicated_endpoint = aiplatform.Endpoint.create(
    display_name=DISPLAY_NAME,
    dedicated_endpoint_enabled=True,
    sync=True,
    inference_timeout=INFERENCE_TIMEOUT_SECS,
)

Configuration du délai avant expiration de l'inférence

Le délai avant expiration par défaut pour les requêtes d'inférence est de 600 secondes (10 minutes). Ce délai est appliqué si aucun délai d'expiration de l'inférence n'est explicitement spécifié lors de la création du point de terminaison. La valeur maximale autorisée est d'une heure.

Pour configurer le délai avant expiration de l'inférence lors de la création d'un point de terminaison, utilisez le paramètre inference_timeout, comme illustré dans l'extrait de code suivant :

timeout_endpoint = aiplatform.Endpoint.create(
    display_name="dedicated-endpoint-with-timeout",
    dedicated_endpoint_enabled=True,
    inference_timeout=1800,  # Unit: Seconds
)

Vous pouvez modifier le paramètre de délai avant expiration de l'inférence après la création du point de terminaison à l'aide de la méthode EndpointService.UpdateEndpointLongRunning. La méthode EndpointService.UpdateEndpoint n'est pas compatible avec cette modification.

Journalisation des requêtes et réponses

La fonctionnalité de journalisation des requêtes et réponses capture les interactions avec l'API. Toutefois, pour respecter les limites de BigQuery, les charges utiles de plus de 10 Mo seront exclues des journaux.

Pour activer et configurer la journalisation des requêtes et des réponses lors de la création d'un point de terminaison, utilisez les paramètres suivants, comme illustré dans l'extrait de code suivant :

logging_endpoint = aiplatform.Endpoint.create(
    display_name="dedicated-endpoint-with-logging",
    dedicated_endpoint_enabled=True,
    enable_request_response_logging=True,
    request_response_logging_sampling_rate=1.0,  # Default: 0.0
    request_response_logging_bq_destination_table="bq://test_logging",
    # If not set, a new BigQuery table will be created with the name:
    # bq://{project_id}.logging_{endpoint_display_name}_{endpoint_id}.request_response_logging
)

Vous pouvez modifier les paramètres de journalisation des requêtes et réponses après la création du point de terminaison à l'aide de la méthode EndpointService.UpdateEndpointLongRunning. La méthode EndpointService.UpdateEndpoint n'est pas compatible avec cette modification.

Créer un point de terminaison public partagé

ConsoleGoogle Cloud

  1. Dans la section Vertex AI de la console Google Cloud , accédez à la page Prédiction en ligne.
    Accéder à la page "Prédiction en ligne"
  2. Cliquez sur  Créer.
  3. Dans le volet Nouveau point de terminaison :
    1. Saisissez le nom du point de terminaison.
    2. Sélectionnez Standard pour le type d'accès.
    3. Cliquez sur Continuer.
  4. Cliquez sur OK.

gcloud

L'exemple suivant utilise la commande gcloud ai endpoints create :

gcloud ai endpoints create \
    --region=LOCATION_ID \
    --display-name=ENDPOINT_NAME

Remplacez les éléments suivants :

  • LOCATION_ID : région dans laquelle vous utilisez Vertex AI.
  • ENDPOINT_NAME : nom à afficher pour le point de terminaison.

La création du point de terminaison par l'outil Google Cloud CLI peut prendre quelques secondes.

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • LOCATION_ID : votre région.
  • PROJECT_ID : ID de votre projet.
  • ENDPOINT_NAME : nom à afficher pour le point de terminaison.

Méthode HTTP et URL :

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints

Corps JSON de la requête :

{
  "display_name": "ENDPOINT_NAME"
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateEndpointOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-11-05T17:45:42.812656Z",
      "updateTime": "2020-11-05T17:45:42.812656Z"
    }
  }
}
Vous pouvez interroger l'état de l'opération jusqu'à ce que la réponse indique "done": true.

Terraform

L'exemple suivant utilise la ressource Terraform google_vertex_ai_endpoint pour créer un point de terminaison.

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez Commandes Terraform de base.

# Endpoint name must be unique for the project
resource "random_id" "endpoint_id" {
  byte_length = 4
}

resource "google_vertex_ai_endpoint" "default" {
  name         = substr(random_id.endpoint_id.dec, 0, 10)
  display_name = "sample-endpoint"
  description  = "A sample Vertex AI endpoint"
  location     = "us-central1"
  labels = {
    label-one = "value-one"
  }
}

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java décrites dans le guide de démarrage rapide de Vertex AI sur l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Java.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.aiplatform.v1.CreateEndpointOperationMetadata;
import com.google.cloud.aiplatform.v1.Endpoint;
import com.google.cloud.aiplatform.v1.EndpointServiceClient;
import com.google.cloud.aiplatform.v1.EndpointServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateEndpointSample {

  public static void main(String[] args)
      throws IOException, InterruptedException, ExecutionException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "YOUR_PROJECT_ID";
    String endpointDisplayName = "YOUR_ENDPOINT_DISPLAY_NAME";
    createEndpointSample(project, endpointDisplayName);
  }

  static void createEndpointSample(String project, String endpointDisplayName)
      throws IOException, InterruptedException, ExecutionException, TimeoutException {
    EndpointServiceSettings endpointServiceSettings =
        EndpointServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (EndpointServiceClient endpointServiceClient =
        EndpointServiceClient.create(endpointServiceSettings)) {
      String location = "us-central1";
      LocationName locationName = LocationName.of(project, location);
      Endpoint endpoint = Endpoint.newBuilder().setDisplayName(endpointDisplayName).build();

      OperationFuture<Endpoint, CreateEndpointOperationMetadata> endpointFuture =
          endpointServiceClient.createEndpointAsync(locationName, endpoint);
      System.out.format("Operation name: %s\n", endpointFuture.getInitialFuture().get().getName());
      System.out.println("Waiting for operation to finish...");
      Endpoint endpointResponse = endpointFuture.get(300, TimeUnit.SECONDS);

      System.out.println("Create Endpoint Response");
      System.out.format("Name: %s\n", endpointResponse.getName());
      System.out.format("Display Name: %s\n", endpointResponse.getDisplayName());
      System.out.format("Description: %s\n", endpointResponse.getDescription());
      System.out.format("Labels: %s\n", endpointResponse.getLabelsMap());
      System.out.format("Create Time: %s\n", endpointResponse.getCreateTime());
      System.out.format("Update Time: %s\n", endpointResponse.getUpdateTime());
    }
  }
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js décrites dans le guide de démarrage rapide de Vertex AI sur l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Node.js.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

/**
 * TODO(developer): Uncomment these variables before running the sample.\
 * (Not necessary if passing values as arguments)
 */

// const endpointDisplayName = 'YOUR_ENDPOINT_DISPLAY_NAME';
// const project = 'YOUR_PROJECT_ID';
// const location = 'YOUR_PROJECT_LOCATION';

// Imports the Google Cloud Endpoint Service Client library
const {EndpointServiceClient} = require('@google-cloud/aiplatform');

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: 'us-central1-aiplatform.googleapis.com',
};

// Instantiates a client
const endpointServiceClient = new EndpointServiceClient(clientOptions);

async function createEndpoint() {
  // Configure the parent resource
  const parent = `projects/${project}/locations/${location}`;
  const endpoint = {
    displayName: endpointDisplayName,
  };
  const request = {
    parent,
    endpoint,
  };

  // Get and print out a list of all the endpoints for this resource
  const [response] = await endpointServiceClient.createEndpoint(request);
  console.log(`Long running operation : ${response.name}`);

  // Wait for operation to complete
  await response.promise();
  const result = response.result;

  console.log('Create endpoint response');
  console.log(`\tName : ${result.name}`);
  console.log(`\tDisplay name : ${result.displayName}`);
  console.log(`\tDescription : ${result.description}`);
  console.log(`\tLabels : ${JSON.stringify(result.labels)}`);
  console.log(`\tCreate time : ${JSON.stringify(result.createTime)}`);
  console.log(`\tUpdate time : ${JSON.stringify(result.updateTime)}`);
}
createEndpoint();

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.

def create_endpoint_sample(
    project: str,
    display_name: str,
    location: str,
):
    aiplatform.init(project=project, location=location)

    endpoint = aiplatform.Endpoint.create(
        display_name=display_name,
        project=project,
        location=location,
    )

    print(endpoint.display_name)
    print(endpoint.resource_name)
    return endpoint

Étapes suivantes