Distribuire un modello in locale
Informazioni su come usare Azure Machine Learning per distribuire un modello come servizio Web nell'istanza di ambiente di calcolo di Azure Machine Learning. Usare le istanze di ambiente di calcolo se una delle condizioni seguenti è vera:
- È necessario distribuire e convalidare rapidamente il modello.
- Si sta eseguendo il test di un modello in fase di sviluppo.
Suggerimento
La distribuzione di un modello da Jupyter Notebook in un'istanza di ambiente di calcolo, in un servizio Web nella stessa macchina virtuale è una distribuzione locale. In questo caso, il computer 'locale' è l'istanza di ambiente calcolo.
Nota
Gli endpoint di Azure Machine Learning (v2) offrono un'esperienza di distribuzione più semplice e ottimizzata. Gli endpoint supportano scenari di inferenza batch e in tempo reale. Gli endpoint forniscono un'unica interfaccia per richiamare e gestire le distribuzioni di modelli tra i tipi di calcolo. Consultare Che cosa sono gli endpoint di Azure Machine Learning?.
Prerequisiti
- Un'area di lavoro di Azure Machine Learning con istanza di ambiente di calcolo in esecuzione. Per altre informazioni, vedere Creare risorse per iniziare.
Eseguire la distribuzione nelle istanze di ambiente calcolo
Un notebook di esempio che illustra le distribuzioni locali è incluso nell'istanza di ambiente di calcolo. Usare la procedura seguente per caricare il notebook e distribuire il modello come servizio Web nella macchina virtuale:
In studio di Azure Machine Learningselezionare "Notebook" seguito da how-to-use-azureml/deployment/deploy-to-local/register-model-deploy-local.ipynb in "Notebook campione". Clonare questo notebook nella cartella utente.
Trovare il notebook clonato nel passaggio 1, scegliere o creare un'istanza di ambiente di calcolo per eseguire il notebook.
Il notebook visualizza l'URL e la porta in cui è in esecuzione il servizio. Ad esempio,
https://localhost:6789
. È anche possibile eseguire la cella contenenteprint('Local service port: {}'.format(local_service.port))
per visualizzare la porta.Per testare il servizio da un'istanza di ambiente di calcolo, usare l'URL
https://localhost:<local_service.port>
. Per eseguire il test da un client remoto, ottenere l'URL pubblico del servizio in esecuzione nell'istanza di ambiente di calcolo. È possibile determinare l'URL pubblico usando la formula seguente;- Macchina virtuale con notebook:
https://<vm_name>-<local_service_port>.<azure_region_of_workspace>.notebooks.azureml.net/score
. - Istanza di ambiente di calcolo:
https://<vm_name>-<local_service_port>.<azure_region_of_workspace>.instances.azureml.net/score
.
ad esempio:
- Macchina virtuale notebook:
https://vm-name-6789.northcentralus.notebooks.azureml.net/score
- Istanza di ambiente di calcolo:
https://vm-name-6789.northcentralus.instances.azureml.net/score
- Macchina virtuale con notebook:
Eseguire il test del servizio
Per inviare dati campione al servizio in esecuzione, usare il seguente codice. Sostituire il valore di service_url
con l'URL di del passaggio precedente:
Nota
Quando si esegue l'autenticazione in una distribuzione nell'istanza di ambiente di calcolo, l'autenticazione viene eseguita usando Microsoft Entra ID. La chiamata a interactive_auth.get_authentication_header()
nel codice di esempio autentica l'utente usando Microsoft Entra ID e restituisce un'intestazione che può quindi essere usata per eseguire l'autenticazione al servizio nell'istanza di ambiente di calcolo. Per altre informazioni, vedere Configurare l'autenticazione per le risorse e i flussi di lavoro di Azure Machine Learning.
Quando si esegue l'autenticazione in una distribuzione nel servizio Azure Kubernetes o in Istanze di Azure Container, viene usato un metodo di autenticazione differente. Per altre informazioni, vedere Configurare l'autenticazione per i modelli di Azure Machine distribuiti come servizi Web.
import requests
import json
from azureml.core.authentication import InteractiveLoginAuthentication
# Get a token to authenticate to the compute instance from remote
interactive_auth = InteractiveLoginAuthentication()
auth_header = interactive_auth.get_authentication_header()
# Create and submit a request using the auth header
headers = auth_header
# Add content type header
headers.update({'Content-Type':'application/json'})
# Sample data to send to the service
test_sample = json.dumps({'data': [
[1,2,3,4,5,6,7,8,9,10],
[10,9,8,7,6,5,4,3,2,1]
]})
test_sample = bytes(test_sample,encoding = 'utf8')
# Replace with the URL for your compute instance, as determined from the previous section
service_url = "https://vm-name-6789.northcentralus.notebooks.azureml.net/score"
# for a compute instance, the url would be https://vm-name-6789.northcentralus.instances.azureml.net/score
resp = requests.post(service_url, test_sample, headers=headers)
print("prediction:", resp.text)
Passaggi successivi
- Come distribuire un modello con un'immagine Docker personalizzata
- Risoluzione dei problemi di distribuzione
- Usare TLS per proteggere un servizio Web tramite Azure Machine Learning
- Usare un modello di Machine Learning distribuito come servizio Web
- Monitorare i modelli di Azure Machine Learning con Application Insights
- Raccogliere i dati per i modelli nell'ambiente di produzione