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:
- Wypróbuj fikcyjny skrypt oceniania.
- Debugowanie przy użyciu pakietu azureml-inference-server-http za pomocą programu Visual Studio Code.
- Uruchom rzeczywisty skrypt oceniania, plik modelu i plik środowiska z naszego repozytorium przykładów.
Testowanie zachowania serwera za pomocą fikcyjnego skryptu oceniania
Utwórz katalog o nazwie server_quickstart do przechowywania plików:
mkdir server_quickstart cd server_quickstart
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.azureml-inference-server-http
Zainstaluj pakiet ze źródła danych pypi:python -m pip install azureml-inference-server-http
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
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.
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!"}
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:
Uruchom program VS Code i otwórz folder zawierający skrypt (score.py).
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" ] } ] }
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ącsudo apt-get install -y gdb
polecenie .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 } ] }
W oknie polecenia uruchom serwer HTTP wnioskowania przy użyciu
azmlinfsrv --entry_script score.py
polecenia .Uruchom sesję debugowania w programie VS Code:
Wybierz pozycję Uruchom debugowanie> lub użyj skrótu klawiaturowego F5.
W oknie polecenia wyświetl dzienniki z serwera wnioskowania i znajdź identyfikator
azmlinfsrv
procesu polecenia (a niegunicorn
):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.
Sklonuj przykładowe repozytorium:
git clone --depth 1 https://github.com/Azure/azureml-examples cd azureml-examples/cli/endpoints/online/model-1/
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 bibliotekaazureml-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
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()
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 zmiennejAZUREML_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.
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:
Otoka interfejsu wiersza polecenia języka Python znajduje się wokół stosu sieciowego serwera i służy do uruchamiania serwera.
Klient wysyła żądanie do serwera.
Serwer wysyła żądanie za pośrednictwem serwera Internet Server Gateway Interface (WSGI), który wysyła żądanie do aplikacji procesu roboczego platformy Flask:
Aplikacja procesów roboczych platformy Flask obsługuje żądanie, które obejmuje ładowanie skryptu wpisu i wszelkich zależności.
Skrypt wejścia odbiera żądanie. Skrypt wejścia wykonuje wywołanie wnioskowania do załadowanego modelu i zwraca odpowiedź:
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 jakE
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.
Zbierz informacje o zainstalowanych pakietach i wersjach dla środowiska języka Python.
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.Jeśli określisz platformę Flask lub jej zależności w danym środowisku, usuń te elementy.
- Pakiety zależne obejmują
flask
, ,jinja2
,werkzeug
itsdangerous
,markupsafe
, iclick
. flask
element jest wyświetlany jako zależność w pakiecie serwera. Najlepszym rozwiązaniem jest umożliwienie serwerowi wnioskowania zainstalowanieflask
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.
- Pakiety zależne obejmują
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 lubazureml-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 to20220708
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
, markupsafe
lub 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.