Handleiding voor foutopsporing voor Model Serving
In dit artikel worden de stappen voor foutopsporing beschreven voor veelvoorkomende problemen die gebruikers kunnen tegenkomen bij het werken met eindpunten voor modellen. Veelvoorkomende problemen kunnen fouten zijn die gebruikers tegenkomen wanneer het eindpunt niet kan worden geïnitialiseerd of gestart, buildfouten met betrekking tot de container of problemen tijdens de bewerking of het uitvoeren van het model op het eindpunt.
Logboeken openen en controleren
Databricks raadt aan om buildlogboeken te bekijken voor foutopsporing en het oplossen van fouten in uw model voor workloads. Zie Modelkwaliteit en eindpuntstatus bewaken voor informatie over logboeken en hoe u deze kunt weergeven.
Controleer de gebeurtenislogboeken voor het model in de gebruikersinterface van de werkruimte en controleer op een bericht over een geslaagde containerbuild. Als u na een uur geen buildbericht ziet, neemt u contact op met databricks-ondersteuning voor hulp.
Als uw build is geslaagd, maar er andere fouten optreden, ziet u Foutopsporing nadat de containerbuild is geslaagd. Als uw build mislukt, raadpleegt u Foutopsporing na een containerbuildfout.
Geïnstalleerde bibliotheekpakketversies
In uw buildlogboeken kunt u de pakketversies bevestigen die zijn geïnstalleerd.
- Als u voor MLflow-versies geen versie hebt opgegeven, gebruikt Model Serving de nieuwste versie.
- Voor aangepaste GPU-services installeert Model Serving de aanbevolen versies van
cuda
encuDNN
volgens de openbare PyTorch- en Tensorflow-documentatie.
Voordat validatiecontroles voor modelimplementatie worden uitgevoerd
Databricks raadt u aan de richtlijnen in deze sectie toe te passen voordat u uw model gaat bedienen. De volgende parameters kan problemen vroegtijdig ondervangen voordat op het eindpunt wordt gewacht. Zie De modelinvoer valideren voordat de implementatie om uw modelinvoer te valideren voordat u uw model implementeert.
Voorspellingen testen vóór implementatie
Voordat u uw model implementeert op het servereindpunt, test u offlinevoorspellingen met een virtuele omgeving met behulp van mlflow.models.predict
en invoervoorbeelden. Zie MLflow-documentatie voor het testen van voorspellingen voor gedetailleerdere richtlijnen.
input_example = {
"messages":
[
{"content": "How many categories of products do we have? Name them.", "role": "user"}
]
}
mlflow.models.predict(
model_uri = logged_chain_info.model_uri,
input_data = input_example,
)
de modelinvoer valideren vóór de implementatie
Bij het leveren van modellen voor eindpunten wordt een speciale indeling van json
invoer verwacht om te controleren of uw modelinvoer werkt op een dienend eindpunt voordat de implementatie wordt uitgevoerd. U kunt validate_serving_input
in MLflow gebruiken om een dergelijke validatie uit te voeren.
Hier volgt een voorbeeld van de automatisch gegenereerde code op het tabblad met artefacten van de run, als uw model is geregistreerd met een geldig invoervoorbeeld.
from mlflow.models import validate_serving_input
model_uri = 'runs:/<run_id>/<artifact_path>'
serving_payload = """{
"messages": [
{
"content": "How many product categories are there?",
"role": "user"
}
]
}
"""
# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)
U kunt ook invoervoorbeelden testen op basis van het vastgelegde model met behulp van convert_input_example_to_serving_input
API om een geldige json-invoer te generate.
from mlflow.models import validate_serving_input
from mlflow.models import convert_input_example_to_serving_input
model_uri = 'runs:/<run_id>/<artifact_path>'
# Define INPUT_EXAMPLE with your own input example to the model
# A valid input example is a data instance suitable for pyfunc prediction
serving_payload = convert_input_example_to_serving_input(INPUT_EXAMPLE)
# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)
Foutopsporing nadat de containerbuild is geslaagd
Zelfs als de container is gebouwd, kunnen er problemen zijn wanneer u het model uitvoert of tijdens de bewerking van het eindpunt zelf. In de volgende subsecties worden veelvoorkomende problemen beschreven en wordt beschreven hoe u problemen kunt oplossen en fouten kunt opsporen
Ontbrekende afhankelijkheid
Mogelijk get u een fout zoals An error occurred while loading the model. No module named <module-name>.
. Deze fout kan erop wijzen dat een afhankelijkheid ontbreekt in de container. Controleer of u alle afhankelijkheden hebt aangegeven die moeten worden opgenomen in de build van de container. Let vooral op aangepaste bibliotheken en zorg ervoor dat de .whl
bestanden worden opgenomen als artefacten.
Servicelogboeken herhalen
Als uw containerbuild mislukt, controleert u de servicelogboeken om te zien of u merkt dat ze worden herhaald wanneer het eindpunt het model probeert te laden. Als u dit gedrag ziet, voert u de volgende stappen uit:
- Open een notebook en koppel deze aan een cluster voor alle doeleinden dat gebruikmaakt van een Databricks Runtime-versie, niet Databricks Runtime voor Machine Learning.
- Laad het model met behulp van MLflow en probeer daar de foutopsporing uit te voeren.
U kunt het model ook lokaal op uw pc laden en daar fouten opsporen. Laad uw model lokaal met behulp van het volgende:
import os
import mlflow
os.environ["MLFLOW_TRACKING_URI"] = "databricks://PROFILE"
ARTIFACT_URI = "model_uri"
if '.' in ARTIFACT_URI:
mlflow.set_registry_uri('databricks-uc')
local_path = mlflow.artifacts.download_artifacts(ARTIFACT_URI)
print(local_path)
conda env create -f local_path/artifact_path/conda.yaml
conda activate mlflow-env
mlflow.pyfunc.load_model(local_path/artifact_path)
Model mislukt wanneer aanvragen naar het eindpunt worden verzonden
Mogelijk krijgt u een foutmelding zoals Encountered an unexpected error while evaluating the model. Verify that the input is compatible with the model for inference.
wanneer predict()
het model wordt aangeroepen.
Er is een codeprobleem in de predict()
functie. Databricks raadt u aan het model vanuit MLflow in een notebook te laden en aan te roepen. Als u dit doet, worden de problemen in de functie predict()
gemarkeerd en ziet u where de fout zich in de methode voordoet.
Werkruimte overschrijdt de ingerichte gelijktijdigheid
Mogelijk treedt er een Workspace exceeded provisioned concurrency quota
fout op.
U kunt gelijktijdigheid verhogen, afhankelijk van de beschikbaarheid van regio's. Neem contact op met uw Databricks-accountteam en geef uw werkruimte-id op om een gelijktijdigheidsverhoging aan te vragen.
Foutopsporing na een containerbuildfout
In deze sectie vindt u informatie over problemen die kunnen optreden wanneer uw build mislukt.
OSError: [Errno 28] No space left on device
De No space left
fout kan worden veroorzaakt doordat te veel grote artefacten onnodig naast het model worden geregistreerd. Controleer in MLflow of overbodige artefacten niet naast het model worden geregistreerd en probeer het afgeslankte pakket opnieuw te implementeren.
Problemen met Azure Firewall bij het leveren van modellen vanuit Unity Catalog
U kunt de fout zien: Build could not start due to an internal error. If you are serving a model from UC and Azure Firewall is enabled, this is not supported by default.
.
Neem contact op met uw Databricks-accountteam om het probleem op te lossen.
Buildfout vanwege gebrek aan GPU-beschikbaarheid
Mogelijk ziet u een fout: Build could not start due to an internal error - please contact your Databricks representative.
.
Neem contact op met uw Databricks-accountteam om het probleem op te lossen.