Udostępnij za pośrednictwem


Debugowanie skryptów oceniania za pomocą serwera HTTP wnioskowania usługi Azure Machine Learning

Serwer HTTP wnioskowania usługi Azure Machine Learning to pakiet języka Python, który uwidacznia funkcję oceniania jako punkt końcowy HTTP i opakowuje kod serwera Flask i zależności w pojedynczy pakiet. Serwer jest dołączony do wstępnie utworzonych obrazów platformy Docker na potrzeby wnioskowania , które są używane podczas wdrażania modelu za pomocą usługi Azure Machine Learning. Samodzielnie korzystając z pakietu, można wdrożyć model lokalnie na potrzeby środowiska produkcyjnego i łatwo zweryfikować skrypt oceniania (wpisu) w lokalnym środowisku deweloperskim. Jeśli występuje problem ze skryptem oceniania, serwer zwraca błąd i lokalizację błędu.

Serwer może również służyć do tworzenia bram weryfikacji w potoku ciągłej integracji i wdrażania. Na przykład można uruchomić serwer za pomocą skryptu kandydata i uruchomić zestaw testów względem lokalnego punktu końcowego.

Ten artykuł obsługuje deweloperów, którzy chcą używać serwera wnioskowania do debugowania lokalnego i opisano sposób używania serwera wnioskowania z punktami końcowymi online w systemie Windows.

Wymagania wstępne

Aby użyć serwera HTTP wnioskowania usługi Azure Machine Learning na potrzeby lokalnego debugowania, konfiguracja musi zawierać następujące składniki:

  • Środowisko Python w wersji 3.8 lub nowszej
  • Anaconda

Serwer HTTP wnioskowania usługi Azure Machine Learning działa w systemach operacyjnych opartych na systemie Windows i Linux.

Eksplorowanie lokalnych opcji debugowania dla punktów końcowych online

Debugując punkty końcowe lokalnie przed wdrożeniem w chmurze, można przechwytywać błędy w kodzie i konfiguracji wcześniej. Aby debugować punkty końcowe lokalnie, masz kilka opcji, w tym:

  • Serwer HTTP wnioskowania usługi Azure Machine Learning
  • Lokalny punkt końcowy

W tym artykule opisano sposób pracy z serwerem HTTP wnioskowania usługi Azure Machine Learning w systemie Windows.

Poniższa tabela zawiera omówienie scenariuszy, które ułatwiają wybranie najlepszej opcji:

Scenariusz Wnioskowanie serwera HTTP Lokalny punkt końcowy
Aktualizowanie lokalnego środowiska języka Python bez ponownego kompilowanie obrazu platformy Docker Tak Nie.
Aktualizowanie skryptu oceniania Tak Tak
Aktualizowanie konfiguracji wdrożenia (wdrożenie, środowisko, kod, model) Nie. Tak
Integrowanie debugera programu Microsoft Visual Studio Code (VS Code) Tak Tak

Po uruchomieniu lokalnego serwera HTTP wnioskowania można skoncentrować się na debugowaniu skryptu oceniania bez obaw o konfiguracje kontenera wdrożenia.

Instalowanie pakietu azureml-inference-server-http

Aby zainstalować azureml-inference-server-http pakiet, uruchom następujące polecenie:

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

Uwaga

Aby uniknąć konfliktów pakietów, zainstaluj serwer HTTP wnioskowania w środowisku wirtualnym. Możesz użyć pip install virtualenv polecenia , aby włączyć środowiska wirtualne dla konfiguracji.

Lokalne debugowanie skryptu oceniania

Aby debugować skrypt oceniania lokalnie, masz kilka opcji testowania zachowania serwera:

Testowanie zachowania serwera za pomocą fikcyjnego skryptu oceniania

  1. Utwórz katalog o nazwie server_quickstart do przechowywania plików:

    mkdir server_quickstart
    cd server_quickstart
    
  2. Aby uniknąć konfliktów pakietów, utwórz środowisko wirtualne, takie jak myenv, i aktywuj je:

    python -m virtualenv myenv
    

    Uwaga

    W systemie Linux uruchom source myenv/bin/activate polecenie , aby aktywować środowisko wirtualne.

    Po przetestowaniu serwera możesz uruchomić deactivate polecenie , aby dezaktywować środowisko wirtualne języka Python.

  3. azureml-inference-server-http Zainstaluj pakiet ze źródła danych pypi:

    python -m pip install azureml-inference-server-http
    
  4. Utwórz skrypt wejściowy. Poniższy przykład tworzy podstawowy skrypt wpisu i zapisuje go w pliku o nazwie score.py:

    echo -e "import time def init(): \n\t time.sleep(1) \n\n def run(input_data): \n\t return {"message":"Hello, World!"}" > score.py
    
  5. Uruchom serwer za azmlinfsrv pomocą polecenia i ustaw plik score.py jako skrypt wpisu:

    azmlinfsrv --entry_script score.py
    

    Uwaga

    Serwer jest hostowany w wersji 0.0.0.0, co oznacza, że nasłuchuje wszystkich adresów IP maszyny hostingu.

  6. Wyślij żądanie oceniania do serwera przy użyciu curl narzędzia :

    curl -p 127.0.0.1:5001/score
    

    Serwer publikuje następującą odpowiedź:

    {"message": "Hello, World!"}
    
  7. Po przetestowaniu wybierz Ctrl + C, aby zakończyć działanie serwera.

Teraz możesz zmodyfikować plik skryptu oceniania (score.py) i przetestować zmiany, uruchamiając ponownie serwer za azmlinfsrv --entry_script score.py pomocą polecenia .

Integracja z programem Visual Studio Code

Aby użyć programu VS Code i rozszerzenia języka Python do debugowania z pakietem azureml-inference-server-http , możesz użyć trybów Uruchamiania i dołączania.

  • W trybie uruchamiania skonfiguruj plik launch.json w programie VS Code i uruchom serwer HTTP wnioskowania usługi Azure Machine Learning w programie VS Code:

    1. Uruchom program VS Code i otwórz folder zawierający skrypt (score.py).

    2. Dodaj następującą konfigurację do pliku launch.json dla tego obszaru roboczego w programie VS Code:

      launch.json

      {
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Debug score.py",
                  "type": "python",
                  "request": "launch",
                  "module": "azureml_inference_server_http.amlserver",
                  "args": [
                      "--entry_script",
                      "score.py"
                  ]
              }
          ]
        }
      
    3. Uruchom sesję debugowania w programie VS Code, wybierając pozycję Uruchom debugowanie> lub używając skrótu klawiaturowego F5.

  • W przypadku trybu dołączania uruchom serwer HTTP wnioskowania usługi Azure Machine Learning w oknie polecenia i użyj programu VS Code z rozszerzeniem języka Python, aby dołączyć do procesu:

    Uwaga

    W przypadku systemu Linux najpierw zainstaluj gdb pakiet, uruchamiając sudo apt-get install -y gdb polecenie .

    1. Dodaj następującą konfigurację do pliku launch.json dla tego obszaru roboczego w programie VS Code:

      launch.json

      {
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Python: Attach using Process Id",
                  "type": "python",
                  "request": "attach",
                  "processId": "${command:pickProcess}",
                  "justMyCode": true
              }
          ]
        }
      
    2. W oknie polecenia uruchom serwer HTTP wnioskowania przy użyciu azmlinfsrv --entry_script score.py polecenia .

    3. Uruchom sesję debugowania w programie VS Code:

      1. Wybierz pozycję Uruchom debugowanie> lub użyj skrótu klawiaturowego F5.

      2. W oknie polecenia wyświetl dzienniki z serwera wnioskowania i znajdź identyfikator azmlinfsrv procesu polecenia (a nie gunicorn):

        Zrzut ekranu przedstawiający okno polecenia wyświetlające dzienniki z serwera HTTP wnioskowania i identyfikator procesu wyróżnionego polecenia azmlinfsrv.

      3. W debugerze programu VS Code wprowadź identyfikator azmlinfsrv procesu polecenia.

        Jeśli nie widzisz selektora procesów programu VS Code, możesz ręcznie wprowadzić identyfikator procesu w processId polu pliku launch.json dla tego obszaru roboczego.

W obu trybach można ustawić punkty przerwania i debugować skrypt krok po kroku.

Używanie kompleksowego przykładu

Poniższa procedura uruchamia serwer lokalnie z przykładowymi plikami (skrypt oceniania, plik modelu i środowisko) z repozytorium przykładowego usługi Azure Machine Learning. Aby uzyskać więcej przykładów używania tych przykładowych plików, zobacz Wdrażanie i ocenianie modelu uczenia maszynowego przy użyciu punktu końcowego online.

  1. Sklonuj przykładowe repozytorium:

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd azureml-examples/cli/endpoints/online/model-1/
    
  2. Tworzenie i aktywowanie środowiska wirtualnego za pomocą narzędzia Conda:

    W tym przykładzie azureml-inference-server-http pakiet jest instalowany automatycznie. Pakiet jest dołączany jako zależna biblioteka azureml-defaults pakietu w pliku conda.yml :

    # Create the environment from the YAML file
    conda env create --name model-env -f ./environment/conda.yml
    # Activate the new environment
    conda activate model-env
    
  3. Przejrzyj skrypt oceniania:

    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. Uruchom serwer HTTP wnioskowania, określając skrypt oceniania i plik modelu:

    Katalog modelu określony w parametrze model_dir jest definiowany przy użyciu zmiennej AZUREML_MODEL_DIR i pobierany w skryfcie oceniania.

    W takim przypadku należy określić bieżący katalog ./ ponieważ podkatalog jest określony w skryfcie oceniania jako model/sklearn_regression_model.pkl.

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

    Po uruchomieniu serwera i pomyślnym wywołaniu skryptu oceniania zostanie otwarty przykładowy dziennik uruchamiania. W przeciwnym razie dziennik wyświetla komunikaty o błędach.

  5. Przetestuj skrypt oceniania przy użyciu przykładowych danych:

    Otwórz inne okno polecenia i przejdź do tego samego katalogu roboczego, w którym uruchamiasz polecenie.

    curl Użyj narzędzia , aby wysłać przykładowe żądanie do serwera i otrzymać wynik oceniania:

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

    Jeśli skrypt oceniania nie ma problemów, skrypt zwraca wynik oceniania. Jeśli wystąpią problemy, możesz spróbować zaktualizować skrypt oceniania i ponownie uruchomić serwer, aby przetestować zaktualizowany skrypt.

Przeglądanie tras serwera

Serwer HTTP wnioskowania domyślnie nasłuchuje na porcie 5001 w następujących trasach:

Nazwisko Marszruta
Sonda liveness 127.0.0.1:5001/
Ocena 127.0.0.1:5001/score
OpenAPI (swagger) 127.0.0.1:5001/swagger.json

Przeglądanie parametrów serwera

Serwer HTTP wnioskowania akceptuje następujące parametry:

Parametr Wymagania Wartość domyślna opis
entry_script Prawda Nie dotyczy Identyfikuje względną lub bezwzględną ścieżkę do skryptu oceniania.
model_dir Fałsz Nie dotyczy Identyfikuje względną lub bezwzględną ścieżkę do katalogu, który zawiera model używany do wnioskowania.
port Fałsz 5001 Określa port obsługujący serwer.
worker_count Fałsz 1 Udostępnia liczbę wątków roboczych do przetwarzania współbieżnych żądań.
appinsights_instrumentation_key Fałsz Nie dotyczy Udostępnia klucz instrumentacji do usługi Application Insights, w której są publikowane dzienniki.
access_control_allow_origins Fałsz Nie dotyczy Włącza mechanizm CORS dla określonych źródeł, gdzie wiele źródeł jest oddzielonych przecinkiem (,), takim jak microsoft.com, bing.com.

Eksplorowanie przetwarzania żądań serwera

W poniższych krokach pokazano, jak serwer HTTP wnioskowania usługi Azure Machine Learning (azmlinfsrv) obsługuje żądania przychodzące:

  1. Otoka interfejsu wiersza polecenia języka Python znajduje się wokół stosu sieciowego serwera i służy do uruchamiania serwera.

  2. Klient wysyła żądanie do serwera.

  3. Serwer wysyła żądanie za pośrednictwem serwera Internet Server Gateway Interface (WSGI), który wysyła żądanie do aplikacji procesu roboczego platformy Flask:

  4. Aplikacja procesów roboczych platformy Flask obsługuje żądanie, które obejmuje ładowanie skryptu wpisu i wszelkich zależności.

  5. Skrypt wejścia odbiera żądanie. Skrypt wejścia wykonuje wywołanie wnioskowania do załadowanego modelu i zwraca odpowiedź:

Diagram przedstawiający sposób przetwarzania żądań przychodzących przez serwer HTTP wnioskowania.

Eksplorowanie dzienników serwera

Istnieją dwa sposoby uzyskiwania danych dziennika dla testu serwera HTTP wnioskowania:

  • azureml-inference-server-http Uruchom pakiet lokalnie i wyświetl dane wyjściowe dzienników.
  • Użyj punktów końcowych online i wyświetl dzienniki kontenera. Dziennik dla serwera wnioskowania nosi nazwę Azure Machine Learning Inferencing WERSJA serwera <>HTTP.

Uwaga

Format rejestrowania zmienił się od wersji 0.8.0. Jeśli dziennik używa innego stylu niż oczekiwano, zaktualizuj azureml-inference-server-http pakiet do najnowszej wersji.

Wyświetlanie dzienników uruchamiania

Po uruchomieniu serwera dzienniki pokazują ustawienia początkowego serwera w następujący sposób:

Azure Machine Learning Inferencing HTTP server <version>

Server Settings
---------------
Entry Script Name: <entry_script>
Model Directory: <model_dir>
Worker Count: <worker_count>
Worker Timeout (seconds): None
Server Port: <port>
Application Insights Enabled: false
Application Insights Key: <appinsights_instrumentation_key>
Inferencing HTTP server version: azmlinfsrv/<version>
CORS for the specified origins: <access_control_allow_origins>

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

<logs>

Na przykład po uruchomieniu serwera po wykonaniu kompleksowego przykładu dziennik jest wyświetlany w następujący sposób:

Azure Machine Learning Inferencing HTTP server v0.8.0

Server Settings
---------------
Entry Script Name: /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
Model Directory: ./
Worker Count: 1
Worker Timeout (seconds): None
Server Port: 5001
Application Insights Enabled: false
Application Insights Key: None
Inferencing HTTP server version: azmlinfsrv/0.8.0
CORS for the specified origins: 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,977 I [32756] azmlinfsrv - AML_FLASK_ONE_COMPATIBILITY is set, but patching is not necessary.

Informacje o formacie danych dziennika

Wszystkie dzienniki z serwera HTTP wnioskowania, z wyjątkiem skryptu uruchamiania, przedstawiają dane w następującym formacie:

<UTC Time> | <level> [<pid>] <logger name> - <message>

Wpis składa się z następujących składników:

  • <UTC Time>: godzina wprowadzenia wpisu do dziennika.
  • <pid>: identyfikator procesu skojarzonego z wpisem.
  • <level>: Pierwszy znak poziomu rejestrowania dla wpisu, taki jak E ERROR, I info itd.
  • <logger name>: nazwa zasobu skojarzonego z wpisem dziennika.
  • <message>: Zawartość komunikatu dziennika.

Istnieje sześć poziomów rejestrowania w języku Python z przypisanymi wartościami liczbowymi zgodnie z ważnością:

Poziom rejestrowania Wartość liczbowa
KRYTYCZNY 50
BŁĄD 40
OSTRZEŻENIE 30
INFORMACJI 20
DEBUG 10
NOTSET 0

Rozwiązywanie problemów z serwerem

Poniższe sekcje zawierają podstawowe porady dotyczące rozwiązywania problemów z serwerem HTTP wnioskowania usługi Azure Machine Learning. Aby rozwiązać problemy z punktami końcowymi online, zobacz Rozwiązywanie problemów z wdrażaniem punktów końcowych online.

Sprawdzanie zainstalowanych pakietów

Wykonaj następujące kroki, aby rozwiązać problemy z zainstalowanymi pakietami.

  1. Zbierz informacje o zainstalowanych pakietach i wersjach dla środowiska języka Python.

  2. Upewnij się, że azureml-inference-server-http wersja pakietu języka Python określona w pliku środowiska jest zgodna z wersją serwera HTTP wnioskowania usługi Azure Machine Learning wyświetlaną w dzienniku uruchamiania.

    W niektórych przypadkach narzędzie do rozpoznawania zależności instaluje nieoczekiwane wersje pakietu. Może być konieczne uruchomienie polecenia pip , aby poprawić zainstalowane pakiety i wersje.

  3. Jeśli określisz platformę Flask lub jej zależności w danym środowisku, usuń te elementy.

    • Pakiety zależne obejmują flask, , jinja2, werkzeugitsdangerous, markupsafe, i click.
    • flask element jest wyświetlany jako zależność w pakiecie serwera. Najlepszym rozwiązaniem jest umożliwienie serwerowi wnioskowania zainstalowanie flask pakietu.
    • Gdy serwer wnioskowania jest skonfigurowany do obsługi nowych wersji platformy Flask, serwer automatycznie odbiera aktualizacje pakietów w miarę ich dostępności.

Sprawdzanie wersji serwera

Pakiet azureml-inference-server-http serwera jest publikowany w interfejsie PyPI. Na stronie PyPI jest wyświetlana lista zmian i wszystkie poprzednie wersje.

Jeśli używasz starszej wersji pakietu, zaktualizuj konfigurację do najnowszej wersji. Poniższa tabela zawiera podsumowanie stabilnych wersji, typowych problemów i zalecanych korekt:

Wersja pakietu opis Problem Rozwiązanie
0.4.x Dołączone do obrazów szkoleniowych z datą 20220601 lub wcześniejszymi wersjami .1.34 azureml-defaults pakietów za pośrednictwem programu 1.43. Najnowsza stabilna wersja to 0.4.13. W przypadku wersji serwera starszych niż 0.4.11 mogą wystąpić problemy z zależnościami platformy Flask, takie jak "can't import name Markup from jinja2". Uaktualnij do wersji 0.4.13 lub 0.8.x, jeśli jest to możliwe, najnowszą wersję.
0.6.x Wstępnie zainstalowane wywnioskujące obrazy z datą 20220516 i wcześniejszymi wersjami. Najnowsza stabilna wersja to 0.6.1. Brak Brak
0.7.x Obsługuje platformę Flask 2. Najnowsza stabilna wersja to 0.7.7. Brak Brak
0.8.x Zmieniono format dziennika. Zakończono obsługę języka Python 3.6. Brak Brak

Sprawdzanie zależności pakietów

Najbardziej istotne pakiety zależne dla azureml-inference-server-http pakietu serwera obejmują:

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

Jeśli pakiet został określony azureml-defaults w środowisku języka Python, azureml-inference-server-http pakiet jest pakietem zależnym. Zależność jest instalowana automatycznie.

Napiwek

Jeśli używasz zestawu PYTHON SDK w wersji 1 i nie określasz azureml-defaults jawnie pakietu w środowisku języka Python, zestaw SDK może automatycznie dodać pakiet. Jednak wersja pakietu jest zablokowana w stosunku do wersji zestawu SDK. Jeśli na przykład wersja zestawu SDK to 1.38.0, azureml-defaults==1.38.0 wpis zostanie dodany do wymagań środowiska.

TypeError podczas uruchamiania serwera

Podczas uruchamiania serwera mogą wystąpić następujące błędy TypeError :

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

Ten błąd występuje, gdy platforma Flask 2 jest zainstalowana w środowisku języka Python, ale azureml-inference-server-http wersja pakietu nie obsługuje platformy Flask 2. Obsługa platformy Flask 2 jest dostępna w azureml-inference-server-http pakiecie w wersji 0.7.0 lub nowszej oraz azureml-defaults w wersji 1.44 lub nowszej.

  • Jeśli nie używasz pakietu Platformy Flask 2 w obrazie platformy Docker usługi Azure Machine Learning, użyj najnowszej azureml-inference-server-http wersji pakietu lub azureml-defaults .

  • Jeśli używasz pakietu Platformy Flask 2 w obrazie platformy Docker usługi Azure Machine Learning, upewnij się, że wersja kompilacji obrazu to lipiec 2022 lub nowsza.

    Wersję obrazu można znaleźć w dziennikach kontenera. Na przykład:

    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 | 
    

    Data kompilacji obrazu jest wyświetlana Materialization Build po notacji. W poprzednim przykładzie wersja obrazu to 20220708 8 lipca 2022 r. Obraz w tym przykładzie jest zgodny z platformą Flask 2.

    Jeśli w dzienniku kontenera nie widzisz podobnego komunikatu, obraz jest nieaktualny i powinien zostać zaktualizowany. Jeśli używasz obrazu Compute Unified Device Architecture (CUDA) i nie możesz znaleźć nowszego obrazu, sprawdź, czy obraz jest przestarzały w usłudze AzureML-Containers. Wyznaczone zamienniki dla przestarzałych obrazów można znaleźć.

    Jeśli używasz serwera z punktem końcowym online, możesz również znaleźć dzienniki na stronie Dzienniki na stronie Punkty końcowe w usłudze Azure Machine Learning Studio.

Jeśli wdrażasz przy użyciu zestawu SDK w wersji 1 i nie określisz jawnie obrazu w konfiguracji wdrożenia, serwer zastosuje openmpi4.1.0-ubuntu20.04 pakiet z wersją zgodną z lokalnym zestawem narzędzi zestawu SDK. Jednak zainstalowana wersja może nie być najnowszą dostępną wersją obrazu.

W przypadku zestawu SDK w wersji 1.43 serwer domyślnie instaluje openmpi4.1.0-ubuntu20.04:20220616 wersję pakietu, ale ta wersja pakietu nie jest zgodna z zestawem SDK 1.43. Upewnij się, że używasz najnowszego zestawu SDK do wdrożenia.

Jeśli nie możesz zaktualizować obrazu, możesz tymczasowo uniknąć problemu, przypinając azureml-defaults==1.43 wpisy lub azureml-inference-server-http~=0.4.13 w pliku środowiska. Te wpisy umożliwiają serwerowi zainstalowanie starszej wersji za pomocą polecenia flask 1.0.x.

ImportError lub ModuleNotFoundError podczas uruchamiania serwera

Podczas uruchamiania serwera może wystąpić element ImportError lub ModuleNotFoundError w określonych modułach, takich jak opencensus, jinja2, markupsafelub click. Poniższy przykład przedstawia komunikat o błędzie:

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

Podczas korzystania z wersji 0.4.10 lub starszych wersji serwera, które nie przypinają zależności platformy Flask do zgodnej wersji, występują błędy importu i modułu. Aby zapobiec problemowi, zainstaluj nowszą wersję serwera.