Esportazione di modelli

Questa pagina descrive come utilizzare AutoML Tables per esportare il modello personalizzato in Cloud Storage, scaricarlo sul server e quindi utilizzare Docker per renderlo disponibile per le previsioni.

Il modello esportato può essere eseguito solo su CPU con architettura x86 che supportano set di istruzioni AVX (Advanced Vector Extensions).

Introduzione

Per esportare il modello, segui questi passaggi:

  1. Esporta il modello.
  2. Esegui il server del modello.
  3. Richiedere previsioni.

Prima di iniziare

Prima di poter completare questa attività, devi aver completato le seguenti attività:

  • Configura il progetto come descritto nella sezione Prima di iniziare.
  • Addestra il modello che vuoi scaricare.
  • Installa e inizializza Google Cloud CLI sul server che utilizzerai per eseguire il modello esportato.
  • Installa Docker sul tuo server.
  • Esegui il pull dell'immagine Docker del server del modello AutoML Tables:

    sudo docker pull gcr.io/cloud-automl-tables-public/model_server
    

Esportazione di un modello

Non puoi esportare un modello creato prima del 23 agosto 2019.

Console

  1. Vai alla pagina AutoML Tables nella console Google Cloud.

    Vai alla pagina AutoML Tables

  2. Seleziona la scheda Modelli nel riquadro di navigazione a sinistra.

  3. Nel menu Altre azioni del modello da esportare, fai clic su Esporta modello.

    Menu Altre azioni con Esporta modello

  4. Seleziona o crea una cartella di Cloud Storage nella posizione che preferisci.

    Il bucket deve soddisfare i requisiti dei bucket.

    Non puoi esportare un modello in un bucket di primo livello. Devi usare almeno un livello di cartella.

  5. Fai clic su Esporta.

    Finestra di esportazione del modello

    Scaricherai il modello esportato sul tuo server nella sezione successiva.

REST

Puoi utilizzare il metodo models.export per esportare un modello in Cloud Storage.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • endpoint: automl.googleapis.com per la località globale e eu-automl.googleapis.com per la regione dell'UE.
  • project-id: l'ID del tuo progetto Google Cloud.
  • location: la località per la risorsa: us-central1 per il livello globale o eu per l'Unione europea.
  • model-id: l'ID del modello di cui vuoi eseguire il deployment. Ad esempio, TBL543.
  • gcs-destination : la tua cartella di destinazione in Cloud Storage. Ad esempio, gs://export-bucket/exports.

    Non puoi esportare un modello in un bucket di primo livello. Devi utilizzare almeno un livello della cartella.

Metodo HTTP e URL:

POST https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export

Corpo JSON richiesta:

{
  "outputConfig": {
    "modelFormat": "tf_saved_model",
    "gcsDestination": {
      "outputUriPrefix": "gcs-destination"
    }
  }
}

Per inviare la richiesta, scegli una delle seguenti opzioni:

arricciare

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-id" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export"

PowerShell

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-id" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/292381/locations/us-central1/operations/TBL543",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2019-12-30T18:23:47.728373Z",
    "updateTime": "2019-12-30T18:23:47.728373Z",
    "worksOn": [
      "projects/292381/locations/us-central1/models/TBL543"
    ],
    "exportModelDetails": {
      "outputInfo": {
        "gcsOutputDirectory": "gs://export-bucket/exports/model-export/tbl/tf_saved_model-automl_integration_test_model-2019-12-30T18:23:47.461Z/"
      }
    },
    "state": "RUNNING"
  }
}

L'esportazione di un modello è un'operazione a lunga esecuzione. Puoi eseguire il polling per verificare lo stato dell'operazione o attendere il ritorno dell'operazione. Scopri di più.

Esegui il server del modello

In questa attività scaricherai il modello esportato da Cloud Storage e avvierai il container Docker, in modo che il modello sia pronto a ricevere richieste di previsione.

Il modello deve essere eseguito all'interno di un container Docker.

Per eseguire il server del modello:

  1. Sulla macchina in cui eseguirai il modello, passa alla directory in cui vuoi salvare il modello esportato.

  2. Scarica il modello esportato:

    gsutil cp -r gcs-destination/* .

    Dove gcs-destination è il percorso della posizione del modello esportato in Cloud Storage. Ad esempio:

    gsutil cp -r gs://export-us-central1/models/* .
    

    Il modello viene copiato nella directory attuale, nel seguente percorso:

    ./model-export/tbl/tf_saved_model-<model-name>-<export-timestamp>

  3. Rinomina la directory che contiene il timestamp.

    mv model-export/tbl/tf_saved_model-<model-name>-<export-timestamp> model-export/tbl/<new-dir-name>
    

    Il formato del timestamp rende la directory non valida per Docker.

  4. Avvia il container Docker utilizzando il nome della directory appena creato:

    docker run -v `pwd`/model-export/tbl/new_folder_name:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server
    

Puoi arrestare il server del modello in qualsiasi momento utilizzando Ctrl-C.

Aggiornamento del container Docker del modello in corso...

Poiché scarichi il container Docker del modello del server quando esporti il modello, devi aggiornare esplicitamente il server del modello per ricevere aggiornamenti e correzioni di bug. Devi aggiornare periodicamente il server del modello, utilizzando il seguente comando:

    docker pull gcr.io/cloud-automl-tables-public/model_server

Generazione di previsioni dal modello esportato

Il server dei modelli nel container di immagini AutoML Tables gestisce le richieste di previsione e restituisce i risultati.

La previsione batch non è disponibile per i modelli esportati.

Formato dei dati di previsione

Fornisci i dati (campo payload) per la tua richiesta di previsione nel seguente formato JSON:

{ "instances": [ { "column_name_1": value, "column_name_2": value, … } , … ] }

I tipi di dati JSON richiesti dipendono dal tipo di dati AutoML Tables della colonna. Per maggiori dettagli, vedi Formato degli oggetti riga.

L'esempio seguente mostra una richiesta con tre colonne: una colonna categorica, un array numerico e uno struct. La richiesta include due righe.

{
  "instances": [
    {
      "categorical_col": "mouse",
      "num_array_col": [
        1,
        2,
        3
      ],
      "struct_col": {
        "foo": "piano",
        "bar": "2019-05-17T23:56:09.05Z"
      }
    },
    {
      "categorical_col": "dog",
      "num_array_col": [
        5,
        6,
        7
      ],
      "struct_col": {
        "foo": "guitar",
        "bar": "2019-06-17T23:56:09.05Z"
      }
    }
  ]
}

Esecuzione della richiesta di previsione

  1. Inserisci i dati della richiesta in un file di testo, ad esempio tmp/request.json.

    Il numero di righe di dati nella richiesta di previsione, chiamato dimensione mini-batch, influisce sulla latenza e sulla velocità effettiva di previsione. Maggiore è la dimensione del mini-batch, maggiori sono la latenza e la velocità effettiva. Per ridurre la latenza, utilizza una dimensione di mini-batch più ridotta. Per aumentare la velocità effettiva, aumenta la dimensione del mini-batch. Le dimensioni mini-batch più utilizzate sono 1, 32, 64, 128, 256, 512 e 1024.

  2. Richiedi la previsione:

    curl -X POST --data @/tmp/request.json http://localhost:8080/predict
    

Formato dei risultati della previsione

Il formato dei risultati dipende dal tipo del modello.

Risultati del modello di classificazione

I risultati della previsione per i modelli di classificazione (binari e multi-classe) restituiscono un punteggio di probabilità per ogni valore potenziale della colonna di destinazione. Devi determinare come vuoi utilizzare i punteggi. Ad esempio, per ottenere una classificazione binaria dai punteggi forniti, devi identificare un valore soglia. Se esistono due classi, "A" e "B", devi classificare l'esempio come "A" se il punteggio di "A" è maggiore della soglia scelta e "B" in caso contrario. Per i set di dati non bilanciati, la soglia potrebbe avvicinarsi al 100% o allo 0%.

Il payload dei risultati per un modello di classificazione è simile a questo esempio:

{
  "predictions": [
    {
      "scores": [
        0.539999994635582,
        0.2599999845027924,
        0.2000000208627896
      ],
      "classes": [
        "apple",
        "orange",
        "grape"
      ]
    },
    {
      "scores": [
        0.23999999463558197,
        0.35999998450279236,
        0.40000002086278963
      ],
      "classes": [
        "apple",
        "orange",
        "grape"
      ]
    }
  ]
}

Risultati del modello di regressione

Per ogni riga valida della richiesta di previsione viene restituito un valore previsto. Gli intervalli di previsione non vengono restituiti per i modelli esportati.

Il payload dei risultati per un modello di regressione è simile a questo esempio:

{
  "predictions": [
    3982.3662109375,
    3982.3662109375
  ]
}