Devi eseguire il deployment di un modello in un endpoint prima di poterlo utilizzare per fornire previsioni online. Il deployment di un modello associa risorse fisiche per fornire previsioni online con bassa latenza.
Questa pagina descrive i passaggi da seguire per eseguire il deployment di un modello in un endpoint utilizzando la previsione online.
Prima di iniziare
Prima di eseguire il deployment del modello su un endpoint, esporta gli artefatti del modello per la previsione e assicurati di soddisfare tutti i prerequisiti indicati in quella pagina.
Crea un pool di risorse
Una risorsa personalizzata ResourcePool
ti consente di avere un controllo granulare sul comportamento del modello. Puoi definire impostazioni come le seguenti:
- Configurazioni di scalabilità automatica.
- Il tipo di macchina, che definisce i requisiti di CPU e memoria.
- Opzioni di acceleratore come le risorse GPU.
Il tipo di macchina è essenziale per la richiesta di specifica del pool di nodi che invii per creare il cluster di previsione.
Per il pool di risorse del modello sottoposto a deployment, il conteggio e il tipo di acceleratore
determinano l'utilizzo della GPU. Il tipo di macchina determina solo le risorse di CPU e memoria richieste. Per questo motivo, quando includi gli acceleratori GPU nella specifica
ResourcePool
, il campo machineType
controlla i requisiti di CPU e
memoria per il modello, mentre il campo acceleratorType
controlla
la GPU. Inoltre, il campo acceleratorCount
controlla il numero di
slice di GPU.
Per creare una risorsa personalizzata ResourcePool
:
Crea un file YAML che definisca la risorsa personalizzata
ResourcePool
. Gli esempi seguenti contengono file YAML per pool di risorse con acceleratori GPU (modelli basati su GPU) e senza acceleratori GPU (modelli basati su CPU):Modelli basati su GPU
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: ResourcePool metadata: name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE spec: resourcePoolID: RESOURCE_POOL_NAME enableContainerLogging: false dedicatedResources: machineSpec: # The system adds computing overhead to the nodes for mandatory components. # Choose a machineType value that allocates fewer CPU and memory resources # than those used by the nodes in the prediction cluster. machineType: a2-highgpu-1g-gdc acceleratorType: nvidia-a100-80gb # The accelerator count is a slice of the requested virtualized GPUs. # The value corresponds to one-seventh of 80 GB of GPUs for each count. acceleratorCount: 2 autoscaling: minReplica: 2 maxReplica: 10
Modelli basati su CPU
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: ResourcePool metadata: name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE spec: resourcePoolID: RESOURCE_POOL_NAME enableContainerLogging: false dedicatedResources: machineSpec: # The system adds computing overhead to the nodes for mandatory components. # Choose a machineType value that allocates fewer CPU and memory resources # than those used by the nodes in the prediction cluster. machineType: n2-highcpu-8-gdc autoscaling: minReplica: 2 maxReplica: 10
Sostituisci quanto segue:
RESOURCE_POOL_NAME
: il nome che vuoi assegnare al file di definizioneResourcePool
.PROJECT_NAMESPACE
: il nome dello spazio dei nomi del progetto associato al cluster di previsione.
Modifica i valori nei campi
dedicatedResources
in base alle tue esigenze di risorse e a ciò che è disponibile nel cluster di previsione.Applica il file di definizione
ResourcePool
al cluster di previsione:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f RESOURCE_POOL_NAME.yaml
Sostituisci quanto segue:
PREDICTION_CLUSTER_KUBECONFIG
: il percorso del file kubeconfig nel cluster di previsione.RESOURCE_POOL_NAME
: il nome del file di definizioneResourcePool
.
Quando crei la risorsa personalizzata ResourcePool
, l'API Kubernetes e il
servizio webhook convalidano il file YAML e segnalano l'esito positivo o negativo. L'operatore di previsione esegue il provisioning e riserva le risorse dal pool di risorse quando esegui il deployment dei modelli su un endpoint.
Esegui il deployment del modello in un endpoint
Se hai un pool di risorse, puoi eseguire il deployment di più modelli in un endpoint e di un modello in più endpoint. Esegui il deployment di un modello di previsione che ha come target container supportati. A seconda che l'endpoint esista già o meno, scegli uno dei due metodi seguenti:
- Eseguire il deployment di un modello su un nuovo endpoint
- Eseguire il deployment di un modello in un endpoint esistente
Eseguire il deployment di un modello in un nuovo endpoint
Per eseguire il deployment di un modello di previsione in un nuovo endpoint:
Crea un file YAML che definisca una risorsa personalizzata
DeployedModel
:TensorFlow
Il seguente file YAML mostra una configurazione di esempio per un modello TensorFlow:
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: # The endpoint path structure is endpoints/<endpoint-id> endpointPath: endpoints/PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/tensorflow artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: img-detection-model modelDisplayName: my_img_detection_model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/img-detection-model/1 # The model version ID must match the name of the first folder in # the artifactLocation bucket, inside the 'tensorflow' folder. # For example, if the bucket path is # s3://my-prediction-bucket/tensorflow/1/, # then the value for the model version ID is "1". modelVersionID: "1" modelContainerSpec: args: - --model_config_file=/models/models.config - --rest_api_port=8080 - --port=8500 - --file_system_poll_wait_seconds=30 - --model_config_file_poll_wait_seconds=30 command: - /bin/tensorflow_model_server # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/tf2-cpu.2-14:latest # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-14:latest imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-14:latest ports: - 8080 grpcPorts: - 8500 resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE
Sostituisci quanto segue:
DEPLOYED_MODEL_NAME
: il nome che vuoi assegnare al file di definizioneDeployedModel
.PROJECT_NAMESPACE
: il nome dello spazio dei nomi del progetto associato al cluster di previsione.PREDICTION_ENDPOINT
: il nome che vuoi assegnare al nuovo endpoint, ad esempiomy-img-prediction-endpoint
.PATH_TO_MODEL
: il percorso del modello nel bucket di archiviazione.RESOURCE_POOL_NAME
: il nome che hai assegnato al file di definizioneResourcePool
quando hai creato un pool di risorse per ospitare il modello.
Modifica i valori nei campi rimanenti in base al modello di previsione.
PyTorch
Il seguente file YAML mostra una configurazione di esempio per un modello PyTorch:
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: endpointPath: PREDICTION_ENDPOINT endpointInfo: id: PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/pytorch artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: "pytorch" modelDisplayName: my-pytorch-model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/pytorch/1 modelVersionID: "1" modelContainerSpec: # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/pytorch-cpu.2-4:latest # For GPU-based models: gcr.io/aiml/prediction/containers/pytorch-gpu.2-4:latest imageURI: gcr.io/aiml/prediction/containers/pytorch-cpu.2-4:latest ports: - 8080 grpcPorts: - 7070 sharesResourcePool: false resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE
Sostituisci quanto segue:
DEPLOYED_MODEL_NAME
: il nome che vuoi assegnare al file di definizioneDeployedModel
.PROJECT_NAMESPACE
: il nome dello spazio dei nomi del progetto associato al cluster di previsione.PREDICTION_ENDPOINT
: il nome che vuoi assegnare al nuovo endpoint, ad esempiomy-img-prediction-endpoint
.PATH_TO_MODEL
: il percorso del modello nel bucket di archiviazione.RESOURCE_POOL_NAME
: il nome che hai assegnato al file di definizioneResourcePool
quando hai creato un pool di risorse per ospitare il modello.
Modifica i valori nei campi rimanenti in base al modello di previsione.
Applica il file di definizione
DeployedModel
al cluster di previsione:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
Sostituisci quanto segue:
PREDICTION_CLUSTER_KUBECONFIG
: il percorso del file kubeconfig nel cluster di previsione.DEPLOYED_MODEL_NAME
: il nome del file di definizioneDeployedModel
.
Quando crei la risorsa personalizzata
DeployedModel
, l'API Kubernetes e il servizio webhook convalidano il file YAML e segnalano l'esito positivo o negativo. L'operatore di previsione riconcilia la risorsa personalizzataDeployedModel
e la pubblica nel cluster di previsione.Crea un file YAML che definisca una risorsa personalizzata
Endpoint
.Il seguente file YAML mostra una configurazione di esempio:
apiVersion: aiplatform.gdc.goog/v1 kind: Endpoint metadata: name: ENDPOINT_NAME namespace: PROJECT_NAMESPACE spec: createDns: true id: PREDICTION_ENDPOINT destinations: - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_2 namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081
Sostituisci quanto segue:
ENDPOINT_NAME
: il nome che vuoi assegnare al file di definizioneEndpoint
.PROJECT_NAMESPACE
: il nome dello spazio dei nomi del progetto associato al cluster di previsione.PREDICTION_ENDPOINT
: il nome del nuovo endpoint. Hai definito questo nome nel file di definizioneDeployedModel
.DEPLOYED_MODEL_NAME
: il nome che hai assegnato al file di definizioneDeployedModel
.
Puoi avere una o più destinazioni
serviceRef
. Se hai un secondo oggettoserviceRef
, aggiungilo al file YAML nel campodestinations
e sostituisciDEPLOYED_MODEL_NAME_2
con il nome che hai assegnato al secondo file di definizioneDeployedModel
che hai creato. Continua ad aggiungere o rimuovere oggettiserviceRef
in base alle tue esigenze, a seconda del numero di modelli che stai eseguendo il deployment.Imposta i campi
trafficPercentage
in base a come vuoi suddividere il traffico tra i modelli su questo endpoint. Modifica i valori nei campi rimanenti in base alle configurazioni degli endpoint.Applica il file di definizione
Endpoint
al cluster di previsione:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
Sostituisci
ENDPOINT_NAME
con il nome del file di definizioneEndpoint
.
Per ottenere il percorso dell'URL dell'endpoint per il modello di previsione, esegui questo comando:
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Sostituisci quanto segue:
PREDICTION_CLUSTER_KUBECONFIG
: il percorso del file kubeconfig nel cluster di previsione.PREDICTION_ENDPOINT
: il nome del nuovo endpoint.PROJECT_NAMESPACE
: il nome dello spazio dei nomi del progetto di previsione.
Eseguire il deployment di un modello in un endpoint esistente
Puoi eseguire il deployment di un modello su un endpoint esistente solo se in precedenza avevi eseguito il deployment di un altro modello su quell'endpoint quando era nuovo. Il sistema richiede questo passaggio precedente per creare l'endpoint.
Per eseguire il deployment di un modello di previsione in un endpoint esistente:
Crea un file YAML che definisca una risorsa personalizzata
DeployedModel
.Il seguente file YAML mostra una configurazione di esempio:
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: # The endpoint path structure is endpoints/<endpoint-id> endpointPath: endpoints/PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/tensorflow artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: img-detection-model-v2 modelDisplayName: my_img_detection_model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/img-detection-model/2 # The model version ID must match the name of the first folder in # the artifactLocation bucket, # inside the 'tensorflow' folder. # For example, if the bucket path is # s3://my-prediction-bucket/tensorflow/2/, # then the value for the model version ID is "2". modelVersionID: "2" modelContainerSpec: args: - --model_config_file=/models/models.config - --rest_api_port=8080 - --port=8500 - --file_system_poll_wait_seconds=30 - --model_config_file_poll_wait_seconds=30 command: - /bin/tensorflow_model_server # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/tf2-cpu.2-6:latest # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-6:latest imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-6:latest ports: - 8080 grpcPorts: - 8500 resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE
Sostituisci quanto segue:
DEPLOYED_MODEL_NAME
: il nome che vuoi assegnare al file di definizioneDeployedModel
.PROJECT_NAMESPACE
: il nome dello spazio dei nomi del progetto associato al cluster di previsione.PREDICTION_ENDPOINT
: il nome dell'endpoint esistente, ad esempiomy-img-prediction-endpoint
.PATH_TO_MODEL
: il percorso del modello nel bucket di archiviazione.RESOURCE_POOL_NAME
: il nome che hai assegnato al file di definizioneResourcePool
quando hai creato un pool di risorse per ospitare il modello.
Modifica i valori nei campi rimanenti in base al modello di previsione.
Applica il file di definizione
DeployedModel
al cluster di previsione:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
Sostituisci quanto segue:
PREDICTION_CLUSTER_KUBECONFIG
: il percorso del file kubeconfig nel cluster di previsione.DEPLOYED_MODEL_NAME
: il nome del file di definizioneDeployedModel
.
Quando crei la risorsa personalizzata
DeployedModel
, l'API Kubernetes e il servizio webhook convalidano il file YAML e segnalano l'esito positivo o negativo. L'operatore di previsione riconcilia la risorsa personalizzataDeployedModel
e la pubblica nel cluster di previsione.Mostra i dettagli della risorsa personalizzata
Endpoint
esistente:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG describe -f ENDPOINT_NAME.yaml
Sostituisci
ENDPOINT_NAME
con il nome del file di definizioneEndpoint
.Aggiorna il file YAML della definizione di risorsa personalizzata
Endpoint
aggiungendo un nuovo oggettoserviceRef
nel campodestinations
. Nel nuovo oggetto, includi il nome del servizio appropriato in base alla risorsa personalizzataDeployedModel
appena creata.Il seguente file YAML mostra una configurazione di esempio:
apiVersion: aiplatform.gdc.goog/v1 kind: Endpoint metadata: name: ENDPOINT_NAME namespace: PROJECT_NAMESPACE spec: createDns: true id: PREDICTION_ENDPOINT destinations: - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE trafficPercentage: 40 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_2 namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_3 namespace: PROJECT_NAMESPACE trafficPercentage: 10 grpcPort: 8501 httpPort: 8081
Sostituisci quanto segue:
ENDPOINT_NAME
: il nome del file di definizioneEndpoint
esistente.PROJECT_NAMESPACE
: il nome dello spazio dei nomi del progetto associato al cluster di previsione.PREDICTION_ENDPOINT
: il nome dell'endpoint esistente. Hai fatto riferimento a questo nome nel file di definizioneDeployedModel
.DEPLOYED_MODEL_NAME
: il nome di un file di definizioneDeployedModel
creato in precedenza.DEPLOYED_MODEL_NAME_2
: il nome che hai assegnato al file di definizioneDeployedModel
appena creato.
Puoi avere una o più destinazioni
serviceRef
. Se hai un terzo oggettoserviceRef
, aggiungilo al file YAML nel campodestinations
e sostituisciDEPLOYED_MODEL_NAME_3
con il nome che hai assegnato al terzo file di definizioneDeployedModel
che hai creato. Continua ad aggiungere o rimuovere oggettiserviceRef
in base alle tue esigenze, a seconda del numero di modelli che stai eseguendo il deployment.Imposta i campi
trafficPercentage
in base a come vuoi suddividere il traffico tra i modelli di questo endpoint. Modifica i valori nei campi rimanenti in base alle configurazioni degli endpoint.Applica il file di definizione
Endpoint
al cluster di previsione:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
Sostituisci
ENDPOINT_NAME
con il nome del file di definizioneEndpoint
.
Per ottenere il percorso dell'URL dell'endpoint per il modello di previsione, esegui questo comando:
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Sostituisci quanto segue:
PREDICTION_CLUSTER_KUBECONFIG
: il percorso del file kubeconfig nel cluster di previsione.PREDICTION_ENDPOINT
: il nome dell'endpoint.PROJECT_NAMESPACE
: il nome dello spazio dei nomi del progetto di previsione.