Criar e gerenciar uma instância de computação Azure Machine Learning.

Saiba como criar e gerenciar umainstância de computação em seu workspace do Azure Machine Learning.

Use uma instância de computação como seu ambiente de desenvolvimento totalmente configurado e gerenciado na nuvem. Para desenvolvimento e teste, você também pode usar a instância como um destino de computação de treinamento ou para um destino de inferência. Uma instância de computação pode executar vários trabalhos em paralelo e tem uma fila de trabalhos. Como um ambiente de desenvolvimento, uma instância de computação não pode ser compartilhada com outros usuários em seu espaço de trabalho.

Neste artigo, você aprenderá como:

As instância 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 de contêineres e empacota as dependências do modelo em um contêiner do Docker.

Pré-requisitos

Criar

Importante

Os itens marcados (versão prévia) abaixo estão em versão prévia pública no momento. A versão prévia é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Tempo estimado: Aproximadamente 5 minutos.

A criação de uma instância de computação é um processo único em seu workspace. Você pode reutilizar a computação como uma estação de trabalho de desenvolvimento ou como um destino de computação para treinamento. Você pode ter várias instâncias de computação anexadas ao seu espaço de trabalho.

Os núcleos dedicados por região por cota de família de VM e cota regional total, que se aplicam à criação de instância de computação, são unificados e compartilhados com a cota de cluster de cálculo de treinamento do Azure Machine Learning. Parar a instância de computação não libera a cota para garantir que você poderá reiniciar a instância de computação. Não é possível alterar o tamanho da máquina virtual da instância de computação depois que ela é criada.

O exemplo a seguir demonstra como criar uma instância de computação:

import datetime
import time

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

# Choose a name for your instance
# Compute instance name should be unique across the azure region
compute_name = "ci{}".format(ws._workspace_id)[:10]

# Verify that instance does not exist already
try:
    instance = ComputeInstance(workspace=ws, name=compute_name)
    print('Found existing instance, use it.')
except ComputeTargetException:
    compute_config = ComputeInstance.provisioning_configuration(
        vm_size='STANDARD_D3_V2',
        ssh_public_access=False,
        # vnet_resourcegroup_name='<my-resource-group>',
        # vnet_name='<my-vnet-name>',
        # subnet_name='default',
        # admin_user_ssh_public_key='<my-sshkey>'
    )
    instance = ComputeInstance.create(ws, compute_name, compute_config)
    instance.wait_for_completion(show_output=True)

Para obter mais informações sobre as classes, os métodos e os parâmetros usados neste exemplo, confira os seguintes documentos de referência:

Você também pode criar uma instância de computação com um modelo de Azure Resource Manager.

Habilitar acesso SSH

O acesso SSH está desabilitado por padrão. O acesso SSH não pode ser alterado após a criação. Habilite o acesso se você planeja depurar interativamente com o VS Code Remote.

Depois de selecionar Próximo: Configurações avançadas:

  1. Ative Habilitar acesso SSH.
  2. Em Origem de chave pública SSH, selecione uma das opções na lista suspensa:
    • Se você Gerar um novo par de chaves:
      1. Insira um nome para a chave em Nome do par de chaves.
      2. Selecione Criar.
      3. Selecione Baixar chave privada e criar computação. Geralmente, a chave é baixada na pasta Downloads.
    • Se você selecionar Usar chave pública existente armazenada no Azure, procure e selecione a chave em Chave armazenada.
    • Se você selecionar Usar chave pública existente, forneça uma chave pública RSA no formato de linha única (começando com "ssh-rsa") ou o formato PEM de várias linhas. É possível gerar chaves SSH usando ssh-keygen no Linux e no OS X, ou PuTTYGen no Windows.

Depois que a instância de computação for criada e estiver em execução, confira Conexão com acesso SSH.

Criar em nome de (versão prévia)

Como administrador, você pode criar uma instância de computação em nome de um cientista de dados e atribuir a instância a elas com:

O cientista de dados para o qual você cria a instância de computação precisa das seguintes permissões do Azure RBAC (controle de acesso baseado em função) :

  • Microsoft.MachineLearningServices/workspaces/computes/start/action
  • Microsoft.MachineLearningServices/workspaces/computes/stop/action
  • Microsoft.MachineLearningServices/workspaces/computes/restart/action
  • Microsoft.MachineLearningServices/workspaces/computes/applicationaccess/action
  • Microsoft.MachineLearningServices/workspaces/computes/updateSchedules/action

O cientista de dados pode iniciar, parar e reiniciar a instância de computação. Eles podem usar a instância de computação para:

  • Jupyter
  • JupyterLab
  • RStudio
  • Notebooks integrados

Agendar início e parada automáticos (versão prévia)

Defina vários agendamentos para desligamento automático e início automático. Por exemplo, crie uma agenda para começar às 9:00 e parar às 18:00 de segunda-feira a quinta-feira e uma segunda agenda para começar às 9:00 e parar às 16:00 de sexta-feira. Você pode criar um total de quatro agendamentos por instância de computação.

Os agendamentos também podem ser definidos para criar em nome das instâncias de computação. Você pode criar um agendamento para criar uma instância de computação em um estado parado. Isso é particularmente útil quando um usuário cria uma instância de computação em nome de outro usuário.

Criar um agendamento no estúdio

  1. Preencha o formulário.

  2. Na segunda página do formulário, abra Mostrar configurações avançadas.

  3. Selecione Adicionar agendamento para adicionar um novo agendamento.

    Captura de tela: Adicionar agendamento nas configurações avançadas.

  4. Selecione Iniciar instância de computação ou Parar instância de computação.

  5. Selecione o Fuso horário.

  6. Selecione o Tempo de inicialização ou o Tempo de desligamento.

  7. Selecione os dias em que este agendamento está ativo.

    Captura de tela: agendamento de uma instância de computação para desligar.

  8. Selecione Adicionar agendamento novamente se você deseja criar outro agendamento.

Depois que a instância de computação for criada, você poderá exibir, editar ou adicionar novos agendamentos na seção de detalhes da instância de computação. Observe que os rótulos de fuso horário não são responsáveis pelo horário de verão. Por exemplo, (UTC+01:00) Amsterdã, Berlin, Berna, Roma, Estocolmo, Viena, é atualmente UTC+02:00 durante o horário de verão.

Criar um agendamento com um modelo do Resource Manager

Você pode agendar a inicialização automática e a parada de uma instância de computação usando um modelo do Resource Manager.

No modelo do Resource Manager, adicione:

"schedules": "[parameters('schedules')]"

Use expressões cron ou LogicApps para definir o agendamento que inicia ou interrompe a instância no arquivo de parâmetro:

        "schedules": {
        "value": {
        "computeStartStop": [
          {
            "triggerType": "Cron",
            "cron": {              
              "timeZone": "UTC",
              "expression": "0 18 * * *"
            },
            "action": "Stop",
            "status": "Enabled"
          },
          {
            "triggerType": "Cron",
            "cron": {              
              "timeZone": "UTC",
              "expression": "0 8 * * *"
            },
            "action": "Start",
            "status": "Enabled"
          },
          { 
            "triggerType": "Recurrence", 
            "recurrence": { 
              "frequency": "Day", 
              "interval": 1, 
              "timeZone": "UTC", 
              "schedule": { 
                "hours": [17], 
                "minutes": [0]
              } 
            }, 
            "action": "Stop", 
            "status": "Enabled" 
          } 
        ]
      }
    }
  • A ação pode ter o valor “Iniciar” ou “Parar”.

  • Para o tipo de gatilho Recurrence use a mesma sintaxe do aplicativo lógico com este esquema de recorrência.

  • Para o tipo de gatilho cron, use a sintaxe Cron padrão:

    // Crontab expression format: 
    // 
    // * * * * * 
    // - - - - - 
    // | | | | | 
    // | | | | +----- day of week (0 - 6) (Sunday=0) 
    // | | | +------- month (1 - 12) 
    // | | +--------- day of month (1 - 31) 
    // | +----------- hour (0 - 23) 
    // +------------- min (0 - 59) 
    // 
    // Star (*) in the value field above means all legal values as in 
    // braces for that column. The value column can have a * or a list 
    // of elements separated by commas. An element is either a number in 
    // the ranges shown above or two numbers in the range separated by a 
    // hyphen (meaning an inclusive range). 
    

Use a Azure Policy para aplicar um agendamento de desligamento que exista para cada instância de computação em uma assinatura ou para definir por padrão um agendamento, se não houver nenhum.

Personalizar a instância de computação com um script (versão prévia)

Use um script de instalação para obter uma forma automatizada de personalizar e configurar a instância de computação no momento do provisionamento. Como administrador, você pode escrever um script de personalização a ser usado para provisionar todas as instâncias de computação no workspace de acordo com os seus requisitos.

Alguns exemplos do que você pode fazer em um script de instalação:

  • Instalar pacotes, ferramentas e software
  • Montar dados
  • Criar um ambiente do Conda personalizado e kernels do Jupyter
  • Clonar repositórios git e definir o git config
  • Definir proxies de rede
  • Definir variáveis de ambiente
  • Instalar extensões do JupyterLab

Criar o script de instalação

O script de instalação é um script de shell, que é executado como rootuser. Crie ou carregue o script nos seus arquivos de Notebooks:

  1. Entre no estúdio e selecione o seu workspace.
  2. À esquerda, selecione Notebooks
  3. Use a ferramenta Adicionar arquivos para criar ou carregar o script do shell de instalação. Verifique se o nome de arquivo do script termina em ".sh". Ao criar um arquivo, altere também o Tipo de arquivo para bash(.sh) .

Criar ou carregar o script de instalação no arquivo de Notebooks no estúdio

Quando o script é executado, o diretório de trabalho atual do script é o diretório em que ele foi carregado. Por exemplo, se você carregar o script em Usuários > administrador, a localização do script na instância de computação e no diretório de trabalho atual quando o script for executado será /home/azureuser/cloudfiles/code/Users/admin. Isso permite que você use caminhos relativos no script.

Os argumentos de script podem ser referenciados no script como $1, $2 etc.

Se o seu script estava realizando algo específico no azureuser, como instalar o ambiente do Conda ou o kernel do Jupyter, você precisa colocá-lo em um bloco sudo -u azureuser da seguinte maneira

#!/bin/bash

set -e

# This script installs a pip package in compute instance azureml_py38 environment.

sudo -u azureuser -i <<'EOF'

PACKAGE=numpy
ENVIRONMENT=azureml_py38 
conda activate "$ENVIRONMENT"
pip install "$PACKAGE"
conda deactivate
EOF

O comando sudo -u azureuser altera o diretório de trabalho atual para /home/azureuser. Além disso, você não pode acessar os argumentos de script nesse bloco.

Para outros scripts de exemplo, confira azureml-examples.

Você também pode usar as seguintes variáveis de ambiente no seu script:

  1. CI_RESOURCE_GROUP
  2. CI_WORKSPACE
  3. CI_NAME
  4. CI_LOCAL_UBUNTU_USER. Isso aponta para azureuser

Você pode usar o script de instalação em conjunto com a Azure Policy para aplicar ou definir como padrão um script de instalação para cada criação de instância de computação. O valor padrão para o tempo limite do script de instalação é de 15 minutos. Isso pode ser alterado por meio da interface do usuário do Studio ou por meio de modelos do ARM usando o parâmetro DURATION. DURATION é um número de ponto flutuante com um sufixo opcional: “s” para segundos (o padrão), “m” para minutos, “h” para horas ou “d” para dias.

Usar o script no estúdio

Depois de armazenar o script, especifique-o durante a criação da sua instância de computação:

  1. Entre no estúdio e selecione o seu workspace.
  2. Selecione Computação à esquerda.
  3. Selecione +Novo para criar uma instância de computação.
  4. Preencha o formulário.
  5. Na segunda página do formulário, abra Mostrar configurações avançadas.
  6. Ative Provisionar com o script de instalação.
  7. Navegue até o script de shell que você salvou. Ou carregue um script do seu computador.
  8. Adicione argumentos de comando conforme necessário.

Provisionar uma instância de computação com um script de instalação no estúdio.

Se o armazenamento do workspace estiver anexado a uma rede virtual, talvez você não consiga acessar o arquivo de script de instalação, a menos que você esteja acessando o Estúdio de dentro da rede virtual.

Use um script no modelo do Resource Manager

Em um modelo do Resource Manager, adicione setupScripts para invocar o script de instalação quando a instância de computação for provisionada. Por exemplo:

"setupScripts":{
    "scripts":{
        "creationScript":{
        "scriptSource":"workspaceStorage",
        "scriptData":"[parameters('creationScript.location')]",
        "scriptArguments":"[parameters('creationScript.cmdArguments')]"
        }
    }
}

O scriptData acima especifica o local do script de criação no compartilhamento de arquivo de notebooks, como Users/admin/testscript.sh. scriptArguments opcional acima e especifica os argumentos para o script de criação.

Em vez disso, você pode fornecer o script embutido para um modelo do Resource Manager. O comando do shell pode se referir a todas as dependências carregadas no compartilhamento de arquivo dos notebooks. Quando você usa uma cadeia de caracteres embutida, o diretório de trabalho do script é /mnt/batch/tasks/shared/LS_root/mounts/clusters/ciname/code/Users.

Por exemplo, especifique uma cadeia de caracteres de comando codificada em base64 para scriptData:

"setupScripts":{
    "scripts":{
        "creationScript":{
        "scriptSource":"inline",
        "scriptData":"[base64(parameters('inlineCommand'))]",
        "scriptArguments":"[parameters('creationScript.cmdArguments')]"
        }
    }
}

Logs de script de instalação

Os logs da execução do script de instalação aparecem na pasta de logs na página de detalhes da instância de computação. Os logs são armazenados novamente no compartilhamento de arquivo dos notebooks na pasta Logs<compute instance name>. Os argumentos de comando e o arquivo de script de uma instância de computação específica são mostrados na página de detalhes.

Gerenciar

Iniciar, parar, reiniciar, excluir uma instância de computação. Uma instância de computação não reduz verticalmente automaticamente, portanto, certifique-se de interromper o recurso para evitar encargos contínuos. Parar uma instância de computação a desaloca. Em seguida, inicie-o novamente quando precisar. Embora parar a instância de computação interrompa a cobrança por horas de computação, você ainda será cobrado por disco, IP público e Standard Load Balancer.

Você pode criar um agendamento para a instância de computação iniciar e parar automaticamente com base em uma hora e dia da semana.

Dica

A instância de computação tem um disco de SO de 120 GB. Se você ficar sem espaço em disco, use o terminal para limpar pelo menos 1-2 GB antes de parar ou reiniciar a instância de computação. Não pare a instância de computação emitindo um desligamento sudo a partir do terminal.

Nos exemplos abaixo, o nome da instância de computação é instância

  • Obter status

    # get_status() gets the latest status of the ComputeInstance target
    instance.get_status()
    
  • Stop

    # stop() is used to stop the ComputeInstance
    # Stopping ComputeInstance will stop the billing meter and persist the state on the disk.
    # Available Quota will not be changed with this operation.
    instance.stop(wait_for_completion=True, show_output=True)
    
  • Iniciar

    # start() is used to start the ComputeInstance if it is in stopped state
    instance.start(wait_for_completion=True, show_output=True)
    
  • Reiniciar

    # restart() is used to restart the ComputeInstance
    instance.restart(wait_for_completion=True, show_output=True)
    
  • Excluir

    # delete() is used to delete the ComputeInstance target. Useful if you want to re-use the compute name
    instance.delete(wait_for_completion=True, show_output=True)
    

O Azure RBAC permite controlar quais usuários no workspace podem criar, excluir, iniciar, parar, reiniciar uma instância de computação. Todos os usuários na função colaborador e proprietário do workspace podem criar, excluir, iniciar, parar e reiniciar instâncias de computação no workspace. No entanto, somente o criador de uma instância de computação específica ou o usuário atribuído se ele foi criado em seu nome, tem permissão para acessar Jupyter, JupyterLab e RStudio nessa instância de computação. Uma instância de computação é dedicada a um único usuário que tem acesso de raiz e pode acessar o terminal por meio de Jupyter/JupyterLab/RStudio. A instância de computação terá login único e todas as ações usarão a identidade desse usuário para o Azure RBAC e a atribuição das execuções de experimento. O acesso SSH é controlado por meio do mecanismo de chave pública/privada.

Essas ações podem ser controladas pelo Azure RBAC:

  • Microsoft.MachineLearningServices/workspaces/computes/read
  • Microsoft.MachineLearningServices/workspaces/computes/write
  • Microsoft.MachineLearningServices/workspaces/computes/delete
  • Microsoft.MachineLearningServices/workspaces/computes/start/action
  • Microsoft.MachineLearningServices/workspaces/computes/stop/action
  • Microsoft.MachineLearningServices/workspaces/computes/restart/action
  • Microsoft.MachineLearningServices/workspaces/computes/updateSchedules/action

Para criar uma instância de computação, você precisará obter permissões para as seguintes ações:

  • Microsoft.MachineLearningServices/workspaces/computes/write
  • Microsoft.MachineLearningServices/workspaces/checkComputeNameAvailability/action

Próximas etapas