Creare pacchetti di modelli (anteprima)

La creazione del pacchetto di un modello è una funzionalità di Azure Machine Learning che consente di raccogliere tutte le dipendenze necessarie per distribuire un modello di Machine Learning a una piattaforma di gestione. La creazione di pacchetti prima della distribuzione dei modelli consente una distribuzione solida e affidabile e un flusso di lavoro MLOps più efficiente. È possibile spostare i pacchetti nelle aree di lavoro e persino al di fuori di Azure Machine Learning.

Importante

Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto non è consigliabile usarla per i carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate.

Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

In questo articolo viene illustrato come creare un pacchetto di un modello per la distribuzione.

Prerequisiti

Prima di seguire la procedura descritta in questo articolo, assicurarsi di disporre dei prerequisiti seguenti:

  • Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. Provare la versione gratuita o a pagamento di Azure Machine Learning.

  • Un'area di lavoro di Azure Machine Learning. Se non sono disponibili, è possibile seguire la procedura descritta nell'articolo Come gestire le aree di lavoro per crearne uno.

  • I controlli degli accessi in base al ruolo di Azure vengono usati per concedere l'accesso alle operazioni in Azure Machine Learning. Per eseguire la procedura descritta in questo articolo, all'account utente deve essere assegnato il ruolo di Proprietario o Collaboratore per l'area di lavoro di Azure Machine Learning o a un ruolo personalizzato. Per altre informazioni, vedere Gestire l'accesso a un'area di lavoro di Azure Machine Learning.

Informazioni su questo esempio

Nell'esempio seguente, verrà illustrato come creare pacchetti di modelli in Azure Machine Learning.

Clonare il repository

L'esempio contenuto in questo articolo si basa sugli esempi di codice contenuti nel repository azureml-examples. Per eseguire i comandi in locale senza dover copiare o incollare il file YAML e altri file, innanzitutto clonare il repository quindi cambiare le directory nella cartella:

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

Questa sezione usa l'esempio nella cartella endpoint/online/deploy-packages/custom-model.

Connettersi all'area di lavoro

Connettersi all'area di lavoro di Azure Machine Learning in cui si lavorerà.

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

Creare il pacchetto di un modello

È possibile creare pacchetti di modelli in modo esplicito per consentire di controllare come viene eseguita l'operazione di creazione del pacchetto. Usare questo flusso di lavoro quando:

  • Si vuole personalizzare la modalità di creazione del pacchetto del modello.
  • Si vuole distribuire il pacchetto del modello all'esterno di Azure Machine Learning.
  • Si vogliono usare pacchetti di modelli in un flusso di lavoro MLOps.

È possibile creare pacchetti di modelli specificando:

  • Modello di cui creare il pacchetto: ogni pacchetto di modello può contenere solo un singolo modello. Azure Machine Learning non supporta la creazione di pacchetti di più modelli nello stesso pacchetto di modello.
  • Ambiente di base: gli ambienti vengono usati per indicare l'immagine di base e nei pacchetti Python devono essere dipendenze del modello. Per i modelli MLflow, Azure Machine Learning genera automaticamente l'ambiente di base. Per i modelli personalizzati, è necessario specificarlo.
  • La tecnologia di gestione: lo stack di inferenza usato per eseguire il modello.

Registrare il modello

I pacchetti di modelli richiedono la registrazione del modello nell'area di lavoro o in un registro di Azure Machine Learning. In questo esempio è già disponibile una copia locale del modello nel repository, quindi è sufficiente pubblicare il modello nel Registro di sistema nell'area di lavoro. È possibile ignorare questa sezione se il modello che si sta tentando di distribuire è già registrato.

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

Creare l'ambiente di base

Gli ambienti di base vengono usati per indicare l'immagine di base e le dipendenze del pacchetto Python del modello. Il modello in questione richiede che i pacchetti seguenti vengano usati come indicato nel file 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

In che modo l'ambiente di base è diverso dall'ambiente usato per la distribuzione modello agli endpoint online e batch? Quando si distribuiscono modelli agli endpoint, l'ambiente deve includere le dipendenze del modello e dei pacchetti Python necessari per il funzionamento degli endpoint online gestiti. Questo porta un processo manuale nella distribuzione, in cui è necessario combinare i requisiti del modello con i requisiti della piattaforma di gestione. D'altra parte, l'uso di pacchetti di modelli rimuove questo attrito, poiché i pacchetti necessari per il server di inferenza verranno inseriti automaticamente nel pacchetto del modello in fase di creazione.

Creare l'ambiente nel modo seguente:

Creare una definizione dell'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.

Creare quindi l'ambiente:

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

Creare una specifica del pacchetto

È possibile creare pacchetti di modelli in Azure Machine Learning tramite l'interfaccia della riga di comando di Azure o l'SDK di Azure Machine Learning per Python. La specifica del pacchetto personalizzato supporta gli attributi seguenti:

Attributo Tipo Descrizione Richiesto
target_environment str Il nome del pacchetto da creare. Il risultato di un'operazione di creazione di un pacchetto è un ambiente in Azure Machine Learning.
base_environment_source object L'immagine di base da usare per creare il pacchetto in cui vengono specificate le dipendenze per il modello. Sì, a meno che il modello non sia MLflow.
base_environment_source.type str Il tipo dell'immagine di base. È supportato solo l'uso di un altro ambiente poiché l'immagine di base è supportata (type: environment_asset).
base_environment_source.resource_id str L'ID della risorsa dell'ambiente di base da usare. Usare il formato azureml:<name>:<version> o un ID della risorsa lungo.
inferencing_server object Il server di inferenza da usare.
inferencing_server.type azureml_online
custom
Usare azureml_online per il server di inferenza di Azure Machine Learning o custom per un server online personalizzato, ad esempio TensorFlow Serving o Torch Serve.
inferencing_server.code_configuration object La configurazione del codice con la routine di inferenza. Deve contenere almeno un file Python con metodi init e run. Sì, a meno che il modello non sia MLflow.
model_configuration object La configurazione del modello. Usare questo attributo per controllare la modalità di creazione del pacchetto del modello nell'immagine risultante. No
model_configuration.mode download
copy
Indicare il modo in cui il modello verrà inserito nel pacchetto. I valori possibili sono download (impostazione predefinita) e copy. Usare download quando si vuole che il modello venga scaricato dal Registro di sistema dei modelli in fase di distribuzione. Questa opzione crea immagini Docker più piccole poiché il modello non è incluso. Usare copy quando si vuole disconnettere l'immagine da Azure Machine Learning. Il modello verrà copiato all'interno dell'immagine Docker in fase di creazione del pacchetto. copy non è supportato nelle aree di lavoro abilitate per i collegamenti privati. No
  1. Creare una specifica del pacchetto come indicato di seguito:

    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. Avviare l'operazione di creazione del pacchetto del modello:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. Il risultato dell'operazione di creazione del pacchetto è un ambiente.

Creare un pacchetto di un modello con dipendenze nei feed Python privati

I pacchetti di modelli possono risolvere le dipendenze Python disponibili nei feed privati. Per usare questa funzionalità, è necessario creare una connessione dall'area di lavoro al feed e specificare la configurazione del token PAT. Il codice Python seguente illustra come configurare l'area di lavoro in cui si esegue l'operazione del pacchetto.

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)

Dopo aver creato la connessione, compilare il pacchetto del modello come descritto nella sezione Creare un pacchetto di un modello. Nell'esempio seguente l'ambiente di base del pacchetto usa un feed privato per la dipendenza Python bar, come specificato nel file Conda seguente:

conda.yml

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

Se si usa un modello MLflow, le dipendenze del modello sono indicate all'interno del modello stesso e pertanto non è necessario un ambiente di base. Specificare invece le dipendenze dei feed privati durante la registrazione del modello, come illustrato in Modelli di registrazione con firma, ambiente o esempi personalizzati.

Creazione di un pacchetto di modello ospitato in un registro

I pacchetti di modelli offrono un modo pratico per raccogliere le dipendenze prima della distribuzione. Tuttavia, quando i modelli sono ospitati nei registri, la destinazione di distribuzione è in genere un'altra area di lavoro. Quando si creano pacchetti in questa configurazione, usare la proprietà target_environment per specificare il percorso completo in cui si vuole creare il pacchetto del modello, anziché solo il nome.

Il codice seguente crea un pacchetto del modello t5-base da un registro:

  1. Connettersi al Registro di sistema in cui si trova il modello e all'area di lavoro in cui è necessario creare il pacchetto del modello:

    az login
    
  2. Ottenere un riferimento al modello che si vuole creare nel pacchetto. In questo caso viene creato il pacchetto del modello t5-base dal registro azureml.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. Configurare una specifica del pacchetto. Poiché il modello di cui vuole creare il pacchetto è MLflow, l'ambiente di base e lo script del punteggio sono facoltativi.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. Avviare l'operazione di creazione del pacchetto del modello:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. Il pacchetto viene ora creato nell'area di lavoro di destinazione e pronto per la distribuzione.

Creare un pacchetto di modelli da distribuire all'esterno di Azure Machine Learning

Se necessario, i pacchetti dei modelli possono essere distribuiti all'esterno di Azure Machine Learning. Per garantire la portabilità, è sufficiente assicurarsi che la configurazione del modello nel pacchetto abbia la modalità impostata su copy in modo che il modello stesso venga copiato all'interno dell'immagine Docker generata invece di fare riferimento al registro modelli in Azure Machine Learning.

Il codice seguente illustra come configurare copy nel pacchetto di un modello:

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

Passaggio successivo