Delen via


Fouten opsporen in scorescripts met behulp van de HTTP-server voor Azure Machine Learning-deductie

De HTTP-server van Azure Machine Learning-deductie is een Python-pakket dat uw scorefunctie beschikbaar maakt als een HTTP-eindpunt en de Flask-servercode en afhankelijkheden verpakt in een enkel pakket. De deductieserver is opgenomen in de vooraf gemaakte Docker-installatiekopieën voor deductie die worden gebruikt bij het implementeren van een model in Azure Machine Learning. Wanneer u het pakket alleen gebruikt, kunt u het model lokaal implementeren voor productie. U kunt uw scorescript (invoerscript) ook eenvoudig valideren in een lokale ontwikkelomgeving. Als er een probleem is met het scorescript, retourneert de deductieserver een fout en de locatie van de fout.

U kunt de deductieserver ook gebruiken om validatiepoorten te maken in een pijplijn voor continue integratie en implementatie. U kunt bijvoorbeeld de deductieserver starten met het kandidaatscript en de testsuite uitvoeren op het lokale eindpunt.

Dit artikel ondersteunt ontwikkelaars die de deductieserver willen gebruiken om lokaal fouten op te sporen. In dit artikel ziet u hoe u de deductieserver gebruikt met online-eindpunten.

Vereisten

  • Python 3.8 of hoger
  • Anaconda

De deductieserver wordt uitgevoerd op Windows- en Linux-besturingssystemen.

Opties voor lokale foutopsporing voor online-eindpunten verkennen

Door lokaal fouten in eindpunten op te sporen voordat u in de cloud implementeert, kunt u fouten in uw code en configuratie vroegtijdig opsporen. Als u lokaal fouten wilt opsporen in eindpunten, hebt u verschillende opties, waaronder:

  • De HTTP-server voor deductie van Azure Machine Learning.
  • Een lokaal eindpunt.

De volgende tabel bevat een overzicht van de ondersteuning die elke optie biedt voor verschillende foutopsporingsscenario's:

Scenariobeschrijving Inferentieserver Lokaal eindpunt
Lokale Python-omgeving bijwerken zonder opnieuw opbouwen van Docker-installatiekopieën Ja Nr.
Scorescript bijwerken Ja Ja
Implementatieconfiguraties bijwerken (implementatie, omgeving, code, model) Nr. Ja
Foutopsporingsprogramma van Microsoft Visual Studio Code (VS Code) integreren Ja Ja

In dit artikel wordt beschreven hoe u de deductieserver gebruikt.

Wanneer u de deductieserver lokaal uitvoert, kunt u zich richten op het opsporen van fouten in uw scorescript zonder dat u zich zorgen hoeft te maken over implementatiecontainerconfiguraties.

Fouten opsporen in uw scorescript lokaal

Als u lokaal fouten in uw scorescript wilt opsporen, hebt u verschillende opties voor het testen van het gedrag van de deductieserver:

De volgende secties bevatten informatie over elke optie.

Een dummy-scorescript gebruiken om het gedrag van de deductieserver te testen

  1. Maak een map met de naam server_quickstart om uw bestanden op te slaan:

    mkdir server_quickstart
    cd server_quickstart
    
  2. Als u pakketconflicten wilt voorkomen, maakt u een virtuele omgeving, zoals myenv, en activeert u deze:

    python -m virtualenv myenv
    

    Notitie

    Voer in Linux de source myenv/bin/activate opdracht uit om de virtuele omgeving te activeren.

    Nadat u de deductieserver hebt getest, kunt u de deactivate opdracht uitvoeren om de virtuele Python-omgeving te deactiveren.

  3. Installeer het azureml-inference-server-http pakket vanuit de PyPI-feed (Python Package Index):

    python -m pip install azureml-inference-server-http
    
  4. Maak het invoerscript. In het volgende voorbeeld wordt een eenvoudig invoerscript gemaakt en opgeslagen in een bestand met de naam score.py:

    echo -e 'import time\ndef init(): \n\ttime.sleep(1) \n\ndef run(input_data): \n\treturn {"message":"Hello, World!"}' > score.py
    
  5. Gebruik de azmlinfsrv opdracht om de deductieserver te starten en het score.py-bestand in te stellen als het invoerscript:

    azmlinfsrv --entry_script score.py
    

    Notitie

    De deductieserver wordt gehost op 0.0.0.0, wat betekent dat deze luistert naar alle IP-adressen van de hostingmachine.

  6. Gebruik het curl hulpprogramma om een scoreaanvraag naar de deductieserver te verzenden:

    curl -p 127.0.0.1:5001/score
    

    De deductieserver plaatst het volgende antwoord:

    {"message": "Hello, World!"}
    
  7. Wanneer u klaar bent met testen, selecteert u Ctrl+C om de deductieserver te stoppen.

U kunt het score.py scorescriptbestand wijzigen. Vervolgens kunt u uw wijzigingen testen met behulp van de azmlinfsrv --entry_script score.py opdracht om de deductieserver opnieuw uit te voeren.

Integreren met VS Code

In VS Code kunt u de Python-extensie gebruiken voor foutopsporing met het azureml-inference-server-http-pakket . VS Code biedt twee modi voor foutopsporing: starten en koppelen.

Voordat u een van beide modi gebruikt, installeert u het azureml-inference-server-http pakket door de volgende opdracht uit te voeren:

python -m pip install azureml-inference-server-http

Notitie

Installeer de deductieserver in een virtuele omgeving om pakketconflicten te voorkomen. U kunt de pip install virtualenv opdracht gebruiken om virtuele omgevingen in te schakelen voor uw configuratie.

Startmodus

Voer voor de startmodus de volgende stappen uit om het VS Code-launch.json-configuratiebestand in te stellen en de deductieserver in VS Code te starten:

  1. Start VS Code en open de map met het score.py script.

  2. Voeg voor die werkruimte in VS Code de volgende configuratie toe aan het launch.json-bestand:

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Debug score.py",
                "type": "debugpy",
                "request": "launch",
                "module": "azureml_inference_server_http.amlserver",
                "args": [
                    "--entry_script",
                    "score.py"
                ]
            }
        ]
      }
    
  3. Start de foutopsporingssessie in VS Code door Uitvoeren>Start Foutopsporing te selecteren of door F5 te selecteren.

Koppelmodus

Voer voor de bijlagemodus de volgende stappen uit om VS Code te gebruiken met de Python-extensie om te koppelen aan het deductieserverproces:

Notitie

Voor Linux installeert u eerst het gdb pakket door de opdracht uit te sudo apt-get install -y gdb voeren.

  1. Start VS Code en open de map met het score.py script.

  2. Voeg voor die werkruimte in VS Code de volgende configuratie toe aan het launch.json-bestand:

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python: Attach using Process ID",
                "type": "debugpy",
                "request": "attach",
                "processId": "${command:pickProcess}",
                "justMyCode": true
            }
        ]
      }
    
  3. Start de deductieserver in een opdrachtvenster door de opdracht uit te azmlinfsrv --entry_script score.py voeren.

  4. Voer de volgende stappen uit om de foutopsporingssessie in VS Code te starten:

    1. Selecteer Uitvoeren>Start foutopsporing of selecteer F5.

    2. Zoek in het opdrachtvenster de logboeken van de deductieserver om de proces-id van het azmlinfsrv proces te vinden:

      Schermopname van een opdrachtvenster met de logboeken van deductieserver. In één logboekinstructie is de proces-id van de opdracht azmlinfsrv gemarkeerd.

      Zorg ervoor dat u de id van het azmlinfsrv proces zoekt, niet het gunicorn proces.

    3. Voer in het foutopsporingsprogramma van VS Code de id van het azmlinfsrv proces in.

      Als u de VS Code-proceskiezer niet ziet, voert u handmatig de proces-id in het processId veld van het launch.json-bestand voor de werkruimte in.

Voor het starten en koppelen van modi kunt u onderbrekingspunten instellen en fouten in het script stapsgewijs opsporen.

Een end-to-end-voorbeeld gebruiken

Met de volgende procedure wordt de deductieserver lokaal uitgevoerd met voorbeeldbestanden uit de voorbeeldopslagplaats van Azure Machine Learning. De voorbeeldbestanden bevatten een scorescript, een modelbestand en een omgevingsbestand. Zie Een machine learning-model implementeren en beoordelen met behulp van een online-eindpunt voor meer voorbeelden van het gebruik van deze voorbeeldbestanden.

  1. Kloon de voorbeeldopslagplaats en ga naar de map met de relevante voorbeeldbestanden:

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd azureml-examples/cli/endpoints/online/model-1/
    
  2. Gebruik Conda om een virtuele omgeving te maken en te activeren:

    In dit voorbeeld wordt het azureml-inference-server-http pakket automatisch geïnstalleerd. Het pakket is opgenomen als een afhankelijke bibliotheek van het azureml-defaults pakket, dat wordt vermeld in het conda.yaml-bestand.

    # Create the environment from the YAML file.
    conda env create --name model-env -f ./environment/conda.yaml
    # Activate the new environment.
    conda activate model-env
    
  3. Controleer het scorescript, onlinescoring/score.py:

    import os
    import logging
    import json
    import numpy
    import joblib
    
    
    def init():
        """
        This function is called when the container is initialized/started, typically after create/update of the deployment.
        You can write the logic here to perform init operations like caching the model in memory
        """
        global model
        # AZUREML_MODEL_DIR is an environment variable created during deployment.
        # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
        # Please provide your model's folder name if there is one
        model_path = os.path.join(
            os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
        )
        # deserialize the model file back into a sklearn model
        model = joblib.load(model_path)
        logging.info("Init complete")
    
    
    def run(raw_data):
        """
        This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
        In the example we extract the data from the json input and call the scikit-learn model's predict()
        method and return the result back
        """
        logging.info("model 1: request received")
        data = json.loads(raw_data)["data"]
        data = numpy.array(data)
        result = model.predict(data)
        logging.info("Request processed")
        return result.tolist()
    
  4. Start de inferentieserver door het scorescript en het pad naar de modelmap op te geven.

    Tijdens de implementatie wordt de AZUREML_MODEL_DIR variabele gedefinieerd om het pad naar de modelmap op te slaan. U geeft die waarde op in de model_dir parameter. Wanneer het scorescript wordt uitgevoerd, wordt de waarde opgehaald uit de AZUREML_MODEL_DIR variabele.

    In dit geval gebruikt u de huidige map, ./als de model_dir waarde, omdat het scorescript de submap opgeeft als model/sklearn_regression_model.pkl.

    azmlinfsrv --entry_script ./onlinescoring/score.py --model_dir ./
    

    Wanneer de inferenceserver wordt gestart en met succes het score-script aanroept, wordt het opstartlogboek van het voorbeeld geopend. Anders worden in het logboek foutberichten weergegeven.

  5. Test het scorescript met voorbeeldgegevens door de volgende stappen uit te voeren:

    1. Open een ander opdrachtvenster en ga naar dezelfde werkmap waarin u de azmlinfsrv opdracht hebt uitgevoerd.

    2. Gebruik het volgende curl hulpprogramma om een voorbeeldaanvraag naar de deductieserver te verzenden en een scoreresultaat te ontvangen:

      curl --request POST "127.0.0.1:5001/score" --header "Content-Type:application/json" --data @sample-request.json
      

      Wanneer er geen problemen zijn met het scorescript, retourneert het script het scoreresultaat. Als er problemen optreden, kunt u het scorescript bijwerken en de deductieserver opnieuw starten om het bijgewerkte script te testen.

Inferenceserverroutes beoordelen

De deductieserver luistert standaard op poort 5001 op de volgende routes:

Naam Route
Levendigheidscontrole 127.0.0.1:5001/
Score 127.0.0.1:5001/score
OpenAPI (swagger) 127.0.0.1:5001/swagger.json

Serverparameters voor deductie controleren

De deductieserver accepteert de volgende parameters:

Kenmerk Vereist Verstek Omschrijving
entry_script Waar N.v.t. Identificeert het relatieve of absolute pad naar het scorescript
model_dir Onwaar N.v.t. Identificeert het relatieve of absolute pad naar de map waarin het model wordt opgeslagen dat gebruikt wordt voor inferentie.
port Onwaar 5001 Geeft de poort op van de inference-server
worker_count Onwaar 1 Biedt het aantal werkdraad aan voor het verwerken van gelijktijdige aanvragen
appinsights_instrumentation_key Onwaar N.v.t. Biedt de instrumentatiesleutel voor het exemplaar van Application Insights waarin de logbestanden worden gepubliceerd
access_control_allow_origins Onwaar N.v.t. Hiermee schakelt u CORS (Cross-Origin Resource Sharing) in voor de opgegeven oorsprongen, waarbij meerdere oorsprongen worden gescheiden door een komma (,), zoals microsoft.com, bing.com

Verwerking van de deductieserveraanvragen verkennen

De volgende stappen laten zien hoe de deductieserver, azmlinfsrvbinnenkomende aanvragen verwerkt:

  1. Een Python CLI-wrapper bevindt zich rond de netwerkstack van de deductieserver en wordt gebruikt om de deductieserver te starten.

  2. Een client verzendt een aanvraag naar de deductieserver.

  3. De deductieserver verzendt de aanvraag via de WSGI-server (Web Server Gateway Interface), die de aanvraag verzendt naar een van de volgende Flask-werktoepassingen:

  4. De Flask-werkrol-app verwerkt de aanvraag, waaronder het laden van het invoerscript en eventuele afhankelijkheden.

  5. Uw invoerscript ontvangt de aanvraag. Het invoerscript maakt een deductieaanroep naar het geladen model en retourneert een antwoord.

Diagram dat laat zien hoe de inferentieserver wordt gestart en hoe een aanvraag naar een Flask-worker-app stroomt en vervolgens naar gebruikerscode.

Deductieserverlogboeken verkennen

Er zijn twee manieren om logboekgegevens te verkrijgen voor de deductieservertest:

  • Voer het azureml-inference-server-http pakket lokaal uit en bekijk de logboekuitvoer.
  • Gebruik online-eindpunten en bekijk de containerlogboeken. Het logboek voor de deductieserver heeft de naam Azure Machine Learning Inferencing HTTP-serverversie<>.

Notitie

De indeling voor logboekregistratie is gewijzigd sinds versie 0.8.0. Als uw logboek een andere stijl gebruikt dan verwacht, werkt u het azureml-inference-server-http pakket bij naar de nieuwste versie.

Opstartlogboeken weergeven

Wanneer de deductieserver wordt gestart, worden in de logboeken de volgende initiële serverinstellingen weergegeven:

Azure ML Inferencing HTTP server <version>


Server Settings
---------------
Entry Script Name: <entry-script>
Model Directory: <model-directory>
Config File: <configuration-file>
Worker Count: <worker-count>
Worker Timeout (seconds): None
Server Port: <port>
Health Port: <port>
Application Insights Enabled: false
Application Insights Key: <Application-Insights-instrumentation-key>
Inferencing HTTP server version: azmlinfsrv/<version>
CORS for the specified origins: <access-control-allow-origins>
Create dedicated endpoint for health: <health-check-endpoint>


Server Routes
---------------
Liveness Probe: GET   127.0.0.1:<port>/
Score:          POST  127.0.0.1:<port>/score

<logs>

Wanneer u bijvoorbeeld de inferentieserver uitvoert door de stappen van het end-to-end voorbeeld te volgen, bevatten de logs de volgende informatie:

Azure ML Inferencing HTTP server v1.2.2


Server Settings
---------------
Entry Script Name: /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
Model Directory: ./
Config File: None
Worker Count: 1
Worker Timeout (seconds): None
Server Port: 5001
Health Port: 5001
Application Insights Enabled: false
Application Insights Key: None
Inferencing HTTP server version: azmlinfsrv/1.2.2
CORS for the specified origins: None
Create dedicated endpoint for health: None

Server Routes
---------------
Liveness Probe: GET   127.0.0.1:5001/
Score:          POST  127.0.0.1:5001/score

2022-12-24 07:37:53,318 I [32726] gunicorn.error - Starting gunicorn 20.1.0
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Listening at: http://0.0.0.0:5001 (32726)
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Using worker: sync
2022-12-24 07:37:53,322 I [32756] gunicorn.error - Booting worker with pid: 32756
Initializing logger
2022-12-24 07:37:53,779 I [32756] azmlinfsrv - Starting up app insights client
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Found user script at /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - run() is not decorated. Server will invoke it with the input in JSON string.
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Invoking user's init function
2022-12-24 07:37:55,974 I [32756] azmlinfsrv.user_script - Users's init has completed successfully
2022-12-24 07:37:55,976 I [32756] azmlinfsrv.swagger - Swaggers are prepared for the following versions: [2, 3, 3.1].
2022-12-24 07:37:55,976 I [32756] azmlinfsrv - Scoring timeout is set to 3600000
2022-12-24 07:37:55,976 I [32756] azmlinfsrv - Worker with pid 32756 ready for serving traffic

Informatie over de indeling van logboekgegevens

Alle logboeken van de deductieserver, met uitzondering van het startprogrammascript, bevatten gegevens in de volgende indeling:

<UTC-time> <level> [<process-ID>] <logger-name> - <message>

Elke vermelding bestaat uit de volgende onderdelen:

  • <UTC-time>: het tijdstip waarop de vermelding wordt ingevoerd in het logboek
  • <level>: Het eerste teken van het logboekregistratieniveau voor de vermelding, zoals E voor ERROR, I voor INFO, enzovoort
  • <process-ID>: De id van het proces dat is gekoppeld aan de vermelding
  • <logger-name>: De naam van de resource die is gekoppeld aan de logboekvermelding
  • <message>: De inhoud van het logboekbericht

Er zijn zes niveaus van logboekregistratie in Python. Aan elk niveau is een toegewezen numerieke waarde toegewezen op basis van de ernst:

Niveau van logboekregistratie Numerieke waarde
KRITISCH 50
FOUT 40
WAARSCHUWING 30
INFO 20
DEBUG 10
NOTSET 0

Problemen met deductieserver oplossen

De volgende secties bevatten eenvoudige tips voor probleemoplossing voor de deductieserver. Zie Problemen met online-eindpuntimplementatie en scoringsproblemen oplossen voor het oplossen van problemen met online-eindpunten.

Geïnstalleerde pakketten controleren

Volg deze stappen om problemen met geïnstalleerde pakketten op te lossen:

  1. Verzamel informatie over geïnstalleerde pakketten en versies voor uw Python-omgeving.

  2. Controleer in uw omgevingsbestand de versie van het azureml-inference-server-http Python-pakket dat is opgegeven. Controleer in de opstartlogboeken van de inferentie-HTTP-server van Azure Machine Learning de versie van de inferentieserver die wordt weergegeven. Controleer of de twee versies overeenkomen.

    In sommige gevallen installeert de pip-afhankelijkheidsoplossing onverwachte pakketversies. Mogelijk moet u de geïnstalleerde pakketten en versies corrigeren pip .

  3. Als u in uw omgeving Flask of de afhankelijkheden daarvan opgeeft, verwijder dan deze items.

    • Afhankelijke pakketten zijn onder andere , , , , en flaskjinja2. itsdangerouswerkzeugmarkupsafeclick
    • Het flask pakket wordt vermeld als een afhankelijkheid in het deductieserverpakket. De beste methode is om de deductieserver toe te staan het flask pakket te installeren.
    • Wanneer de deductieserver is geconfigureerd ter ondersteuning van nieuwe versies van Flask, ontvangt de deductieserver automatisch de pakketupdates zodra deze beschikbaar komen.

Controleer de versie van de deductieserver

Het azureml-inference-server-http serverpakket wordt gepubliceerd naar PyPI. De PyPI-pagina bevat het wijzigingenlogboek en alle versies van het pakket.

Als u een vroege pakketversie gebruikt, werkt u uw configuratie bij naar de nieuwste versie. De volgende tabel bevat een overzicht van stabiele versies, veelvoorkomende problemen en aanbevolen aanpassingen:

Versie van het pakket Omschrijving Verzenden Oplossing
0.4.x Gebundeld in trainingsafbeeldingen die zijn gedateerd tot en met 20220601 of eerder en pakketversies 0.1.34 tot en met 1.43. De nieuwste stabiele versie is 0.4.13. Voor serverversies ouder dan 0.4.11 kunnen Flask-afhankelijkheidsproblemen optreden, zoals can't import name Markup from jinja2. Voer een upgrade uit naar versie 0.4.13 of 1.4.x, indien mogelijk de nieuwste versie.
0.6.x Vooraf geïnstalleerd in deductie-installatiekopieën die zijn gedateerd 20220516 en eerder. De nieuwste stabiele versie is 0.6.1. N.v.t. N.v.t.
0.7.x Ondersteunt Flask 2. De nieuwste stabiele versie is 0.7.7. N.v.t. N.v.t.
0.8.x Maakt gebruik van een bijgewerkte logboekindeling. Hiermee wordt de ondersteuning voor Python 3.6 beëindigd. N.v.t. N.v.t.
1.0.x Hiermee wordt de ondersteuning voor Python 3.7 beëindigd. N.v.t. N.v.t.
1.1.x Wordt gemigreerd naar pydantic 2.0. N.v.t. N.v.t.
1.2.x Voegt ondersteuning toe voor Python 3.11. Updates gunicorn voor versie 22.0.0. Updates werkzeug voor versie 3.0.3 en nieuwere versies. N.v.t. N.v.t.
1.3.x Voegt ondersteuning toe voor Python 3.12. Upgrades certifi naar versie 2024.7.4. Upgrade flask-cors naar versie 5.0.0. Hiermee worden de gunicorn en pydantic pakketten bijgewerkt. N.v.t. N.v.t.
1.4.x Voert een upgrade van waitress naar versie 3.0.1 uit. Hiermee wordt de ondersteuning voor Python 3.8 beëindigd. Hiermee verwijdert u de compatibiliteitslaag die voorkomt dat de Flask 2.0-upgrade code voor aanvraagobjecten onderbreekt. Als u afhankelijk bent van de compatibiliteitslaag, werkt uw aanvraagobjectcode mogelijk niet. Migreer uw scorescript naar Flask 2.

Pakketafhankelijkheden controleren

De meest relevante afhankelijke pakketten voor het azureml-inference-server-http serverpakket zijn:

  • flask
  • opencensus-ext-azure
  • inference-schema

Als u het azureml-defaults pakket opgeeft in uw Python-omgeving, is het azureml-inference-server-http pakket een afhankelijk pakket. De afhankelijkheid wordt automatisch geïnstalleerd.

Aanbeveling

Als u de Azure Machine Learning SDK voor Python v1 gebruikt en het pakket niet expliciet opgeeft azureml-defaults in uw Python-omgeving, kan de SDK het pakket automatisch toevoegen. De pakketversie is echter vergrendeld ten opzichte van de SDK-versie. Als de SDK-versie bijvoorbeeld 1.38.0 is, wordt de azureml-defaults==1.38.0 vermelding toegevoegd aan de pip-vereisten van de omgeving.

TypeError tijdens het opstarten van de deductieserver

U kunt het volgende TypeError tegenkomen tijdens het opstarten van de deductieserver:

TypeError: register() takes 3 positional arguments but 4 were given

  File "/var/azureml-server/aml_blueprint.py", line 251, in register

    super(AMLBlueprint, self).register(app, options, first_registration)

TypeError: register() takes 3 positional arguments but 4 were given

Deze fout treedt op wanneer Flask 2 is geïnstalleerd in uw Python-omgeving, maar de azureml-inference-server-http pakketversie biedt geen ondersteuning voor Flask 2. Ondersteuning voor Flask 2 is beschikbaar in het azureml-inference-server-http 0.7.0-pakket en latere versies, en het azureml-defaults 1.44-pakket en latere versies.

  • Als u het Flask 2-pakket niet gebruikt in een Azure Machine Learning Docker-installatiekopieën, gebruikt u de nieuwste versie van het azureml-inference-server-http of azureml-defaults pakket.

  • Als u het Flask 2-pakket in een Azure Machine Learning Docker-image gebruikt, controleer of de buildversie July 2022 of hoger is.

    U vindt de versie van de installatiekopieën in de containerlogboeken. Zie bijvoorbeeld de volgende logboekinstructies:

    2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information
    2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ###############################################
    2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materialization Build:20220708.v2
    2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,190557998+00:00 | gunicorn/run | 
    

    De builddatum van de installatiekopieën wordt na de Materialization Build notatie weergegeven. In het voorgaande voorbeeld is de beeldversie 20220708, of 8 juli 2022. De afbeelding in dit voorbeeld is compatibel met Flask 2.

    Als u geen vergelijkbaar bericht in het containerlogboek ziet, is uw installatiekopieën verouderd en moeten ze worden bijgewerkt. Als u een CUDA-installatiekopie (Compute Unified Device Architecture) gebruikt en u geen nieuwere installatiekopie kunt vinden, controleert u de opslagplaats AzureML-Containers om te zien of uw installatiekopie is afgeschaft. U vindt aangewezen vervangingen voor afgeschafte installatiekopieën.

    Als u de deductieserver gebruikt met een online-eindpunt, kunt u ook de logboeken vinden in Azure Machine Learning Studio. Selecteer op de pagina voor uw eindpunt het tabblad Logboeken .

Als u implementeert met de SDK v1 en niet expliciet een installatiekopie opgeeft in uw implementatieconfiguratie, past de deductieserver het openmpi4.1.0-ubuntu20.04 pakket toe met een versie die overeenkomt met uw lokale SDK-toolset. De geïnstalleerde versie is echter mogelijk niet de meest recente beschikbare versie van de afbeeldingen.

Voor SDK-versie 1.43 installeert de deductieserver standaard de openmpi4.1.0-ubuntu20.04:20220616 pakketversie, maar deze pakketversie is niet compatibel met SDK 1.43. Zorg ervoor dat u de nieuwste SDK voor uw implementatie gebruikt.

Als u de installatiekopieën niet kunt bijwerken, kunt u het probleem tijdelijk voorkomen door de azureml-defaults==1.43 vermeldingen in azureml-inference-server-http~=0.4.13 uw omgevingsbestand vast te maken. Met deze vermeldingen wordt de inferentieserver geïnstrueerd om de oudere versie met flask 1.0.x te installeren.

ImportError of ModuleNotFoundError tijdens het opstarten van de inferenceserver

Tijdens het opstarten van de inferenceserver kunt u een ImportError of ModuleNotFoundError tegenkomen op specifieke modules zoals opencensus, jinja2, markupsafe, of click. In het volgende voorbeeld ziet u het foutbericht:

ImportError: cannot import name 'Markup' from 'jinja2'

De import- en modulefouten treden op wanneer u versie 0.4.10 of eerdere versies van de deductieserver gebruikt die de Flask-afhankelijkheid niet vastmaken aan een compatibele versie. Installeer een latere versie van de deductieserver om het probleem te voorkomen.