Felsökning med en distribution av en lokal modell

Prova en distribution av en lokal modell som ett första steg i felsökningen av distribution till Azure Container Instances (ACI) eller Azure Kubernetes Service (AKS). Med hjälp av en lokal webbtjänst blir det enklare att upptäcka och åtgärda vanliga distributionsfel för Azure Machine Learning Docker-webbtjänsten.

Förutsättningar

  • En Azure-prenumeration. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning.
  • Alternativ A (rekommenderas) – Felsöka lokalt på Azure Machine Learning Compute Instance
  • Alternativ B – Felsöka lokalt på din beräkning
    • Azure Machine Learning SDK.
    • Azure CLI.
    • CLI-tillägget för Azure Machine Learning.
    • Ha en fungerande Docker-installation i det lokala systemet.
    • Om du vill verifiera Docker-installationen använder du kommandot docker run hello-world från en terminal eller kommandotolk. Information om hur du installerar Docker eller felsöker Docker-fel finns i Docker-dokumentationen.
  • Alternativ C – Aktivera lokal felsökning med HTTP-server för Azure Machine Learning-slutsatsdragning.
    • HTTP-servern för Azure Machine Learning-slutsatsdragning är ett Python-paket som gör att du enkelt kan verifiera ditt inmatningsskript (score.py) i en lokal utvecklingsmiljö. Om det uppstår ett problem med bedömningsskriptet returnerar servern ett fel. Servern returnerar också platsen där felet uppstod.
    • Servern kan också användas när du skapar valideringsportar i en pipeline för kontinuerlig integrering och distribution. Starta till exempel servern med det här kandidatskriptet och kör testpaketet mot den lokala slutpunkten.

HTTP-server för Azure Machine Learning-slutsatsdragning

Med den lokala slutsatsdragningsservern kan du snabbt felsöka ditt postskript (score.py). Om det underliggande poängskriptet har en bugg kan servern inte initiera eller hantera modellen. I stället utlöser det ett undantag och platsen där problemen uppstod. Läs mer om HTTP Server för Azure Machine Learning-slutsatsdragning

  1. azureml-inference-server-http Installera paketet från pypi-feeden:

    python -m pip install azureml-inference-server-http
    
  2. Starta servern och ange score.py som inmatningsskript:

    azmlinfsrv --entry_script score.py
    
  3. Skicka en bedömningsbegäran till servern med hjälp av curl:

    curl -p 127.0.0.1:5001/score
    

Kommentar

Lär dig vanliga frågor och svar om Azure Machine Learning Inference HTTP-server.

Felsöka lokalt

Du hittar ett exempel på en lokal distributionsanteckningsbok i lagringsplatsen MachineLearningNotebooks för att utforska ett körbart exempel.

Varning

Distributioner av lokala webbtjänster stöds inte för produktionsscenarier.

Om du vill distribuera lokalt ändrar du koden så att den används LocalWebservice.deploy_configuration() för att skapa en distributionskonfiguration. Använd Model.deploy() sedan för att distribuera tjänsten. I följande exempel distribueras en modell (som finns i modellvariabeln) som en lokal webbtjänst:

GÄLLER FÖR: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)

Om du definierar din egen CONDA-specifikation YAML listar du azureml-defaults version >= 1.0.45 som ett pip-beroende. Det här paketet behövs för att vara värd för modellen som en webbtjänst.

Nu kan du arbeta med tjänsten som vanligt. Följande kod visar hur du skickar data till tjänsten:

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)

Mer information om hur du anpassar din Python-miljö finns i Skapa och hantera miljöer för träning och distribution.

Uppdatera tjänsten

Under lokal testning kan du behöva uppdatera score.py filen för att lägga till loggning eller försöka lösa eventuella problem som du har upptäckt. Om du vill läsa in ändringar i filen igen score.py använder du reload(). Följande kod läser till exempel in skriptet för tjänsten igen och skickar sedan data till den. Data poängsätts med hjälp av den uppdaterade score.py filen:

Viktigt!

Metoden reload är endast tillgänglig för lokala distributioner. Information om hur du uppdaterar en distribution till ett annat beräkningsmål finns i hur du uppdaterar din webbtjänst.

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

Kommentar

Skriptet laddas om från den plats som anges av objektet InferenceConfig som används av tjänsten.

Om du vill ändra modellen, Conda-beroenden eller distributionskonfigurationen använder du update(). I följande exempel uppdateras modellen som används av tjänsten:

service.update([different_model], inference_config, deployment_config)

Ta bort tjänsten

Om du vill ta bort tjänsten använder du delete().

Granska Docker-loggen

Du kan skriva ut detaljerade Docker-motorloggmeddelanden från tjänstobjektet. Du kan visa loggen för ACI-, AKS- och lokala distributioner. I följande exempel visas hur du skriver ut loggarna.

# 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())

Om du ser att raden Booting worker with pid: <pid> inträffar flera gånger i loggarna innebär det att det inte finns tillräckligt med minne för att starta arbetaren. Du kan åtgärda felet genom att öka värdet memory_gb för i deployment_config

Nästa steg

Lär dig mer om distribution: