Udostępnij za pośrednictwem


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
  • 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

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

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

    python -m pip install azureml-inference-server-http
    
  2. Uruchom serwer i ustaw go score.py jako skrypt wpisu:

    azmlinfsrv --entry_script score.py
    
  3. 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: