Compartilhar via


O que são ambientes do Azure Machine Learning?

Os ambientes de Azure Machine Learning são um encapsulamento do ambiente no qual o treinamento do aprendizado de máquina acontece. Eles especificam os pacotes Python e as configurações de software em torno de seus scripts de treinamento e pontuação. Os ambientes são entidades gerenciadas e com controle de versão em seu workspace do Machine Learning que permitem fluxos de trabalho de machine learning reproduzíveis, auditáveis e portáteis em vários destinos de computação.

Você pode usar um objeto Environment para:

  • Desenvolver seu script de treinamento.
  • Reutilizar o mesmo ambiente na Computação do Azure Machine Learning para treinamento de modelos em escala.
  • Implantar seu modelo com o mesmo ambiente.
  • Revisitar o ambiente no qual um modelo existente foi treinado.

O diagrama a seguir ilustra como usar um único objeto Environment em sua configuração de trabalho (para treinamento) e em sua configuração de inferência e implantação (para implantações de serviços Web).

Diagram of an environment in machine learning workflow

O ambiente, o destino de computação e o script de treinamento juntos formam a configuração do trabalho: a especificação completa de um trabalho de treinamento.

Tipos de ambientes

Os ambientes podem ser amplamente divididos em três categorias: organizados, gerenciados pelo usuárioe gerenciados pelo sistema.

Os ambientes organizados são fornecidos por Azure Machine Learning e estão disponíveis em seu espaço de trabalho por padrão. Destinados a serem usados como estão, eles contêm coleções de pacotes e configurações do Python para ajudá-lo a começar com várias estruturas do Machine Learning. Esses ambientes pré-criado também permitem um tempo de implantação mais rápido. Os ambientes coletados são hospedados no Registro AzureML. Para obter uma lista completa, consulte os ambientes no registro azureml.

Para ambientes gerenciados pelo usuário, você é responsável por configurar seu ambiente e instalar todos os pacotes de que seu script de treinamento precisa no destino de computação. Além disso, não se esqueça de incluir as dependências necessárias para a implantação de modelo. O ambiente gerenciado pelo usuário pode ser BYOC (Traga seu próprio contêiner) ou o Contexto de Build do Docker com base que delega a materialização de imagem ao AzureML.

Use ambientes gerenciados pelo sistema quando quiser que o Conda gerencie o ambiente do Python por você. Um novo ambiente Conda é materializado de sua especificação do Conda sobre uma imagem base do Docker.

Criar e gerenciar ambientes

Você pode criar ambientes por meio de clientes como o SDK do Python para o Azure Machine Learning, a CLI do Azure Machine Learning, a página Ambientes no Estúdio do Azure Machine Learning e a extensão do VS Code. Cada cliente permite que você personalize a imagem base, o Dockerfile e a camada do Python, se necessário.

Para obter exemplos de código específicos, consulte a seção "Criar um ambiente" de Como usar ambientes.

Os ambientes também são facilmente gerenciados por meio de seu espaço de trabalho, o que permite:

  • Registrar ambientes.
  • Buscar ambientes do seu espaço de trabalho para usar em treinamento ou implantação.
  • Criar uma instância de um ambiente pela edição de um ambiente existente.
  • Exibir alterações em seus ambientes ao longo do tempo, o que garante a reprodutibilidade.
  • Criar imagens do Docker automaticamente de seus ambientes.

Os ambientes “anônimos” são automaticamente registrados em seu espaço de trabalho quando você envia um experimento. Eles não serão listados, mas poderão ser recuperados pela versão.

Para obter exemplos de código, consulte a seção "Gerenciar ambientes" de Como usar ambientes.

Criação de ambiente, cache e reutilização

O Azure Machine Learning compila as definições de ambiente em imagens do Docker. Também armazena em cache os ambientes para que eles possam ser reutilizados em trabalhos de treinamento subsequentes e implantações de ponto de extremidade de serviço. A execução de um script de treinamento exige remotamente a criação de uma imagem do Docker. Por padrão, o AzureML gerencia o destino de build de imagem no workspace disponível cota de computação sem servidor se nenhum conjunto de computação dedicado para o workspace.

Observação

Qualquer restrição de rede no Workspace do AzureML pode exigir a configuração de computação de build de imagem gerenciada pelo usuário dedicada. Siga as etapas para recursos de workspace seguros.

Envio de um trabalho usando um ambiente

Quando você envia um trabalho remoto pela primeira vez usando um ambiente ou cria uma instância de ambiente manualmente, o Azure Machine Learning cria uma imagem para a especificação fornecida. A imagem de resultado é armazenada em cache na instância do registro de contêiner associada ao workspace. Os ambientes coletados já estão armazenados em cache no Registro AzureML. No início da execução do trabalho, a imagem é recuperada pelo destino de computação do registro de contêiner relevante.

Criando ambientes como imagens do Docker

Se a imagem de uma definição de ambiente específica ainda não existir na instância do registro de contêiner associada ao Workspace do AzureML, uma nova imagem será criada. Para ambientes gerenciados pelo sistema, o build de imagem consiste em duas etapas:

  1. Baixar uma imagem base e executar qualquer etapa do Docker
  2. Criar um ambiente Conda de acordo com as dependências Conda especificadas na definição de ambiente.

Para ambientes gerenciados pelo usuário, o contexto do Docker fornecido será compilado como está. Nesse caso, você é responsável por instalar quaisquer pacotes Python, incluindo-os em sua imagem base ou especificando etapas personalizadas do Docker.

Cache e reutilização de imagens

Se você usar a mesma definição de ambiente para outro trabalho, o Azure Machine Learning reutilizará a imagem armazenada em cache do registro de contêiner associado ao workspace.

Para exibir os detalhes de uma imagem em cache, verifique a página Ambientes no estúdio do Azure Machine Learning ou use MLClient.environments para obter e inspecionar o ambiente.

Para determinar se uma imagem armazenada em cache deve ser reutilizada ou se uma deve ser criada, o Azure Machine Learning calcula um valor de hash da definição do ambiente e o compara com os hashes dos ambientes existentes. O hash serve como um identificador exclusivo para um ambiente e se baseia nas definições de ambiente:

  • Base image
  • Etapas personalizadas do Docker
  • Pacotes do Python

O hash não é afetado pelo nome do ambiente ou pela versão. Se você renomear seu ambiente ou criar um novo com as mesmas configurações e pacotes que outro ambiente, o valor de hash permanecerá o mesmo. No entanto, as alterações de definição de ambiente, como adicionar ou remover um pacote do Python ou alterar uma versão do pacote, alteram o valor de hash resultante. A alteração da ordem de dependências ou canais em um ambiente também alterará o hash e exigirá uma nova compilação de imagem. Da mesma forma, qualquer alteração em um ambiente coletado resulta na criação de um ambiente personalizado.

Observação

Você não poderá enviar nenhuma alteração local a um ambiente organizado sem alterar o nome do ambiente. Os prefixos "AzureML-" e "Microsoft" são reservados exclusivamente para ambientes organizados, e o envio do trabalho falhará se o nome começar com um deles.

O valor de hash computado do ambiente é comparado com aqueles no registro de contêiner do Workspace. Se houver uma correspondência, a imagem armazenada em cache será puxada e usada, caso contrário, um build de imagem será disparado.

O diagrama a seguir mostra três definições de ambiente. Dois deles têm diferentes nomes e versões, mas imagens base e pacotes Python idênticos, o que resulta no mesmo hash e em uma imagem armazenada em cache correspondente. O terceiro ambiente tem diferentes pacotes e versões do Python, o que leva a um hash e a uma imagem armazenada em cache diferentes.

Diagram of environment caching and Docker images

Imagens em cache reais no registro de contêiner do workspace têm nomes semelhantes a azureml/azureml_e9607b2514b066c851012848913ba19f com o hash aparecendo no final.

Importante

  • Se você criar um ambiente com uma dependência de pacote desafixada (por exemplo numpy), o ambiente usará a versão do pacote disponível no momento da criação do ambiente. Além disso, todos os ambientes futuros que usarem uma definição correspondente usarão a versão original.

    Para atualizar o pacote, especifique um número de versão para forçar uma recompilação da imagem. Um exemplo disso seria alterar numpy para numpy==1.18.1. Serão instaladas novas dependências, incluindo aquelas aninhadas, que podem interromper um cenário de trabalho anterior.

  • Usar uma imagem base desafixada como mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 em sua definição de ambiente pode resultar na recompilação da imagem sempre que a marca latest for atualizada. Isso ajuda a imagem a receber os patches e as atualizações de sistema mais recentes.

Aplicação de patch de imagem

A Microsoft é responsável por aplicar patches às imagens base em relação a vulnerabilidades de segurança conhecidas. As atualizações para imagens com suporte são lançadas a cada duas semanas, com um compromisso de que não haverá vulnerabilidade sem patches com mais de 30 dias na última versão da imagem. Imagens com patch aplicado são lançadas com uma nova marca imutável e a :latest marca é atualizada para a versão mais recente da imagem com patch aplicado.

Você precisa atualizar os ativos associados do Azure Machine Learning para usar a imagem recém-corrigida. Por exemplo, ao trabalhar com um ponto de extremidade online gerenciado, você precisa reimplantar seu ponto de extremidade para usar a imagem corrigida.

Se você fornecer suas próprias imagens, será responsável por atualizá-las e atualizar os ativos do Azure Machine Learning que as usam.

Para saber mais sobre as imagens base, confira os seguintes links:

Próximas etapas