Risolvere i problemi di distribuzione dei modelli

Completato

La distribuzione di un servizio coinvolge numerosi elementi, tra cui il modello sottoposto a training, la configurazione dell'ambiente di runtime, lo script di assegnazione dei punteggi, l'immagine del contenitore e l'host contenitore. La risoluzione dei problemi relativi a una distribuzione non riuscita, o di un errore durante l'utilizzo di un servizio distribuito, può essere complessa.

Controllare lo stato del servizio

Come primo passaggio per la risoluzione dei problemi, è possibile controllare lo stato di un servizio:

from azureml.core.webservice import AksWebservice

# Get the deployed service
service = AksWebservice(name='classifier-service', workspace=ws)

# Check its state
print(service.state)

Nota

Per visualizzare lo stato di un servizio, è necessario usare il tipo di servizio specifico della risorsa di calcolo (ad esempio AksWebservice) e non un oggetto WebService generico.

Lo stato di un servizio operativo deve essere Integro.

Esaminare i log del servizio

Se un servizio non è integro o si verificano errori durante l'uso, è possibile esaminare i relativi log:

print(service.get_logs())

I log includono informazioni dettagliate sul provisioning del servizio e sulle richieste elaborate e spesso possono consentire di risalire alla causa di errori imprevisti.

Eseguire la distribuzione in un contenitore locale

Gli errori di distribuzione e di runtime possono essere più semplici da diagnosticare se si distribuisce il servizio come contenitore in un'istanza locale di Docker, come indicato di seguito:

from azureml.core.webservice import LocalWebservice

deployment_config = LocalWebservice.deploy_configuration(port=8890)
service = Model.deploy(ws, 'test-svc', [model], inference_config, deployment_config)

È quindi possibile testare il servizio distribuito localmente con l'SDK:

print(service.run(input_data = json_data))

Si possono poi risolvere i problemi di runtime apportando modifiche al file di punteggio a cui si fa riferimento nella configurazione dell'inferenza e ricaricando il servizio senza ridistribuirlo (operazione che può essere eseguita solo con un servizio locale):

service.reload()
print(service.run(input_data = json_data))