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

Geralmente, o tipo de máquina padrão mls1-c1-m2 está disponível para previsão on-line. Se quiser, implante uma versão de modelo com um dos outros tipo de máquina que estão disponíveis 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) Disponibilidade geral 1 2 Não Todos os tipos de artefatos de modelo compatíveis com o AI Platform Prediction. 500 MB
mls1-c4-m2 Beta 4 2 Não Todos os tipos de artefatos de modelo compatíveis com o AI Platform Prediction. 500 MB
n1-standard-2 Beta 2 7,5 Sim Apenas SavedModel do TensorFlow 2 GB
n1-standard-4 Beta 4 15 Sim Apenas SavedModel do TensorFlow 2 GB
n1-standard-8 Beta 8 30 Sim Apenas SavedModel do TensorFlow 2 GB
n1-standard-16 Beta 16 60 Sim Apenas SavedModel do TensorFlow 2 GB
n1-standard-32 Beta 32 120 Sim Apenas SavedModel do TensorFlow 2 GB
n1-highmem-2 Beta 2 13 Sim Apenas SavedModel do TensorFlow 2 GB
n1-highmem-4 Beta 4 26 Sim Apenas SavedModel do TensorFlow 2 GB
n1-highmem-8 Beta 8 52 Sim Apenas SavedModel do TensorFlow 2 GB
n1-highmem-16 Beta 16 104 Sim Apenas SavedModel do TensorFlow 2 GB
n1-highmem-32 Beta 32 208 Sim Apenas SavedModel do TensorFlow 2 GB
n1-highcpu-2 Beta 2 1,8 Sim Apenas SavedModel do TensorFlow 2 GB
n1-highcpu-4 Beta 4 3,6 Sim Apenas SavedModel do TensorFlow 2 GB
n1-highcpu-8 Beta 8 7,2 Sim Apenas SavedModel do TensorFlow 2 GB
n1-highcpu-16 Beta 16 14,4 Sim Apenas SavedModel do TensorFlow 2 GB
n1-highcpu-32 Beta 32 28,8 Sim Apenas SavedModel do TensorFlow 2 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 não especificar, o padrão da versão de modelo será usar mls1-c1-m2 nos seus nós.

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 mls1-c4-m2 é 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 GCP

Na página Criar versão, abra a lista suspensa Tipo de máquina e selecione Tipos de máquina do AI Platform > CPU quad core (BETA).

gcloud

Depois de fazer upload dos artefatos do modelo para o Cloud Storage e gerar um recurso relacionado, crie uma versão de modelo que use o tipo de máquina mls1-c4-m2. Para fazer isso, utilize o componente Beta da ferramenta de linha de comando gcloud:

gcloud beta ai-platform versions create version_name \
  --model model_name \
  --origin gs://model-directory-uri \
  --runtime-version 1.14 \
  --python-version 3.5 \
  --framework ml-framework-name \
  --machine-type mls1-c4-m2

Python

Neste exemplo, a biblioteca de cliente das APIs do Google para Python é usada. Antes de executar a amostra de código a seguir, você precisa configurar a autenticação.

Depois de fazer upload dos artefatos do modelo para o Cloud Storage e gerar um recurso relacionado, 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 googleapiclient import discovery

ml = discovery.build('ml', 'v1')
request_dict = {
    'name': 'version_name',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '1.14',
    'pythonVersion': '3.5',
    'framework': 'ML_FRAMEWORK_NAME',
    'machineType': 'mls1-c4-m2'
}
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

Se você usa um dos tipos de máquina N1 do Compute Engine na versão de modelo, adicione GPUs para acelerar cada nó de previsão. Esse processo é opcional. Só é possível usar um tipo de GPU na versão de modelo, e há limitações no número de GPUs que pode ser adicionado dependendo do tipo de máquina que você está usando.

Veja na tabela a seguir as GPUs disponíveis para previsão on-line e quantas de cada tipo podem ser usadas 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. Os tipos de máquina legados MLS1 não são compatíveis com GPUs.

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. É necessário escalonar manualmente os nós de previsão na sua versão ao usar GPUS. Posteriormente, será possível alterar a quantidade de nós em execução. Porém, no momento, não é possível usar o escalonamento automático com as GPUs.

Com as instruções a seguir, você aprende a especificar GPUs para a previsão on-line. É usado um tipo de máquina n1-highmem-32 com quatro GPUs NVIDIA Tesla K80 em cada um dos nós de previsão da versão de modelo:

Console do GCP

Na página Criar versão, abra a lista suspensa Tipo de máquina e selecione Muita memória > n1-highmem-32. No campo Tipo de acelerador, selecione NVIDIA_TESLA_K80. No campo Contagem de aceleradores, selecione 4.

gcloud

Depois de fazer upload do SavedModel do TensorFlow para o Cloud Storage e criar um recurso de modelo na região us-central1, crie uma versão por meio do componente Beta da ferramenta de linha de comando gcloud. É necessário especificar a sinalização --accelerator:

gcloud beta ai-platform versions create version_name \
  --model model_name \
  --origin gs://model-directory-uri \
  --runtime-version 1.14 \
  --python-version 3.5 \
  --framework tensorflow \
  --machine-type n1-highmem-32 \
  --accelerator 4,nvidia-tesla-k80

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 a amostra de código a seguir, você precisa configurar a autenticação.

Depois de fazer upload do SavedModel do TensorFlow para o Cloud Storage e criar um recurso de modelo na região us-central1, envie uma solicitação ao método projects.models.versions.create do modelo. É necessário especificar os campos machineType e acceleratorConfig no corpo da solicitação:

from googleapiclient import discovery

ml = discovery.build('ml', 'v1')
request_dict = {
    'name': 'version_name',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '1.14',
    'pythonVersion': '3.5',
    'framework': 'TENSORFLOW',
    'machineType': 'mls1-c4-m2',
    'acceleratorConfig': {
      'count': 4,
      'type': 'NVIDIA_TESLA_K80'
    }
}
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 us-central1 Todas as regiões do AI Platform Prediction
Tipos de artefatos de ML SavedModels do TensorFlowTodos os artefatos de modelo do AI Platform
Versões do ambiente de execução 1.11 ou superior Todas as versões de ambiente de execução disponíveis do AI Platform
Tamanho máximo do modelo 2 GB 500 MB
Geração de registros Sem geração de registros de stream Todos os tipos de geração de registros
Escalonamento automático Nós mínimos = 1 Nós mínimos = 0
Dimensionamento 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

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

Disponibilidade regional

No momento, os tipos de máquina N1 do Compute Engine só estão disponíveis quando você implanta o modelo na região us-central1.

É possível usar tipos de máquina legados MLS1 em todas as regiões disponíveis para previsão on-line.

Compatibilidade com previsão em lote

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

Compatibilidade com frameworks de ML

Se você usa um dos tipos de máquina N1 do Compute Engine, é necessário criar a versão de modelo com um SavedModel do TensorFlow e especificar TENSORFLOW no campo framework.

Para os tipos de máquina legados MLS1, use qualquer tipo de modelo de machine learning exportado compatível com o AI Platform Prediction.

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.

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é 2 GB se você usa um tipo de máquina N1 do Compute Engine.

Como gerar registros de previsões

Os tipos de máquina N1 do Compute Engine não são compatíveis com a geração de registros dos streams stderr e stdout dos nós de previsão.

Os tipos de máquina legados MLS1 são compatíveis com todas as opções de geração de registros de previsão on-line.

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ê usa GPUs na versão de modelo, não é possível utilizar o escalonamento automático. Use o escalonamento manual.

Se você usa um tipo de máquina legado MLS1, os nós da versão de modelo poderão ser escalonados para zero quando ele não receber tráfego. É possível definir autoScaling.minNodes como 0, que é o valor padrão.

Dimensionamento manual

Se você usa um tipo de máquina N1 do Compute Engine com escalonamento manual, é possível 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ê 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.