O que são os ambientes do Azure Machine Learning?
Os ambientes do Azure Machine Learning são um encapsulamento do ambiente onde o treinamento ou a inferência do aprendizado de máquina acontecem. 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).
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 selecionados são hospedados no registro AzureML, que é um registro de aprendizado de máquina hospedado pela Microsoft. Para obter uma lista completa, consulte os ambientes no registro AzureML.
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 Azure Machine Learning. Semelhante aos ambientes selecionados, você pode compartilhar ambientes gerenciados pelo usuário entre espaços de trabalho usando um registro de aprendizado de máquina que você cria e gerencia.
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 do SDK Python do Azure Machine Learning, da CLI do Azure Machine Learning, do estúdio do Azure Machine Learning e da 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 estão listados, mas você pode usar a versão para recuperá-los.
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 Aprendizado de Máquina do Azure 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 do Azure Machine Learning 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 selecionados já estão armazenados em cache no Registro do Azure Machine Learning. No início da execução do trabalho, o destino de computação recupera a imagem 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 do Azure Machine Learning, uma nova imagem será criada. Para ambientes gerenciados pelo sistema, a construção da imagem consiste em duas etapas:
- Baixar uma imagem base e executar todas as etapas do Docker
- 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, o contexto do docker é 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 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 a partir da definição de ambiente. Em seguida, ele compara o hash 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 nome e a versão do ambiente não têm efeito sobre o hash. 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 altera o hash e requer 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 os hashes no registro do contêiner do 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, que resultam 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.
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
paranumpy==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 alatest
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:
- Repositório GitHub de imagens base do Aprendizado de Máquina do Azure.
- Usar um contêiner personalizado para implantar um modelo em um ponto de extremidade online
- Gerenciando ambientes e imagens de contêiner
Conteúdos relacionados
- 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.