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 se ne sconsiglia l’uso 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.
Modello da inserire in pacchetto. In questo esempio viene usato un modello MLflow registrato nell'area di lavoro.
Attenzione
La creazione di pacchetti di modelli non è supportata per i modelli nel catalogo dei modelli di Azure per intelligenza artificiale, inclusi i modelli linguistici di grandi dimensioni. I modelli nel catalogo dei modelli Azure per intelligenza artificiale sono ottimizzati per l'inferenza nelle destinazioni di distribuzione di Intelligenza artificiale di Azure e non sono adatti per la creazione di pacchetti.
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. | Sì |
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. | Sì |
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. |
Sì |
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 |
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
Avviare l'operazione di creazione del pacchetto del modello:
az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
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 di accesso personale. 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:
Connettersi al Registro di sistema in cui si trova il modello e all'area di lavoro in cui è necessario creare il pacchetto del modello:
Ottenere un riferimento al modello che si vuole creare nel pacchetto. In questo caso viene creato il pacchetto del modello
t5-base
dal registroazureml
.MODEL_NAME="t5-base" MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
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
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
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