Como escolher um tipo de máquina para previsão on-line

O AI Platform Prediction aloca nós para processar as solicitações de previsão on-line enviadas a uma versão de modelo. Ao implantar uma versão de modelo, é possível personalizar o tipo de máquina virtual que o AI Platform Prediction usa nesses nós.

Os tipos de máquina são diferentes no seguinte:

Ao selecionar um tipo de máquina com mais recursos de computação, é possível fornecer previsões com latência menor ou processar mais solicitações de previsão ao mesmo tempo.

Tipos de máquina disponíveis

Os tipos de máquina do Compute Engine (N1) e o tipo mls1-c1-m2 geralmente estão disponíveis para previsão on-line. O tipo de máquina mls1-c4-m2 está disponível na versão Beta.

Veja na tabela a seguir uma comparação dos tipos de máquina disponíveis:

Nome Disponibilidade vCPUs Memória (GB) Compatível com GPUs? Compatibilidade com frameworks de ML Tamanho máximo do modelo
mls1-c1-m2 (padrão no endpoint global) Disponibilidade geral 1 2 Não TensorFlow, XGBoost, scikit-learn (incluindo pipelines com código personalizado), rotinas de previsão personalizadas 500 MB
mls1-c4-m2 Beta 4 2 Não TensorFlow, XGBoost, scikit-learn (incluindo pipelines com código personalizado), rotinas de previsão personalizadas 500 MB
n1-standard-2 (padrão em endpoints regionais) Disponibilidade geral 2 7,5 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-standard-4 Disponibilidade geral 4 15 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-standard-8 Disponibilidade geral 8 30 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-standard-16 Disponibilidade geral 16 60 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-standard-32 Disponibilidade geral 32 120 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-highmem-2 Disponibilidade geral 2 13 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-highmem-4 Disponibilidade geral 4 26 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-highmem-8 Disponibilidade geral 8 52 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-highmem-16 Disponibilidade geral 16 104 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-highmem-32 Disponibilidade geral 32 208 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-highcpu-2 Disponibilidade geral 2 1,8 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-highcpu-4 Disponibilidade geral 4 3,6 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-highcpu-8 Disponibilidade geral 8 7,2 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-highcpu-16 Disponibilidade geral 16 14,4 Sim TensorFlow, XGBoost e scikit-learn 10 GB
n1-highcpu-32 Disponibilidade geral 32 28,8 Sim TensorFlow, XGBoost e scikit-learn 10 GB

Saiba mais sobre os preços de cada tipo de máquina. Leia mais sobre as especificações detalhadas dos tipos de máquina N1 do Compute Engine na documentação relacionada.

Como especificar um tipo de máquina

Você especifica um tipo de máquina ao criar uma versão de modelo. Se você não especificar um tipo de máquina, a versão do modelo usará n1-standard-2 por padrão quando você estiver usando um endpoint regional e mls1-c1-m2 se você estiver usando o endpoint global.

Com as instruções a seguir, você aprende a especificar um tipo de máquina ao criar uma versão de modelo. Nelas, o tipo de máquina n1-standard-4 é usado como exemplo. Para saber mais sobre o processo completo de criação de uma versão de modelo, leia o guia para implantar modelos.

Console do Google Cloud

Na página Criar versão, abra a lista suspensa Tipo de máquina e selecione Padrão > n1-standard-4.

gcloud

Depois de fazer upload dos artefatos do modelo para o Cloud Storage e gerar um recurso relacionado, é possível criar uma versão do modelo que usa o tipo de máquina n1-standard-4:

gcloud ai-platform versions create VERSION_NAME \
  --model MODEL_NAME \
  --origin gs://model-directory-uri \
  --runtime-version 2.11 \
  --python-version 3.7 \
  --framework ML_FRAMEWORK_NAME \
  --region us-central1 \
  --machine-type n1-standard-4

Python

Neste exemplo, a biblioteca de cliente das APIs do Google para Python é usada. Antes de executar o seguinte exemplo de código, é necessário configurar a autenticação.

Depois de fazer upload dos artefatos do modelo para o Cloud Storage e gerar um recurso modelo, envie uma solicitação ao método projects.models.versions.create do modelo. É necessário especificar o campo machineType no corpo da solicitação:

from google.api_core.client_options import ClientOptions
from googleapiclient import discovery

endpoint = 'https://us-central1-ml.googleapis.com'
client_options = ClientOptions(api_endpoint=endpoint)
ml = discovery.build('ml', 'v1', client_options=client_options)

request_dict = {
    'name': 'VERSION_NAME',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '2.11',
    'pythonVersion': '3.7',
    'framework': 'ML_FRAMEWORK_NAME',
    'machineType': 'n1-standard-4'
}
request = ml.projects().models().versions().create(
    parent='projects/PROJECT_NAME/models/MODEL_NAME',
    body=request_dict
)
response = request.execute()

Como usar GPUs na previsão on-line

Para algumas configurações, é possível adicionar GPUs para acelerar cada nó de previsão. Para usar GPUs, é necessário considerar vários requisitos:

  • Só é possível usar GPUs com tipos de máquina do Compute Engine (N1). Os tipos de máquina legados MLS1 não são compatíveis com GPUs.
  • Você só pode usar GPUs ao implantar um SavedModel do TensorFlow. Não é possível usar GPUs para modelos scikit-learn ou XGBoost.
  • A disponibilidade de cada tipo de GPU varia de acordo com a região usada para o modelo. Saiba quais tipos de GPUs estão disponíveis em quais regiões.
  • Só é possível usar um tipo de GPU na versão de modelo, e há limitações no número de GPUs a serem adicionadas dependendo do tipo de máquina que você está usando. A tabela a seguir descreve essas limitações.

Veja na tabela a seguir as GPUs disponíveis para previsão on-line e quantas de cada tipo é possível usar com cada tipo de máquina do Compute Engine:

Números válidos de GPUs para cada tipo de máquina
Tipo de máquina NVIDIA Tesla K80 NVIDIA Tesla P4 NVIDIA Tesla P100 NVIDIA Tesla T4 NVIDIA Tesla V100
n1-standard-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-standard-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highmem-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highmem-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highcpu-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highcpu-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highcpu-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highcpu-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highcpu-32 4, 8 2, 4 2, 4 2, 4 4, 8

As GPUs são opcionais e geram mais custos.

Como especificar GPUs

Especifique as GPUs ao criar uma versão de modelo. O AI Platform Prediction aloca o número e o tipo de GPU que você especifica para cada nó de previsão. É possível fazer escalonamento automático (visualização) ou escalonamento manual (GA) dos nós de previsão. No entanto, o número de GPUs que cada nó usa é corrigido quando você cria a versão do modelo. A menos que você tenha um caso de uso avançado, recomendamos que configure uma GPU em cada nó de previsão. Em outras palavras, defina a contagem de aceleradores como 1.

Com as instruções a seguir, você aprende a especificar GPUs para a previsão on-line. Basta criar uma versão de modelo que seja executada em pelo menos dois nós de previsão a qualquer momento. Cada nó usa o tipo de máquina n1-standard-4 e uma GPU NVIDIA Tesla T4.

Os exemplos pressupõem que você já fez o upload de um SavedModel do TensorFlow para o Cloud Storage e criou um recurso de modelo em uma região compatível com GPUs.

Console do Google Cloud

Siga o guia para criar uma versão de modelo. Na página Criar versão, especifique as seguintes opções:

  1. Na lista suspensa Escalonamento, selecione Escalonamento manual.
  2. No campo Número mínimo de nós, insira 2.
  3. Na lista suspensa Tipo de máquina, selecione Padrão > n1-standard-4.
  4. Na lista suspensa Tipo de acelerador, selecione NVIDIA_TESLA_T4.
  5. Na lista suspensa Contagem do acelerador, selecione 1.

gcloud

Use a gcloud CLI para criar uma versão de modelo. Neste exemplo, a versão é executada em nós de previsão n1-standard-4, cada um usando uma GPU NVIDIA Tesla T4. O AI Platform Prediction escalona automaticamente o número de nós de previsão a um número entre 2 e 4, dependendo do uso da GPU a qualquer momento. O exemplo usa o endpoint regional us-central1.

gcloud beta ai-platform versions create VERSION_NAME \
  --model MODEL_NAME \
  --origin gs://model-directory-uri \
  --runtime-version 2.11 \
  --python-version 3.7 \
  --framework tensorflow \
  --region us-central1 \
  --machine-type n1-standard-4 \
  --accelerator count=1,type=nvidia-tesla-t4 \
  --min-nodes 2 \
  --max-nodes 4 \
  --metric-targets gpu-duty-cycle=60

O nome do acelerador é especificado em letras minúsculas com hifens entre as palavras.

Python

Neste exemplo, a biblioteca de cliente das APIs do Google para Python é usada. Antes de executar o seguinte exemplo de código, é necessário configurar a autenticação.

O exemplo usa o endpoint regional de us-central1.

Envie uma solicitação para o método projects.models.versions.create do modelo e especifique os campos machineType, acceleratorConfig e manualScaling no corpo da solicitação:

from google.api_core.client_options import ClientOptions
from googleapiclient import discovery

endpoint = 'https://us-central1-ml.googleapis.com'
client_options = ClientOptions(api_endpoint=endpoint)
ml = discovery.build('ml', 'v1', client_options=client_options)

request_dict = {
    'name': 'VERSION_NAME',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '2.11',
    'pythonVersion': '3.7',
    'framework': 'TENSORFLOW',
    'machineType': 'n1-standard-4',
    'acceleratorConfig': {
      'count': 1,
      'type': 'NVIDIA_TESLA_T4'
    },
    'autoScaling': {
      'minNodes': 2,
      'maxNodes': 4,
      'metrics': [
        {
          'name': 'GPU_DUTY_CYCLE',
          'target': 60
        }
      ]
    }
}
request = ml.projects().models().versions().create(
    parent='projects/PROJECT_NAME/models/MODEL_NAME',
    body=request_dict
)
response = request.execute()

O nome do acelerador é especificado em letras maiúsculas com sublinhados entre as palavras.

Diferenças entre os tipos de máquina

Além de fornecer diferentes quantidades de recursos de computação, os tipos de máquina também variam com relação à compatibilidade de determinados recursos do AI Platform Prediction. Confira na tabela a seguir uma visão geral das diferenças entre os tipos de máquina N1 do Compute Engine e os legados MLS1:

Tipos de máquina N1 do Compute Engine Tipos de máquina legados MLS1
Regiões Todas as regiões de endpoints regionais Todas as regiões de endpoints globais
Tipos de artefatos de ML
Versões de tempo de execução 1.11 ou superior Todas as versões de ambiente de execução disponíveis do AI Platform
Suporte a contêiner personalizado Sim Não
Tamanho máximo do modelo 10 GB 500 MB
Escalonamento automático Nós mínimos = 1 Nós mínimos = 0
Escalonamento manual É possível atualizar o número de nós Não é possível atualizar o número de nós após a criação da versão de modelo
Suporte a GPUs Sim (somente TensorFlow) Não
Suporte do AI Explanations Sim (somente TensorFlow) Não
Suporte do VPC Service Controls Sim Não
Cobertura do SLA para tipos de máquina com disponibilidade geral Sim, em alguns casos Sim

Nas seções a seguir, você encontra explicações detalhadas sobre as diferenças entre os tipos de máquinas.

Disponibilidade regional

Os tipos de máquina N1 do Compute Engine estão disponíveis quando você implanta o modelo em um endpoint regional. Quando você usa um tipo de máquina do Compute Engine (N1), não é possível implantar o modelo no endpoint global.

Quando você dimensiona uma versão de modelo que usa tipos de máquina do Compute Engine (N1) para dois ou mais nós de previsão, eles são executados em várias zonas na mesma região. Isso garante disponibilidade contínua se houver uma interrupção em alguma das zonas. Saiba mais na seção sobre escalonamento deste documento.

Observe que a disponibilidade da GPU para os tipos de máquina N1 do Compute Engine também varia de acordo com a região.

Os tipos de máquina legados MLS1 estão disponíveis no endpoint global em muitas regiões. Os tipos de máquina legados MLS1 não estão disponíveis em endpoints regionais.

Compatibilidade com previsão em lote

As versões de modelo que usam o tipo de máquina mls1-c1-m2 são compatíveis com a previsão em lote. As versões de modelo que usam outros tipos de máquina não são compatíveis com a previsão em lote.

Compatibilidade com frameworks de ML

Se usar um dos tipos de máquina N1 do Compute Engine, será possível criar a versão do modelo com todos os artefatos do modelo descritos no Guia de exportação de modelos de predição, exceto dois:

Para tipos de máquina legados MLS1, é possível usar qualquer tipo de artefato de modelo suportado pelo AI Platform Prediction, incluindo um pipeline scikit-learn com código personalizado ou uma rotina de previsão personalizada.

Compatibilidade com a versão do ambiente de execução

Se você usa um tipo de máquina N1 do Compute Engine, é necessário utilizar a versão de ambiente de execução 1.11 ou superior na versão de modelo.

Se você usa um tipo de máquina legado MLS1, utilize qualquer versão de ambiente de execução do AI Platform disponível.

Suporte a contêiner personalizado

Para usar um contêiner personalizado para exibir predições on-line, é preciso usar um tipo de máquina do Compute Engine (N1).

Tamanho máximo do modelo

Se você usa um tipo de máquina legado MLS1, os artefatos do modelo fornecidos ao criar uma versão de modelo precisam ter um tamanho de arquivo total de até 500 MB. O tamanho total do arquivo pode ser de até 10 GB se você usa um tipo de máquina N1 do Compute Engine.

Como gerar registros de previsões

Para os tipos de máquina N1 do Compute Engine, a geração de registros do console está no modo de visualização. Para os tipos de máquina legados (MLS1), o registro do console costuma estar disponível.

Como dimensionar os nós de previsão

Os escalonamentos automático e manual dos nós de previsão têm restrições diferentes dependendo do tipo de máquina N1 do Compute Engine ou legado MLS1.

Escalonamento automático

Se você usa um tipo de máquina N1 do Compute Engine com o escalonamento automático, a versão de modelo sempre precisará ter pelo menos um nó em execução. Em outras palavras, o campo autoScaling.minNodes da versão assumirá 1 como padrão e não poderá ter um valor menor. Se você definir autoScaling.minNodes como 2 ou superior, os nós de previsão serão executados em várias zonas na mesma região. Isso garante disponibilidade contínua se houver uma interrupção em alguma das zonas.

Se você alocar mais vCPUs ou RAM do que o modelo de machine learning precisa, o escalonamento automático pode não funcionar corretamente. Isso pode causar problemas com o desempenho do modelo. Tente usar diferentes tipos de máquina para seu modelo para garantir que você não forneça muitos recursos de computação.

Se você usa um tipo de máquina legado MLS1, a versão do modelo pode ser escalonada para zero nós quando não recebe tráfego: autoScaling.minNodes pode ser definido como 0, e é definido como 0 por padrão. O escalonamento para zero pode reduzir custos quando sua versão de modelo não está recebendo solicitações de previsão. No entanto, isso também pode levar a latência ou erros durante qualquer período em que o AI Platform Prediction aloca um novo nó para processar solicitações após um período com zero nós. Saiba mais sobre escalonamento para zero.

Escalonamento manual

Se você usar um tipo de máquina do Compute Engine (N1) com escalonamento manual, poderá atualizar o número de nós de previsão em execução a qualquer momento por meio do método de API projects.models.versions.patch. Se você definir o campo manualScaling.nodes como 2 ou superior, os nós de previsão serão executados em várias zonas na mesma região. Isso garante disponibilidade contínua se houver uma interrupção em alguma das zonas.

Se você usa um tipo de máquina legado (MLS1) com escalonamento manual, não é possível atualizar o número de nós de previsão depois de criar a versão de modelo. Se quiser alterar o número de nós, exclua a versão e crie uma nova.

Suporte do VPC Service Controls

Se você usar o VPC Service Controls para proteger o AI Platform Prediction, não será possível criar versões que usam tipos de máquina legados (MLS1). É preciso utilizar os tipos de máquina do Compute Engine (N1).