Rozwiązywanie problemów z wdrożeniem modelu lokalnego
Wypróbuj wdrożenie modelu lokalnego jako pierwszy krok w rozwiązywaniu problemów z wdrażaniem w usłudze Azure Container Instances (ACI) lub usłudze Azure Kubernetes Service (AKS). Użycie lokalnej usługi internetowej ułatwia odnajdowanie i naprawianie typowych błędów wdrażania usługi internetowej platformy Docker w usłudze Azure Machine Learning.
Wymagania wstępne
- Subskrypcja platformy Azure. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning.
- Opcja A (zalecana) — debugowanie lokalnie w wystąpieniu obliczeniowym usługi Azure Machine Learning
- Obszar roboczy usługi Azure Machine Learning z uruchomionym wystąpieniem obliczeniowym
- Opcja B — lokalne debugowanie zasobów obliczeniowych
- Zestaw SDK usługi Azure Machine Learning.
- Interfejs wiersza polecenia platformy Azure.
- Rozszerzenie interfejsu wiersza polecenia dla usługi Azure Machine Learning.
- Mieć działającą instalację platformy Docker w systemie lokalnym.
- Aby zweryfikować instalację platformy Docker, użyj polecenia
docker run hello-world
z poziomu terminalu lub wiersza polecenia. Aby uzyskać informacje na temat instalowania platformy Docker lub rozwiązywania problemów z błędami platformy Docker, zobacz dokumentację platformy Docker.
- Opcja C — włączanie lokalnego debugowania 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 umożliwia łatwe weryfikowanie skryptu wejścia (
score.py
) w lokalnym środowisku deweloperskim. Jeśli wystąpi problem ze skryptem oceniania, serwer zwróci błąd. Określi również lokalizację, w której ten błąd wystąpił. - Serwer może być również używany podczas tworzenia bram weryfikacji w potoku ciągłej integracji i wdrażania. Na przykład uruchom serwer za pomocą skryptu kandydata i uruchom zestaw testów względem lokalnego punktu końcowego.
- Serwer HTTP wnioskowania usługi Azure Machine Learning to pakiet języka Python, który umożliwia łatwe weryfikowanie skryptu wejścia (
Serwer HTTP wnioskowania usługi Azure Machine Learning
Lokalny serwer wnioskowania umożliwia szybkie debugowanie skryptu wejścia (score.py
). W przypadku, gdy skrypt oceny bazowej zawiera usterkę, serwer nie może zainicjować lub obsłużyć model. Zamiast tego zgłosi wyjątek i lokalizację, w której wystąpiły problemy. Dowiedz się więcej o serwerze HTTP wnioskowania usługi Azure Machine Learning
azureml-inference-server-http
Zainstaluj pakiet ze źródła danych pypi:python -m pip install azureml-inference-server-http
Uruchom serwer i ustaw go
score.py
jako skrypt wpisu:azmlinfsrv --entry_script score.py
Wyślij żądanie oceniania do serwera przy użyciu polecenia
curl
:curl -p 127.0.0.1:5001/score
Uwaga
Zapoznaj się z często zadawanymi pytaniami dotyczącymi serwera HTTP wnioskowania usługi Azure Machine Learning.
Lokalne debugowanie
Przykładowy lokalny notes wdrażania można znaleźć w repozytorium MachineLearningNotebooks , aby zapoznać się z przykładem z możliwością uruchomienia.
Ostrzeżenie
Lokalne wdrożenia usługi sieci Web nie są obsługiwane w scenariuszach produkcyjnych.
Aby wdrożyć lokalnie, zmodyfikuj kod, aby użyć LocalWebservice.deploy_configuration()
go do utworzenia konfiguracji wdrożenia. Następnie użyj polecenia Model.deploy()
, aby wdrożyć usługę. Poniższy przykład wdraża model (zawarty w zmiennej modelu) jako lokalną usługę internetową:
DOTYCZY: Zestaw SDK języka Python w wersji 1
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)
Jeśli definiujesz własną specyfikację conda YAML, wyświetl listę azureml-defaults version >= 1.0.45 jako zależność. Ten pakiet jest wymagany do hostowania modelu jako usługi internetowej.
W tym momencie możesz pracować z usługą w zwykły sposób. Poniższy kod demonstruje wysyłanie danych do usługi:
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)
Aby uzyskać więcej informacji na temat dostosowywania środowiska języka Python, zobacz Tworzenie środowisk i zarządzanie nimi na potrzeby trenowania i wdrażania.
Aktualizowanie usługi
Podczas testowania lokalnego score.py
może być konieczne zaktualizowanie pliku w celu dodania rejestrowania lub podjęcia próby rozwiązania wykrytych problemów. Aby ponownie załadować zmiany do score.py
pliku, użyj polecenia reload()
. Na przykład poniższy kod ponownie ładuje skrypt dla usługi, a następnie wysyła do niego dane. Dane są oceniane przy użyciu zaktualizowanego score.py
pliku:
Ważne
Metoda reload
jest dostępna tylko dla wdrożeń lokalnych. Aby uzyskać informacje na temat aktualizowania wdrożenia do innego docelowego obiektu obliczeniowego, zobacz jak zaktualizować usługę internetową.
service.reload()
print(service.run(input_data=test_sample))
Uwaga
Skrypt jest ponownie ładowany z lokalizacji określonej przez InferenceConfig
obiekt używany przez usługę.
Aby zmienić model, zależności Conda lub konfigurację wdrożenia, użyj metody update(). Poniższy przykład aktualizuje model używany przez usługę:
service.update([different_model], inference_config, deployment_config)
Usuwanie usługi
Aby usunąć usługę, użyj metody delete().
Sprawdzanie dziennika platformy Docker
Szczegółowe komunikaty dziennika aparatu platformy Docker można wydrukować z obiektu usługi. Dziennik dla wdrożeń ACI, AKS i lokalnych można wyświetlić. W poniższym przykładzie pokazano, jak wydrukować dzienniki.
# 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())
Jeśli wiersz Booting worker with pid: <pid>
występuje wiele razy w dziennikach, oznacza to, że nie ma wystarczającej ilości pamięci, aby uruchomić proces roboczy.
Możesz rozwiązać ten problem, zwiększając wartość memory_gb
elementu in deployment_config
Następne kroki
Dowiedz się więcej o wdrażaniu: