Share via


Criar pacotes de modelo (versão prévia)

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

Importante

Esse recurso está atualmente em visualização pública. Essa 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.

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 assinatura do Azure. Caso não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar. Experimente a versão gratuita ou paga do Azure Machine Learning.

  • Um workspace do Azure Machine Learning. Se você não tiver um, use as etapas no artigo Como gerenciar workspaces para criar um.

  • O RBAC do Azure (controle de acesso baseado em função) do Azure é usado para permitir acesso a 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 workspace do Azure Machine Learning ou uma função personalizada. Para obter mais informações, consulte Gerenciar acesso a um workspace do Azure Machine Learning.

Sobre este exemplo

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

Clonar o repositório

O exemplo neste artigo é baseado em exemplos de códigos contidos no repositório azureml-examples . Para executar os comandos localmente sem precisar copiar/colar o YAML e outros arquivos, primeiro clone o repositório e 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.

Conectar-se ao workspace

Conecte-se ao workspace do Azure Machine Learning no qual 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 do MLOps.

Você pode criar pacotes de modelo especificando:

  • Modelo a ser empacotado: cada pacote pode conter apenas um único modelo. O Azure Machine Learning não dá suporte ao empacotamento de vários modelos no mesmo pacote.
  • Ambiente base: os ambientes são usados para indicar a imagem base e, em pacotes Python, as dependências de que seu modelo precisa. Para modelos do 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.

Registre o modelo

Os pacotes de modelo exigem que o modelo seja registrado no workspace 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 workspace. Você pode ignorar 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

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

Observação

Como o ambiente base é diferente do ambiente usado para implantação de modelo para pontos de extremidade online e em lotes? Quando você implanta modelos em pontos de extremidade, seu ambiente precisa incluir as dependências do modelo e os pacotes Python necessários para que os pontos de extremidade online gerenciados funcionem. Isso traz um processo manual para a implantação, em que você precisa combinar os requisitos do modelo com os requisitos da plataforma de serviço. Por outro lado, o uso de pacotes de modelo remove esse atrito, já que os pacotes necessários para o servidor de inferência serão injetados automaticamente no pacote de 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 dá suporte aos seguintes atributos:

Atributo Tipo Descrição Necessá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 em que as dependências do modelo são especificadas. Sim, a menos que o modelo seja MLflow.
base_environment_source.type str O tipo da imagem base. Há suporte apenas para o uso de outro ambiente, pois há suporte para a imagem base (type: environment_asset).
base_environment_source.resource_id str A ID do recurso do ambiente base a ser usado. Use o formato azureml:<name>:<version> ou uma ID de recurso longa.
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 serviço TensorFlow ou Torch Serve. Sim
inferencing_server.code_configuration object A configuração de 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 no pacote. Os valores possíveis são download (padrão) e copy. Use download quando quiser que o modelo seja baixado do registro de modelo no momento da implantação. Essa opção cria imagens menores do Docker, pois o modelo não está incluído nele. Use copy quando quiser desconectar a imagem do Azure Machine Learning. O modelo será copiado dentro da imagem do Docker no momento do pacote. copy não tem suporte em workspaces 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 de pacote de modelo:

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

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

Os pacotes de modelo podem resolver dependências do Python que estão disponíveis em feeds privados. Para usar essa funcionalidade, você precisa criar uma conexão do seu workspace para o feed e especificar a configuração de token PAT. O código Python a seguir mostra como você pode configurar o workspace no qual você está executando a operação de 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 para Empacotar um modelo. No exemplo a seguir, o ambiente base do pacote usa um feed privado para a dependência bar do 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 de modelo serão indicadas dentro do próprio modelo e, portanto, um ambiente base não será necessário. Em vez disso, especifique dependências de feed privado ao registrar o modelo em log, conforme explicado em Modelos de log 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 de implantação geralmente é outro workspace. Ao criar pacotes nessa configuração, use a propriedade target_environment para especificar o local completo em que 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 t5-base de um registro:

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

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

    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 desejamos empacotar é o 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 modelo:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. O pacote agora é criado no workspace de destino e 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 próprio modelo seja copiado dentro da imagem do docker gerada em vez de referenciada do registro de modelo no Azure Machine Learning.

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óxima etapa