Risoluzione dei problemi relativi alla distribuzione di un modello locale
Provare una distribuzione del modello locale come primo passaggio nella risoluzione dei problemi di distribuzione in Istanze di Azure Container o nel servizio Azure Kubernetes. L'utilizzo di un servizio Web locale semplifica la localizzazione e la correzione di errori comuni di distribuzione del servizio Web Docker di Azure Machine Learning.
Prerequisiti
- Una sottoscrizione di Azure. Provare la versione gratuita o a pagamento di Azure Machine Learning.
- Opzione A (consigliata) - Eseguire il debug in locale nell'istanza di ambiente di calcolo di Azure Machine Learning
- Un'area di lavoro di Azure Machine Learning con istanza di calcolo in esecuzione
- Opzione B - Eseguire il debug in locale nel computer
- Azure Machine Learning SDK.
- Interfaccia della riga di comando di Azure.
- Estensione dell'interfaccia della riga di comando per Azure Machine Learning.
- Avere un'installazione Docker funzionante nel sistema locale.
- Per verificare l'installazione Docker, usare il comando
docker run hello-world
da un terminale o da un prompt dei comandi. Per informazioni sull'installazione Docker o sulla risoluzione dei problemi relativi agli errori Docker, vedere la Documentazione di Docker.
- Opzione C - Abilitare il debug locale con il server HTTP di inferenza di Azure Machine Learning.
- Il server HTTP di inferenza di Azure Machine Learning è un pacchetto Python che consente di convalidare facilmente lo script di immissione (
score.py
) in un ambiente di sviluppo locale. Se si verifica un problema con lo script di assegnazione dei punteggi, il server restituirà un errore. Restituirà anche la posizione in cui si è verificato l'errore. - Il server può essere usato anche quando si creano controlli di convalida in una pipeline di integrazione e distribuzione continue. Ad esempio, avviare il server con lo script candidato ed eseguire il gruppo di test sull'endpoint locale.
- Il server HTTP di inferenza di Azure Machine Learning è un pacchetto Python che consente di convalidare facilmente lo script di immissione (
Server HTTP di inferenza di Azure Machine Learning
Il server di inferenza locale consente di eseguire rapidamente il debug dello script di immissione (score.py
). Nel caso in cui lo script di punteggio sottostante abbia un bug, il server non riuscirà a inizializzare o gestire il modello. Genererà invece un'eccezione e la posizione in cui si sono verificati i problemi. Altre informazioni sul server HTTP di inferenza di Azure Machine Learning
Installare il pacchetto
azureml-inference-server-http
dal feed pypi:python -m pip install azureml-inference-server-http
Avviare il server e impostare
score.py
come script di immissione:azmlinfsrv --entry_script score.py
Inviare una richiesta di assegnazione di punteggio al server tramite
curl
:curl -p 127.0.0.1:5001/score
Nota
Domande frequenti di Learn sul server HTTP di inferenza di Azure Machine Learning.
Eseguire il debug in locale
È possibile trovare un notebook di distribuzione locale di esempio nel repository MachineLearningNotebooks per esplorare un esempio eseguibile.
Avviso
Le distribuzioni di servizi Web locali non sono supportate per gli scenari di produzione.
Per eseguire la distribuzione localmente, modificare il codice per usare LocalWebservice.deploy_configuration()
per creare una configurazione della distribuzione. Usare quindi Model.deploy()
per distribuire il servizio. Nell'esempio seguente viene distribuito un modello (contenuto nella variabile del modello) come servizio Web locale:
Si applica a: Python SDK azureml v1
from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import LocalWebservice
# Create inference configuration based on the environment definition and the entry script
myenv = Environment.from_conda_specification(name="env", file_path="myenv.yml")
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
# Create a local deployment, using port 8890 for the web service endpoint
deployment_config = LocalWebservice.deploy_configuration(port=8890)
# Deploy the service
service = Model.deploy(
ws, "mymodel", [model], inference_config, deployment_config)
# Wait for the deployment to complete
service.wait_for_deployment(True)
# Display the port that the web service is available on
print(service.port)
Se si definisce una specifica CONDA YAML personalizzata, elencare la versione azureml-defaults >= 1.0.45 come dipendenza pip. Questo pacchetto è necessario per ospitare il modello come servizio Web.
A questo punto, è possibile usare il servizio come di consueto. Ad esempio, il codice seguente dimostra l'invio di dati al servizio:
import json
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')
prediction = service.run(input_data=test_sample)
print(prediction)
Per altre informazioni sulla personalizzazione dell'ambiente Python, vedere Creare e gestire ambienti per il training e la distribuzione.
Aggiornare il servizio
Durante i test locali, potrebbe essere necessario aggiornare il file score.py
per aggiungere la registrazione o tentare di risolvere eventuali problemi individuati. Per ricaricare le modifiche apportate al file di score.py
, usare reload()
. Il codice seguente, ad esempio, consente di ricaricare lo script per il servizio e quindi di inviarvi dati. Il punteggio dei dati viene assegnato tramite il file score.py
aggiornato:
Importante
Il metodo reload
è disponibile solo per le distribuzioni locali. Per informazioni sull'aggiornamento di una distribuzione a un'altra destinazione di calcolo, vedere Come aggiornare il servizio Web.
service.reload()
print(service.run(input_data=test_sample))
Nota
Lo script viene ricaricato dalla posizione specificata dall'oggetto InferenceConfig
usato dal servizio.
Per modificare il modello, le dipendenze Conda o la configurazione della distribuzione, usare update(). Nell'esempio seguente viene aggiornato il modello usato dal servizio:
service.update([different_model], inference_config, deployment_config)
Eliminare il servizio
Per eliminare il servizio, usare delete().
Esaminare il log di Docker
È possibile visualizzare i messaggi dettagliati del log del motore Docker dall'oggetto di servizio. È possibile visualizzare il log per ACI, AKS e distribuzioni locali. L'esempio seguente illustra come stampare i log.
# if you already have the service object handy
print(service.get_logs())
# if you only know the name of the service (note there might be multiple services with the same name but different version number)
print(ws.webservices['mysvc'].get_logs())
Se la riga Booting worker with pid: <pid>
ricorre più volte nei log, significa che non è disponibile memoria sufficiente per avviare il ruolo di lavoro.
È possibile risolvere l'errore aumentando il valore di memory_gb
in deployment_config
Passaggi successivi
Altre informazioni sulla distribuzione: