Implante um modelo em um endpoint antes de usá-lo para exibir previsões on-line. A implantação de um modelo associa recursos físicos para exibir previsões on-line com baixa latência.
Nesta página, descrevemos as etapas que você precisa seguir para implantar um modelo em um endpoint usando a previsão on-line.
Antes de começar
Antes de implantar o modelo em um endpoint, exporte os artefatos do modelo para previsão e verifique se você atende a todos os pré-requisitos dessa página.
Criar um pool de recursos
Um recurso personalizado ResourcePool
permite que você tenha controle refinado sobre o comportamento do modelo. É possível definir configurações como:
- Configurações de escalonamento automático.
- O tipo de máquina, que define os requisitos de CPU e memória.
- Opções de acelerador, como recursos de GPU.
O tipo de máquina é essencial para a solicitação de especificação do pool de nós que você envia para criar o cluster de previsão.
Para o pool de recursos do modelo implantado, a contagem e o tipo de acelerador determinam o uso da GPU. O tipo de máquina apenas determina os recursos de CPU e memória solicitados. Por isso, ao incluir aceleradores de GPU na especificação ResourcePool
, o campo machineType
controla os requisitos de CPU e memória do modelo, enquanto o campo acceleratorType
controla a GPU. Além disso, o campo acceleratorCount
controla o número de frações de GPU.
Siga estas etapas para criar um recurso personalizado ResourcePool
:
Crie um arquivo YAML definindo o recurso personalizado
ResourcePool
. Os exemplos a seguir contêm arquivos YAML para pools de recursos com aceleradores de GPU (modelos baseados em GPU) e sem aceleradores de GPU (modelos baseados em CPU):Modelos baseados em 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
Modelos baseados em 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
Substitua:
RESOURCE_POOL_NAME
: o nome que você quer dar ao arquivo de definiçãoResourcePool
.PROJECT_NAMESPACE
: o nome do namespace do projeto associado ao cluster de previsão.
Modifique os valores nos campos
dedicatedResources
de acordo com as necessidades de recursos e o que está disponível no cluster de previsão.Aplique o arquivo de definição
ResourcePool
ao cluster de previsão:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f RESOURCE_POOL_NAME.yaml
Substitua:
PREDICTION_CLUSTER_KUBECONFIG
: o caminho para o arquivo kubeconfig no cluster de previsão.RESOURCE_POOL_NAME
: o nome do arquivo de definiçãoResourcePool
.
Ao criar o recurso personalizado ResourcePool
, a API Kubernetes e o
serviço de webhook validam o arquivo YAML e informam se a operação foi bem-sucedida ou não. O operador de
previsão provisiona e reserva seus recursos do pool de recursos
quando você implanta seus modelos em um endpoint.
Implantar o modelo em um endpoint
Se você tiver um pool de recursos, poderá implantar mais de um modelo em um endpoint e um modelo em mais de um endpoint. Implante um modelo de previsão direcionado a contêineres compatíveis. Dependendo da existência ou não do endpoint, escolha um dos dois métodos a seguir:
Implantar um modelo em um novo endpoint
Siga estas etapas para implantar um modelo de previsão em um novo endpoint:
Crie um arquivo YAML que defina um recurso personalizado
DeployedModel
:TensorFlow
O arquivo YAML a seguir mostra um exemplo de configuração para um modelo do 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
Substitua:
DEPLOYED_MODEL_NAME
: o nome que você quer dar ao arquivo de definiçãoDeployedModel
.PROJECT_NAMESPACE
: o nome do namespace do projeto associado ao cluster de previsão.PREDICTION_ENDPOINT
: o nome que você quer dar ao novo endpoint, comomy-img-prediction-endpoint
.PATH_TO_MODEL
: o caminho para o modelo no bucket de armazenamento.RESOURCE_POOL_NAME
: o nome que você deu ao arquivo de definiçãoResourcePool
ao criar um pool de recursos para hospedar o modelo.
Modifique os valores nos campos restantes de acordo com seu modelo de previsão.
PyTorch
O arquivo YAML a seguir mostra um exemplo de configuração para um modelo do 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
Substitua:
DEPLOYED_MODEL_NAME
: o nome que você quer dar ao arquivo de definiçãoDeployedModel
.PROJECT_NAMESPACE
: o nome do namespace do projeto associado ao cluster de previsão.PREDICTION_ENDPOINT
: o nome que você quer dar ao novo endpoint, comomy-img-prediction-endpoint
.PATH_TO_MODEL
: o caminho para o modelo no bucket de armazenamento.RESOURCE_POOL_NAME
: o nome que você deu ao arquivo de definiçãoResourcePool
ao criar um pool de recursos para hospedar o modelo.
Modifique os valores nos campos restantes de acordo com seu modelo de previsão.
Aplique o arquivo de definição
DeployedModel
ao cluster de previsão:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
Substitua:
PREDICTION_CLUSTER_KUBECONFIG
: o caminho para o arquivo kubeconfig no cluster de previsão.DEPLOYED_MODEL_NAME
: o nome do arquivo de definiçãoDeployedModel
.
Ao criar o recurso personalizado
DeployedModel
, a API Kubernetes e o serviço de webhook validam o arquivo YAML e informam se a operação foi concluída ou falhou. O operador de previsão reconcilia o recurso personalizadoDeployedModel
e o disponibiliza no cluster de previsão.Crie um arquivo YAML definindo um recurso personalizado
Endpoint
.O arquivo YAML a seguir mostra um exemplo de configuração:
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
Substitua:
ENDPOINT_NAME
: o nome que você quer dar ao arquivo de definição deEndpoint
.PROJECT_NAMESPACE
: o nome do namespace do projeto associado ao cluster de previsão.PREDICTION_ENDPOINT
: o nome do novo endpoint. Você definiu esse nome no arquivo de definiçãoDeployedModel
.DEPLOYED_MODEL_NAME
: o nome que você deu ao arquivo de definição deDeployedModel
.
É possível ter um ou mais destinos
serviceRef
. Se você tiver um segundo objetoserviceRef
, adicione-o ao arquivo YAML no campodestinations
e substituaDEPLOYED_MODEL_NAME_2
pelo nome que você deu ao segundo arquivo de definiçãoDeployedModel
criado. Continue adicionando ou removendo objetosserviceRef
conforme necessário, dependendo da quantidade de modelos que você está implantando.Defina os campos
trafficPercentage
com base em como você quer dividir o tráfego entre os modelos nesse endpoint. Modifique os valores nos campos restantes de acordo com as configurações de endpoint.Aplique o arquivo de definição
Endpoint
ao cluster de previsão:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
Substitua
ENDPOINT_NAME
pelo nome do arquivo de definição deEndpoint
.
Para acessar o caminho do URL do endpoint do modelo de previsão, execute o seguinte comando:
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Substitua:
PREDICTION_CLUSTER_KUBECONFIG
: o caminho para o arquivo kubeconfig no cluster de previsão.PREDICTION_ENDPOINT
: o nome do novo endpoint.PROJECT_NAMESPACE
: o nome do namespace do projeto de previsão.
Implantar um modelo em um endpoint atual
Só é possível implantar um modelo em um endpoint atual se você já tiver implantado outro modelo nele quando ele era novo. O sistema exige essa etapa anterior para criar o endpoint.
Siga estas etapas para implantar um modelo de previsão em um endpoint atual:
Crie um arquivo YAML definindo um recurso personalizado
DeployedModel
.O arquivo YAML a seguir mostra um exemplo de configuração:
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
Substitua:
DEPLOYED_MODEL_NAME
: o nome que você quer dar ao arquivo de definiçãoDeployedModel
.PROJECT_NAMESPACE
: o nome do namespace do projeto associado ao cluster de previsão.PREDICTION_ENDPOINT
: o nome do endpoint existente, comomy-img-prediction-endpoint
.PATH_TO_MODEL
: o caminho para o modelo no bucket de armazenamento.RESOURCE_POOL_NAME
: o nome que você deu ao arquivo de definiçãoResourcePool
ao criar um pool de recursos para hospedar o modelo.
Modifique os valores nos campos restantes de acordo com seu modelo de previsão.
Aplique o arquivo de definição
DeployedModel
ao cluster de previsão:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
Substitua:
PREDICTION_CLUSTER_KUBECONFIG
: o caminho para o arquivo kubeconfig no cluster de previsão.DEPLOYED_MODEL_NAME
: o nome do arquivo de definiçãoDeployedModel
.
Ao criar o recurso personalizado
DeployedModel
, a API Kubernetes e o serviço de webhook validam o arquivo YAML e informam se a operação foi concluída ou falhou. O operador de previsão reconcilia o recurso personalizadoDeployedModel
e o disponibiliza no cluster de previsão.Mostre detalhes do recurso personalizado
Endpoint
atual:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG describe -f ENDPOINT_NAME.yaml
Substitua
ENDPOINT_NAME
pelo nome do arquivo de definição deEndpoint
.Atualize o arquivo YAML da definição de recurso personalizado
Endpoint
adicionando um novo objetoserviceRef
no campodestinations
. No novo objeto, inclua o nome do serviço adequado com base no recurso personalizadoDeployedModel
recém-criado.O arquivo YAML a seguir mostra um exemplo de configuração:
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
Substitua:
ENDPOINT_NAME
: o nome do arquivo de definição deEndpoint
existente.PROJECT_NAMESPACE
: o nome do namespace do projeto associado ao cluster de previsão.PREDICTION_ENDPOINT
: o nome do endpoint atual. Você referenciou esse nome no arquivo de definiçãoDeployedModel
.DEPLOYED_MODEL_NAME
: o nome de um arquivo de definiçãoDeployedModel
criado anteriormente.DEPLOYED_MODEL_NAME_2
: o nome que você deu ao arquivo de definiçãoDeployedModel
recém-criado.
É possível ter um ou mais destinos
serviceRef
. Se você tiver um terceiro objetoserviceRef
, adicione-o ao arquivo YAML no campodestinations
e substituaDEPLOYED_MODEL_NAME_3
pelo nome que você deu ao terceiro arquivo de definiçãoDeployedModel
criado. Continue adicionando ou removendo objetosserviceRef
conforme necessário, dependendo da quantidade de modelos que você está implantando.Defina os campos
trafficPercentage
com base em como você quer dividir o tráfego entre os modelos desse endpoint. Modifique os valores nos campos restantes de acordo com as configurações de endpoint.Aplique o arquivo de definição
Endpoint
ao cluster de previsão:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
Substitua
ENDPOINT_NAME
pelo nome do arquivo de definição deEndpoint
.
Para acessar o caminho do URL do endpoint do modelo de previsão, execute o seguinte comando:
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Substitua:
PREDICTION_CLUSTER_KUBECONFIG
: o caminho para o arquivo kubeconfig no cluster de previsão.PREDICTION_ENDPOINT
: o nome do endpoint.PROJECT_NAMESPACE
: o nome do namespace do projeto de previsão.