Criar pacotes de modelo (visualização)

O pacote de modelo é um recurso do Azure Machine Learning que permite coletar todas as dependências necessárias para implantar um modelo de aprendizado de máquina em uma plataforma de serviço. A criação de pacotes antes da implantação de modelos fornece uma implantação robusta e confiável e um fluxo de trabalho MLOps mais eficiente. Os pacotes podem ser movidos entre espaços de trabalho e até mesmo fora do Azure Machine Learning.

Importante

Esta funcionalidade está atualmente em pré-visualização pública. Esta versão de pré-visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas.

Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

Neste artigo, você aprenderá a empacotar um modelo para implantação.

Pré-requisitos

Antes de seguir as etapas neste artigo, verifique se você tem os seguintes pré-requisitos:

  • Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente a versão gratuita ou paga do Azure Machine Learning.

  • Uma área de trabalho do Azure Machine Learning. Se você não tiver um, use as etapas no artigo Como gerenciar espaços detrabalho para criar um.

  • Os controlos de acesso baseado em funções (RBAC do Azure) são utilizados para conceder acesso às operações no Azure Machine Learning. Para executar as etapas neste artigo, sua conta de usuário deve receber a função de proprietário ou colaborador para o espaço de trabalho do Azure Machine Learning ou uma função personalizada. Para obter mais informações, consulte Gerenciar o acesso a um espaço de trabalho do Azure Machine Learning.

Sobre este exemplo

Neste exemplo, você aprenderá como empacotar modelos no Azure Machine Learning.

Clonar o repositório

O exemplo neste artigo é baseado em exemplos de código contidos no repositório azureml-examples . Para executar os comandos localmente sem ter que copiar/colar YAML e outros arquivos, primeiro clone o repositório e, em seguida, altere os diretórios para a pasta:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

Esta seção usa o exemplo na pasta endpoints/online/deploy-packages/custom-model.

Ligar à sua área de trabalho

Conecte-se ao espaço de trabalho do Azure Machine Learning onde você fará seu trabalho.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Empacotar um modelo

Você pode criar pacotes de modelo explicitamente para permitir que você controle como a operação de empacotamento é feita. Use este fluxo de trabalho quando:

  • Você deseja personalizar como o pacote de modelo é criado.
  • Você deseja implantar o pacote de modelo fora do Azure Machine Learning.
  • Você deseja usar pacotes de modelo em um fluxo de trabalho MLOps.

Você pode criar pacotes de modelo especificando:

  • Modelo para embalagem: Cada pacote de modelo pode conter apenas um único modelo. O Azure Machine Learning não oferece suporte ao empacotamento de vários modelos no mesmo pacote de modelo.
  • Ambiente base: Os ambientes são usados para indicar a imagem base e, em pacotes Python, as dependências do modelo precisam. Para modelos MLflow, o Azure Machine Learning gera automaticamente o ambiente base. Para modelos personalizados, você precisa especificá-lo.
  • Tecnologia de serviço: A pilha de inferência usada para executar o modelo.

Registar o modelo

Os pacotes de modelo exigem que o modelo seja registrado em seu espaço de trabalho ou em um registro do Azure Machine Learning. Neste exemplo, você já tem uma cópia local do modelo no repositório, portanto, só precisa publicar o modelo no registro no espaço de trabalho. Você pode pular esta seção se o modelo que está tentando implantar já estiver registrado.

MODEL_NAME='sklearn-regression'
MODEL_PATH='model'
az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model

Criar o ambiente base

Os ambientes base são usados para indicar a imagem base e as dependências do pacote Python modelo. Nosso modelo requer que os seguintes pacotes sejam usados conforme indicado no arquivo conda:

conda.yaml

name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.9
  - numpy=1.23.5
  - pip=23.0.1
  - scikit-learn=1.2.2
  - scipy=1.10.1
  - xgboost==1.3.3

Nota

Qual é a diferença entre o ambiente base e o ambiente que você usa para implantação de modelo em endpoints online e em lote? Quando você implanta modelos em endpoints, seu ambiente precisa incluir as dependências do modelo e os pacotes Python necessários para que os endpoints online gerenciados funcionem. Isso traz um processo manual para a implantação, onde você tem que combinar os requisitos do seu modelo com os requisitos da plataforma de serviço. Por outro lado, o uso de pacotes modelo remove esse atrito, uma vez que os pacotes necessários para o servidor de inferência serão automaticamente injetados no pacote modelo no momento do empacotamento.

Crie o ambiente da seguinte maneira:

Crie uma definição de ambiente:

sklearn-regression-env.yml

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: sklearn-regression-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: conda.yaml
description: An environment for models built with XGBoost and Scikit-learn.

Em seguida, crie o ambiente:

az ml environment create -f environment/sklearn-regression-env.yml

Criar uma especificação de pacote

Você pode criar pacotes de modelo no Azure Machine Learning, usando a CLI do Azure ou o SDK do Azure Machine Learning para Python. A especificação do pacote personalizado suporta os seguintes atributos:

Atributo Tipo Descrição Obrigatório
target_environment str O nome do pacote a ser criado. O resultado de uma operação de pacote é um ambiente no Azure Machine Learning. Sim
base_environment_source object A imagem base a ser usada para criar o pacote onde as dependências para o modelo são especificadas. Sim, a menos que o modelo seja MLflow.
base_environment_source.type str O tipo da imagem base. Somente o uso de outro ambiente como a imagem base é suportada (type: environment_asset) é suportado.
base_environment_source.resource_id str A ID do recurso do ambiente base a ser usado. Use o formato azureml:<name>:<version> ou um ID de recurso longo.
inferencing_server object O servidor de inferência a ser usado. Sim
inferencing_server.type azureml_online
custom
Use azureml_online para o servidor de inferência do Azure Machine Learning ou custom para um servidor online personalizado como o TensorFlow serving ou o Torch Serve. Sim
inferencing_server.code_configuration object A configuração do código com a rotina de inferência. Ele deve conter pelo menos um arquivo Python com métodos init e run. Sim, a menos que o modelo seja MLflow.
model_configuration object A configuração do modelo. Use esse atributo para controlar como o modelo é empacotado na imagem resultante. Não
model_configuration.mode download
copy
Indique como o modelo seria colocado na embalagem. Os valores possíveis são download (padrão) e copy. Use download quando desejar que o modelo seja baixado do registro do modelo no momento da implantação. Esta opção cria imagens docker menores, uma vez que o modelo não está incluído nela. Use copy quando quiser desconectar a imagem do Aprendizado de Máquina do Azure. O modelo será copiado dentro da imagem do docker no momento do pacote. copy não é suportado em espaços de trabalho habilitados para link privado. Não
  1. Crie uma especificação de pacote da seguinte maneira:

    package-moe.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    base_environment_source:
        type: environment_asset
        resource_id: azureml:sklearn-regression-env:1
    target_environment: sklearn-regression-online-pkg
    inferencing_server: 
        type: azureml_online
        code_configuration:
          code: src
          scoring_script: score.py
    
  2. Inicie a operação do pacote de modelos:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. O resultado da operação do pacote é um ambiente.

Empacotar um modelo que tenha dependências em feeds Python privados

Os pacotes de modelo podem resolver dependências Python que estão disponíveis em feeds privados. Para usar esse recurso, você precisa criar uma conexão do seu espaço de trabalho com o feed e especificar a configuração do token PAT. O código Python a seguir mostra como você pode configurar o espaço de trabalho onde está executando a operação do pacote.

from azure.ai.ml.entities import WorkspaceConnection
from azure.ai.ml.entities import PatTokenConfiguration

# fetching secrets from env var to secure access, these secrets can be set outside or source code
git_pat = os.environ["GIT_PAT"]

credentials = PatTokenConfiguration(pat=git_pat)

ws_connection = WorkspaceConnection(
    name="<workspace_connection_name>",
    target="<git_url>",
    type="git",
    credentials=credentials,
)

ml_client.connections.create_or_update(ws_connection)

Depois que a conexão for criada, crie o pacote de modelo conforme descrito na seção Empacotar um modelo. No exemplo a seguir, o ambiente base do pacote usa um feed privado para a dependência bardo Python , conforme especificado no seguinte arquivo conda:

conda.yml

name: foo
channels:
  - defaults
dependencies:
  - python
  - pip
  - pip:
    - --extra-index-url <python_feed_url>
    - bar

Se você estiver usando um modelo MLflow, as dependências do modelo serão indicadas dentro do próprio modelo e, portanto, um ambiente base não será necessário. Em vez disso, especifique as dependências de feed privado ao registrar o modelo, conforme explicado em Registrando modelos com uma assinatura, ambiente ou exemplos personalizados.

Empacotar um modelo hospedado em um registro

Os pacotes de modelo fornecem uma maneira conveniente de coletar dependências antes da implantação. No entanto, quando os modelos são hospedados em registros, o destino da implantação geralmente é outro espaço de trabalho. Ao criar pacotes nesta configuração, use a target_environment propriedade para especificar o local completo onde você deseja que o pacote de modelo seja criado, em vez de apenas seu nome.

O código a seguir cria um pacote do modelo a t5-base partir de um registro:

  1. Conecte-se ao registro onde o modelo está localizado e ao espaço de trabalho no qual você precisa que o pacote de modelo seja criado:

    az login
    
  2. Obtenha uma referência ao modelo que deseja empacotar. Neste caso, estamos empacotando o modelo t5-base a partir do azureml registro.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. Configure uma especificação de pacote. Como o modelo que queremos empacotar é MLflow, o ambiente base e o script de pontuação são opcionais.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. Inicie a operação para criar o pacote de modelos:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. O pacote agora é criado no espaço de trabalho de destino e está pronto para ser implantado.

Modelos de pacote para implantar fora do Azure Machine Learning

Os pacotes de modelo podem ser implantados fora do Azure Machine Learning, se necessário. Para garantir a portabilidade, você só precisa garantir que a configuração do modelo em seu pacote tenha o modo definido para copy que o modelo em si seja copiado dentro da imagem do docker gerada em vez de referenciado do registro do modelo no Aprendizado de Máquina do Azure.

O código a seguir mostra como configurar copy em um pacote de modelo:

package-external.yml

$schema: http://azureml/sdk-2-0/ModelVersionPackage.json
base_environment_source:
    type: environment_asset
    resource_id: azureml:sklearn-regression-env:1
target_environment: sklearn-regression-docker-pkg
inferencing_server: 
    type: azureml_online
    code_configuration:
      code: src
      scoring_script: score.py
model_configuration:
  mode: copy

Próximo passo