Condividi tramite


Creare un pacchetto e distribuire modelli all'esterno di Azure Machine Learning (anteprima)

È possibile distribuire modelli all'esterno di Azure Machine Learning per la gestione online creando pacchetti di modelli (anteprima). Azure Machine Learning consente di creare un pacchetto di modelli che raccoglie tutte le dipendenze necessarie per la distribuzione di un modello di Machine Learning in una piattaforma di gestione. È possibile spostare un pacchetto di modelli tra aree di lavoro e persino all'esterno di Azure Machine Learning. Per altre informazioni sui pacchetti di modelli, vedere Pacchetti di modelli per la distribuzione (anteprima).

Importante

Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto non è consigliabile usarla per 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.

Questo articolo illustra come creare un pacchetto di un modello e distribuirlo in un Servizio app di Azure.

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, seguire la procedura descritta nell'articolo Come gestire le aree di lavoro per crearne uno.

    Nota

    Le aree di lavoro abilitate per il collegamento privato non supportano i modelli di creazione di pacchetti per la distribuzione all'esterno di Azure Machine Learning.

  • 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.

Preparare il sistema

Seguire questa procedura per preparare il sistema.

  1. 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
    

    Questo articolo usa l'esempio nella cartella endpoints/online/deploy-with-packages/mlflow-model.

  2. 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>
    
  3. I pacchetti richiedono la registrazione del modello nell'area di lavoro o in un registro di Azure Machine Learning. In questo esempio è presente una copia locale del modello nel repository, quindi è sufficiente pubblicare il modello nel registro di sistema nell'area di lavoro. È possibile ignorare questo passaggio se il modello che si sta tentando di distribuire è già registrato.

    MODEL_NAME='heart-classifier-mlflow'
    MODEL_PATH='model'
    az ml model create --name $MODEL_NAME --path $MODEL_PATH --type mlflow_model
    

Distribuire un pacchetto di modelli nel Servizio app di Azure

In questa sezione viene creato il pacchetto del modello MLflow registrato in precedenza e lo si distribuisce nel Servizio app di Azure.

  1. La distribuzione di un modello all'esterno di Azure Machine Learning richiede la creazione di una specifica del pacchetto. Per creare un pacchetto completamente disconnesso da Azure Machine Learning, specificare la modalità copy nella configurazione del modello. La modalità copy indica al pacchetto di copiare gli artefatti all'interno del pacchetto. Il codice seguente illustra come specificare la modalità di copia per la configurazione del modello:

    Creare una specifica YAML del pacchetto:

    package-external.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: heart-classifier-mlflow-pkg
    inferencing_server: 
        type: azureml_online
    model_configuration:
        mode: copy
    

    Suggerimento

    Quando si specifica la configurazione del modello usando copy per la proprietà mode, si garantisce che tutti gli artefatti del modello vengano copiati all'interno dell'immagine Docker generata anziché scaricati dal registro di sistema dei modelli di Azure Machine Learning, consentendo così un'autentica portabilità all'esterno di Azure Machine Learning. Per una specifica completa su tutte le opzioni durante la creazione di pacchetti, vedere Creare una specifica di pacchetto.

  2. Avviare l'operazione di creazione del pacchetto.

    az ml model package --name $MODEL_NAME --version $MODEL_VERSION --file package-external.yml
    
  3. Il risultato dell'operazione di creazione di un pacchetto è un ambiente in Azure Machine Learning. Il vantaggio di avere questo ambiente è che ogni ambiente ha un'immagine Docker corrispondente che è possibile usare in una distribuzione esterna. Le immagini sono ospitate in Registro Azure Container. I passaggi seguenti illustrano come ottenere il nome dell'immagine generata:

    1. Passare ad Azure Machine Learning Studio.

    2. Selezionare la sezione Ambienti.

    3. Selezionare la scheda Ambienti personalizzati.

    4. Cercare l'ambiente denominato heart-classifier-mlflow-package, ovvero il nome del pacchetto appena creato.

    5. Copiare il valore nel campo Registro Azure Container.

    A screenshot showing the section where the Azure container registry image name is displayed in Azure Machine Learning studio.

  4. Successivamente, distribuire questo pacchetto in un Servizio app di Azure.

    1. Passare al portale di Azure e creare una nuova risorsa del Servizio app di Azure.

    2. Nella procedura di creazione guidata selezionare la sottoscrizione e il gruppo di risorse in uso.

    3. Nella sezione Dettagli istanza assegnare all'app un nome.

    4. Per Pubblicaselezionare Contenitore Docker.

    5. Per Sistema operativo: selezionare Linux.

      A screenshot showing how to configure the app service to deploy the generated docker container image.

    6. Configurare il resto della pagina in base alle esigenze e selezionare Avanti.

    7. Passare alla scheda Docker.

    8. Per Opzioniselezionare Contenitore singolo.

    9. Per Origine immagine selezionare Registro Azure Container.

    10. Configurare le opzioni del Registro Azure Container come indicato di seguito:

      1. Per Registro di sistemaselezionare Registro Azure Container associato all'area di lavoro di Azure Machine Learning.

      2. Per Immagineselezionare l'immagine trovata nel passaggio 3(e) di questa esercitazione.

      3. Per Tagselezionare Più recente.

      A screenshot showing the section Docker of the wizard, where the docker image associated with the package is indicated.

    11. Configurare il resto della procedura guidata in base alle esigenze.

    12. Seleziona Crea. Il modello viene ora distribuito nel Servizio app di Azure creato.

    13. Il modo in cui si richiamano e si ottengono previsioni dipende dal server di inferenza usato. In questo esempio è stato usato il server di inferenza di Azure Machine Learning, che crea previsioni nella route /score. Per altre informazioni sui formati e sulle funzionalità di input, vedere i dettagli del pacchetto azureml-inference-server-http.

    14. Preparare il payload della richiesta. Il formato per un modello MLflow distribuito con il server di inferenza di Azure Machine Learning è il seguente:

      sample-request.json

      {
          "input_data": {
              "columns": [
                  "age", "sex", "cp", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
              ],
              "index": [1],
              "data": [
                  [1, 1, 4, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
              ]
          }
      }
      
    15. Testare la distribuzione del modello per verificare se funziona.

      cat -A sample-request.json | curl http://heart-classifier-mlflow-pkg.azurewebsites.net/score \
          --request POST \
          --header 'Content-Type: application/json' \
          --data-binary @-
      

Passaggio successivo