Criar um cluster de computação do Azure Machine Learning com a CLI v1

APLICA-SE A:Azure CLI ml extension v1 Python SDK azureml v1

Saiba como criar e gerenciar um cluster de computação em seu espaço de trabalho do Azure Machine Learning.

Você pode usar o cluster de computação do Aprendizado de Máquina do Azure para distribuir um processo de treinamento ou inferência em lote em um cluster de nós de computação de CPU ou GPU na nuvem. Para obter mais informações sobre os tamanhos de VM que incluem GPUs, consulte Tamanhos de máquina virtual otimizados para GPU.

Neste artigo, saiba como:

  • Criar um cluster de computação
  • Reduza o custo do cluster de computação
  • Configurar uma identidade gerenciada para o cluster

Pré-requisitos

O que é um cluster de computação?

O cluster de computação do Azure Machine Learning é uma infraestrutura de computação gerenciada que permite criar facilmente uma computação de um ou vários nós. O cluster de computação é um recurso que pode ser compartilhado com outros usuários em seu espaço de trabalho. A computação aumenta automaticamente quando um trabalho é enviado e pode ser colocada em uma Rede Virtual do Azure. O cluster de computação não suporta nenhuma implantação de IP público, bem como na rede virtual. A computação é executada em um ambiente conteinerizado e empacota as dependências do modelo em um contêiner do Docker.

Os clusters de computação podem executar trabalhos com segurança em um ambiente de rede virtual, sem exigir que as empresas abram portas SSH. O trabalho é executado em um ambiente conteinerizado e empacota suas dependências de modelo em um contêiner do Docker.

Limitações

  • Os clusters de computação podem ser criados em uma região e VNet diferentes do seu espaço de trabalho. No entanto, essa funcionalidade só está disponível usando o SDK v2, CLI v2 ou estúdio. Para obter mais informações, consulte a versão v2 de ambientes de treinamento seguros.

  • Atualmente, suportamos apenas a criação (e não a atualização) de clusters através de modelos ARM. Para atualizar a computação, recomendamos usar o SDK, a CLI do Azure ou a UX por enquanto.

  • O Azure Machine Learning Compute tem limites padrão, como o número de núcleos que podem ser alocados. Para obter mais informações, consulte Gerenciar e solicitar cotas para recursos do Azure.

  • O Azure permite que você coloque bloqueios em recursos, para que eles não possam ser excluídos ou sejam somente leitura. Não aplique bloqueios de recursos ao grupo de recursos que contém seu espaço de trabalho. A aplicação de um bloqueio ao grupo de recursos que contém seu espaço de trabalho impedirá operações de dimensionamento para clusters de computação do Azure Machine Learning. Para obter mais informações sobre como bloquear recursos, consulte Bloquear recursos para evitar alterações inesperadas.

Gorjeta

Geralmente, os clusters podem ser dimensionados para até 100 nós, desde que você tenha cota suficiente para o número de núcleos necessários. Por padrão, os clusters são configurados com a comunicação entre nós habilitada entre os nós do cluster para suportar trabalhos MPI, por exemplo. No entanto, você pode dimensionar seus clusters para 1000s de nós simplesmente levantando um tíquete de suporte e solicitando permissão para listar sua assinatura, ou espaço de trabalho, ou um cluster específico para desabilitar a comunicação entre nós.

Criar

Estimativa de tempo: Aproximadamente 5 minutos.

O Azure Machine Learning Compute pode ser reutilizado em execuções. A computação pode ser compartilhada com outros usuários no espaço de trabalho e é retida entre execuções, dimensionando automaticamente os nós para cima ou para baixo com base no número de execuções enviadas e no max_nodes definido no cluster. A configuração min_nodes controla os nós mínimos disponíveis.

Os núcleos dedicados por região por cota de família de VM e cota regional total, que se aplica à criação de cluster de computação, são unificados e compartilhados com a cota de instância de computação de treinamento do Azure Machine Learning.

Importante

Para evitar cobranças quando nenhum trabalho estiver em execução, defina os nós mínimos como 0. Essa configuração permite que o Aprendizado de Máquina do Azure desaaloque os nós quando eles não estiverem em uso. Qualquer valor maior que 0 manterá esse número de nós em execução, mesmo que eles não estejam em uso.

A computação é dimensionada automaticamente para zero nós quando não é usada. VMs dedicadas são criadas para executar seus trabalhos conforme necessário.

Para criar um recurso de computação persistente do Azure Machine Learning em Python, especifique as propriedades vm_size e max_nodes . Em seguida, o Azure Machine Learning usa padrões inteligentes para as outras propriedades.

  • vm_size: A família VM dos nós criados pelo Azure Machine Learning Compute.
  • max_nodes: O número máximo de nós a serem dimensionados automaticamente até quando você executa um trabalho no Azure Machine Learning Compute.

APLICA-SE A:Python SDK azureml v1

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your CPU cluster
cpu_cluster_name = "cpucluster"

# Verify that cluster does not exist already
try:
    cpu_cluster = ComputeTarget(workspace=ws, name=cpu_cluster_name)
    print('Found existing cluster, use it.')
except ComputeTargetException:
    # To use a different region for the compute, add a location='<region>' parameter
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                           max_nodes=4)
    cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)

cpu_cluster.wait_for_completion(show_output=True)

Você também pode configurar várias propriedades avançadas ao criar o Azure Machine Learning Compute. As propriedades permitem que você crie um cluster persistente de tamanho fixo ou dentro de uma Rede Virtual do Azure existente em sua assinatura. Consulte a classe AmlCompute para obter detalhes.

Aviso

Ao definir o location parâmetro, se for uma região diferente do seu espaço de trabalho ou armazenamentos de dados, você poderá ver maior latência de rede e custos de transferência de dados. A latência e os custos podem ocorrer ao criar o cluster e ao executar trabalhos nele.

Reduza o custo do cluster de computação

Você também pode optar por usar VMs de baixa prioridade para executar algumas ou todas as suas cargas de trabalho. Essas VMs não têm disponibilidade garantida e podem ser antecipadas durante o uso. Você terá que reiniciar um trabalho antecipado.

APLICA-SE A:Python SDK azureml v1

compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                            vm_priority='lowpriority',
                                                            max_nodes=4)

Configurar identidade gerenciada

Os clusters de computação do Azure Machine Learning também dão suporte a identidades gerenciadas para autenticar o acesso aos recursos do Azure sem incluir credenciais em seu código. Existem dois tipos de identidades geridas:

  • Uma identidade gerenciada atribuída ao sistema é habilitada diretamente no cluster de computação e na instância de computação do Azure Machine Learning. O ciclo de vida de uma identidade atribuída pelo sistema está diretamente ligado ao cluster ou instância de computação. Se o cluster de computação ou instância for excluído, o Azure limpará automaticamente as credenciais e a identidade na ID do Microsoft Entra.
  • Uma identidade gerenciada atribuída pelo usuário é um recurso autônomo do Azure fornecido por meio do serviço Azure Managed Identity. Você pode atribuir uma identidade gerenciada atribuída pelo usuário a vários recursos e ela persiste pelo tempo que desejar. Essa identidade gerenciada precisa ser criada previamente e, em seguida, passada como o identity_id como um parâmetro necessário.

APLICA-SE A:Python SDK azureml v1

  • Configure a identidade gerenciada em sua configuração de provisionamento:

    • Identidade gerenciada atribuída ao sistema criada em um espaço de trabalho chamado ws

      # configure cluster with a system-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="SystemAssigned",
                                                              )
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
    • Identidade gerenciada atribuída pelo usuário criada em um espaço de trabalho chamado ws

      # configure cluster with a user-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="UserAssigned",
                                                              identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
  • Adicionar identidade gerenciada a um cluster de computação existente chamado cpu_cluster

    • Identidade gerenciada atribuída ao sistema:

      # add a system-assigned managed identity
      cpu_cluster.add_identity(identity_type="SystemAssigned")
      
    • Identidade gerenciada atribuída pelo usuário:

      # add a user-assigned managed identity
      cpu_cluster.add_identity(identity_type="UserAssigned", 
                                  identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      

Nota

Os clusters de computação do Azure Machine Learning suportam apenas uma identidade atribuída pelo sistema ou várias identidades atribuídas pelo utilizador, não ambas em simultâneo.

Uso de identidade gerenciada

A identidade gerenciada padrão é a identidade gerenciada atribuída ao sistema ou a primeira identidade gerenciada atribuída pelo usuário.

Durante uma execução, há dois aplicativos de uma identidade:

  1. O sistema usa uma identidade para configurar as montagens de armazenamento, o registro de contêiner e os armazenamentos de dados do usuário.

    • Nesse caso, o sistema usará a identidade gerenciada por padrão.
  2. O usuário aplica uma identidade para acessar recursos de dentro do código para uma execução enviada

    • Nesse caso, forneça o client_id correspondente à identidade gerenciada que você deseja usar para recuperar uma credencial.
    • Como alternativa, obtenha o ID do cliente da identidade atribuída pelo usuário por meio da variável de ambiente DEFAULT_IDENTITY_CLIENT_ID .

    Por exemplo, para recuperar um token para um armazenamento de dados com a identidade gerenciada por padrão:

    client_id = os.environ.get('DEFAULT_IDENTITY_CLIENT_ID')
    credential = ManagedIdentityCredential(client_id=client_id)
    token = credential.get_token('https://storage.azure.com/')
    

Resolução de problemas

Há uma chance de que alguns usuários que criaram seu espaço de trabalho do Azure Machine Learning a partir do portal do Azure antes da versão do GA não consigam criar AmlCompute nesse espaço de trabalho. Você pode gerar uma solicitação de suporte contra o serviço ou criar um novo espaço de trabalho por meio do portal ou do SDK para se desbloquear imediatamente.

Preso no redimensionamento

Se o cluster de computação do Azure Machine Learning parecer bloqueado no redimensionamento (0 -> 0) para o estado do nó, isso pode ser causado por bloqueios de recursos do Azure.

O Azure permite que você coloque bloqueios em recursos, para que eles não possam ser excluídos ou sejam somente leitura. Bloquear um recurso pode produzir resultados inesperados. Na verdade, algumas operações que não parecem modificar o recurso requerem ações que estão bloqueadas pelo bloqueio.

Com o Azure Machine Learning, aplicar um bloqueio de exclusão ao grupo de recursos do seu espaço de trabalho impedirá operações de dimensionamento para clusters de computação do Azure ML. Para contornar esse problema, recomendamos remover o bloqueio do grupo de recursos e, em vez disso, aplicá-lo a itens individuais no grupo.

Importante

Não aplique o bloqueio aos seguintes recursos:

Nome do recurso Tipo de recurso
<GUID>-azurebatch-cloudservicenetworksecurityggroup Grupo de segurança de rede
<GUID>-azurebatch-cloudservicepublicip Endereço IP público
<GUID>-azurebatch-cloudserviceloadbalancer Balanceador de carga

Esses recursos são usados para se comunicar e executar operações como dimensionamento no cluster de computação. A remoção do bloqueio de recursos desses recursos deve permitir o dimensionamento automático para seus clusters de computação.

Para obter mais informações sobre bloqueio de recursos, consulte Bloquear recursos para evitar alterações inesperadas.

Próximos passos

Use seu cluster de computação para: