Problemen oplossen met een implementatie van een lokaal model
Probeer een implementatie van een lokaal model als eerste stap bij het oplossen van problemen met de implementatie van Azure Container Instances (ACI) of Azure Kubernetes Service (AKS). Het gebruik van een lokale webservice maakt het gemakkelijker om veelvoorkomende implementatiefouten in Azure Machine Learning Docker-webservice te herkennen en op te lossen.
Vereisten
- Een Azure-abonnement. Probeer de gratis of betaalde versie van Azure Machine Learning.
- Optie A (aanbevolen): lokaal fouten opsporen in Azure Machine Learning Compute-exemplaar
- Een Azure Machine Learning-werkruimte met een rekenproces dat wordt uitgevoerd
- Optie B: lokaal fouten opsporen op uw rekenproces
- De Azure Machine Learning SDK.
- De Azure CLI.
- De CLI-extensie voor Azure Machine Learning.
- Zorg voor een werkende Docker-installatie op uw lokale systeem.
- Als u uw Docker-installatie wilt controleren, gebruikt u de opdracht
docker run hello-world
vanuit een terminal of opdrachtprompt. Zie de Docker-documentatie voor informatie over het installeren van Docker of het oplossen van docker-fouten.
- Optie C: lokale foutopsporing inschakelen met Azure Machine Learning-deductie-HTTP-server.
- De HTTP-server voor deductie van Azure Machine Learning is een Python-pakket waarmee u eenvoudig uw invoerscript (
score.py
) in een lokale ontwikkelomgeving kunt valideren. Als er een probleem is met het scorescript, retourneert de server een fout. Ook wordt de locatie van de fout geretourneerd. - De server kan ook worden gebruikt bij het maken van validatiepoorten in een pijplijn voor continue integratie en implementatie. Start bijvoorbeeld de server met het kandidaatscript en voer de testsuite uit op het lokale eindpunt.
- De HTTP-server voor deductie van Azure Machine Learning is een Python-pakket waarmee u eenvoudig uw invoerscript (
HTTP-server voor azure Machine Learning-deductie
Met de lokale deductieserver kunt u snel fouten opsporen in uw invoerscript (score.py
). Als het onderliggende scorescript een fout heeft, kan de server het model niet initialiseren of leveren. In plaats daarvan genereert het een uitzondering en de locatie waar de problemen zijn opgetreden. Meer informatie over HTTP-server voor azure Machine Learning-deductie
Installeer het
azureml-inference-server-http
pakket vanuit de pypi-feed :python -m pip install azureml-inference-server-http
Start de server en stel
score.py
deze in als het invoerscript:azmlinfsrv --entry_script score.py
Verzend een scoreaanvraag naar de server met behulp van
curl
:curl -p 127.0.0.1:5001/score
Notitie
Meer informatie over veelgestelde vragen over Deductie-HTTP-server voor Azure Machine Learning.
Lokaal fouten opsporen
U vindt een voorbeeld van een lokaal implementatienotitieblok in de opslagplaats machineLearningNotebooks om een voorbeeld te verkennen dat kan worden uitgevoerd.
Waarschuwing
Implementaties van lokale webservices worden niet ondersteund voor productiescenario's.
Als u lokaal wilt implementeren, wijzigt u de code die u wilt gebruiken LocalWebservice.deploy_configuration()
om een implementatieconfiguratie te maken. Gebruik vervolgens Model.deploy()
om de service te implementeren. In het volgende voorbeeld wordt een model (opgenomen in de modelvariabele) geïmplementeerd als een lokale webservice:
VAN TOEPASSING OP: 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)
Als u uw eigen YAML voor conda-specificatie definieert, geeft u versie azureml-defaults >= 1.0.45 weer als pip-afhankelijkheid. Dit pakket is nodig om het model als een webservice te hosten.
Op dit moment kunt u als normaal met de service werken. De volgende code laat zien hoe gegevens naar de service worden verzonden:
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)
Zie Omgevingen maken en beheren voor training en implementatie voor meer informatie over het aanpassen van uw Python-omgeving.
De service bijwerken
Tijdens lokale tests moet u het score.py
bestand mogelijk bijwerken om logboekregistratie toe te voegen of om eventuele problemen op te lossen die u hebt gedetecteerd. Als u wijzigingen in het score.py
bestand opnieuw wilt laden, gebruikt u reload()
. Met de volgende code wordt bijvoorbeeld het script voor de service opnieuw geladen en worden er vervolgens gegevens naar verzonden. De gegevens worden beoordeeld met behulp van het bijgewerkte score.py
bestand:
Belangrijk
De reload
methode is alleen beschikbaar voor lokale implementaties. Zie hoe u uw webservice bijwerkt voor informatie over het bijwerken van een implementatie naar een ander rekendoel.
service.reload()
print(service.run(input_data=test_sample))
Notitie
Het script wordt opnieuw geladen vanaf de locatie die is opgegeven door het InferenceConfig
object dat door de service wordt gebruikt.
Als u het model, Conda-afhankelijkheden of de implementatieconfiguratie wilt wijzigen, gebruikt u update(). In het volgende voorbeeld wordt het model bijgewerkt dat door de service wordt gebruikt:
service.update([different_model], inference_config, deployment_config)
De service verwijderen
Als u de service wilt verwijderen, gebruikt u delete().
Het Docker-logboek inspecteren
U kunt gedetailleerde logboekberichten van docker-engine afdrukken vanuit het serviceobject. U kunt het logboek voor ACI-, AKS- en lokale implementaties bekijken. In het volgende voorbeeld ziet u hoe u de logboeken afdrukt.
# 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())
Als de regel Booting worker with pid: <pid>
meerdere keren in de logboeken optreedt, betekent dit dat er onvoldoende geheugen is om de werkrol te starten.
U kunt de fout oplossen door de waarde van memory_gb
in te verhogen deployment_config
Volgende stappen
Meer informatie over implementatie: