O que são os ambientes do Azure Machine Learning?

Os ambientes do Azure Machine Learning são um encapsulamento do ambiente onde o seu treinamento de 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 versionadas em seu espaço de trabalho de Aprendizado de Máquina que permitem fluxos de trabalho de aprendizado de máquina reproduzíveis, auditáveis e portáteis em vários destinos de computação.

Você pode usar um Environment objeto para:

  • Desenvolva seu roteiro de treinamento.
  • Reutilize o mesmo ambiente no Azure Machine Learning Compute para treinamento de modelo em escala.
  • Implante seu modelo com esse mesmo ambiente.
  • Revisite o ambiente em que um modelo existente foi treinado.

O diagrama a seguir ilustra como você pode usar um único Environment objeto em sua configuração de trabalho (para treinamento) e sua configuração de inferência e implantação (para implantações de serviço 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 divididos em três categorias: curados, gerenciados pelo usuário e gerenciados pelo sistema.

Os ambientes selecionados são fornecidos pelo 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 Python e configurações para ajudá-lo a começar com várias estruturas de aprendizado de máquina. Esses ambientes pré-criados também permitem um tempo de implantação mais rápido. Os ambientes curados são hospedados no Registro do AzureML. Para obter uma lista completa, consulte os ambientes no azureml registry.

Em 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. Certifique-se também de incluir todas as dependências necessárias para a implantação do modelo. O ambiente gerenciado pelo usuário pode ser BYOC (Bring Your Own Container) ou Docker Build Context baseado que delega a materialização da imagem ao AzureML.

Você usa ambientes gerenciados pelo sistema quando deseja que o conda gerencie o ambiente Python para você. Um novo ambiente de conda é materializado a partir de sua especificação de conda em cima de uma imagem de docker base.

Criar e gerir ambientes

Você pode criar ambientes a partir de clientes como o SDK Python do Azure Machine Learning, a CLI do Azure Machine Learning, a página Ambientes no estúdio do Azure Machine Learning e a extensão VS Code. Cada cliente permite que você personalize a imagem base, o Dockerfile e a camada 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 geridos através do seu espaço de trabalho, o que lhe permite:

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

Os ambientes "anónimos" são automaticamente registados na sua área de trabalho quando submete uma experiência. Eles não serão listados, mas podem ser recuperados por versão.

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

Criação, armazenamento em cache e reutilização de ambientes

O Azure Machine Learning cria definições de ambiente em imagens do Docker. Ele 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 remota de um script de treinamento requer a criação de uma imagem do Docker. Por padrão, o AzureML gerencia o destino de compilação de imagem na cota de computação sem servidor do espaço de trabalho disponível se não houver um conjunto de computação dedicado para o espaço de trabalho.

Nota

Quaisquer restrições de rede no Espaço de Trabalho AzureML podem exigir configuração de computação de compilação de imagem gerenciada pelo usuário dedicado. Siga as etapas para proteger os recursos do espaço de trabalho.

Enviar 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 Aprendizado de Máquina do Azure 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 espaço de trabalho. Os ambientes curados já estão armazenados em cache no Registro do 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 para uma definição de ambiente específica ainda não existir na instância do Registro de contêiner associada ao Espaço de Trabalho AzureML, uma nova imagem será criada. Para ambientes gerenciados pelo sistema, a construção da imagem consiste em duas etapas:

  1. Baixar uma imagem base e executar todas as etapas do Docker
  2. Construção de um ambiente conda de acordo com as dependências conda especificadas na definição de ambiente.

Para ambientes gerenciados pelo usuário fornecidos, o contexto do docker será criado 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 Aprendizado de Máquina do Azure reutilizará a imagem armazenada em cache do registro de contêiner associado ao seu Espaço de Trabalho.

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 criar uma nova, o Aprendizado de Máquina do Azure calcula um valor de hash da definição de ambiente e o compara com os hashes de ambientes existentes. O hash serve como um identificador exclusivo para um ambiente e é baseado na definição de ambiente:

  • Imagem base
  • Etapas personalizadas do docker
  • Pacotes de Python

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

Nota

Você não poderá enviar alterações locais para um ambiente com curadoria sem alterar o nome do ambiente. Os prefixos "AzureML-" e "Microsoft" são reservados exclusivamente para ambientes com curadoria, e seu envio de trabalho falhará se o nome começar com qualquer um deles.

O valor de hash calculado do ambiente é comparado com aqueles no registro do contêiner de espaço de trabalho. Se houver uma correspondência, a imagem armazenada em cache será puxada e usada, caso contrário, uma compilação de imagem será acionada.

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

Diagram of environment caching and Docker images

As imagens reais armazenadas em cache no registro do contêiner do espaço de trabalho têm nomes semelhantes aos azureml/azureml_e9607b2514b066c851012848913ba19f do hash que aparece no final.

Importante

  • Se você criar um ambiente com uma dependência de pacote não fixada (por exemplo, numpy), o ambiente usará a versão do pacote que estava disponível quando o ambiente foi criado. Qualquer ambiente futuro que use uma definição correspondente usará a versão original.

    Para atualizar o pacote, especifique um número de versão para forçar uma reconstrução de imagem. Um exemplo disso seria mudar numpy para numpy==1.18.1. Novas dependências, incluindo as aninhadas, serão instaladas e poderão quebrar um cenário de trabalho anterior.

  • Usar uma imagem base não fixada, como mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 na definição do seu ambiente, pode resultar na reconstrução da imagem sempre que a latest tag for atualizada. Isso ajuda a imagem a receber os patches e atualizações do sistema mais recentes.

Correção de imagem

A Microsoft é responsável por corrigir as imagens base para vulnerabilidades de segurança conhecidas. As atualizações para as imagens suportadas são lançadas a cada duas semanas, com o compromisso de não haver vulnerabilidades não corrigidas com mais de 30 dias na versão mais recente da imagem. As imagens corrigidas são lançadas com uma nova tag imutável e a :latest tag é atualizada para a versão mais recente da imagem corrigida.

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 obter mais informações sobre as imagens base, consulte os seguintes links:

Próximos passos

  • Saiba como criar e usar ambientes no Azure Machine Learning.
  • Consulte a documentação de referência do SDK do Python para a classe de ambiente.