Sdílet prostřednictvím


Řešení potíží s místním nasazením modelu

Vyzkoušejte nasazení místního modelu jako první krok při řešení potíží s nasazením do služby Azure Container Instances (ACI) nebo Azure Kubernetes Service (AKS). Použití místní webové služby usnadňuje zjištění a opravu běžných chyb nasazení webové služby Azure Machine Learning Docker.

Požadavky

  • Předplatné Azure Vyzkoušejte bezplatnou nebo placenou verzi služby Azure Machine Learning.
  • Možnost A (doporučeno) – Místní ladění ve výpočetní instanci služby Azure Machine Learning
  • Možnost B – Místní ladění na výpočetních prostředcích
  • Možnost C – Povolení místního ladění pomocí serveru HTTP odvozování služby Azure Machine Learning
    • Server HTTP pro odvozování služby Azure Machine Learning je balíček Pythonu, který umožňuje snadno ověřit vstupní skript (score.py) v místním vývojovém prostředí. Pokud dojde k potížím s bodovacím skriptem, server vrátí chybu. Vrátí také umístění, kde k chybě došlo.
    • Server lze použít také při vytváření ověřovacích bran v kanálu kontinuální integrace a nasazení. Spusťte například server s kandidátským skriptem a spusťte testovací sadu pro místní koncový bod.

Odvození serveru HTTP ve službě Azure Machine Learning

Místní server odvozování umožňuje rychle ladit vstupní skript (score.py). Pokud má podkladový skript skóre chybu, server se nepodaří inicializovat nebo obsloužit model. Místo toho vyvolá výjimku a místo, kde došlo k problémům. Další informace o odvozovacím serveru HTTP služby Azure Machine Learning

  1. azureml-inference-server-http Nainstalujte balíček z informačního kanálu pypi:

    python -m pip install azureml-inference-server-http
    
  2. Spusťte server a nastavte score.py ho jako vstupní skript:

    azmlinfsrv --entry_script score.py
    
  3. Odeslání žádosti o bodování na server pomocí curl:

    curl -p 127.0.0.1:5001/score
    

Poznámka:

Přečtěte si nejčastější dotazy k serveru HTTP odvozovací služby Azure Machine Learning.

Místní ladění

Ukázkový místní poznámkový blok nasazení najdete v úložišti MachineLearningNotebooks a prozkoumat spustitelný příklad.

Upozorňující

Nasazení místních webových služeb nejsou podporována v produkčních scénářích.

Pokud chcete nasadit místně, upravte kód tak, aby se použil LocalWebservice.deploy_configuration() k vytvoření konfigurace nasazení. Pak službu nasadíte Model.deploy() . Následující příklad nasadí model (obsažený v proměnné modelu) jako místní webovou službu:

PLATÍ PRO: Python SDK azureml v1

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)

Pokud definujete vlastní specifikaci conda YAML, uveďte jako závislost pip verzi >azureml-defaults = 1.0.45. Tento balíček je potřeba k hostování modelu jako webové služby.

V tomto okamžiku můžete se službou pracovat jako obvykle. Následující kód ukazuje odesílání dat do služby:

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)

Další informace o přizpůsobení prostředí Pythonu najdete v tématu Vytváření a správa prostředí pro trénování a nasazení.

Aktualizace služby

Během místního testování možná budete muset soubor aktualizovat score.py , abyste přidali protokolování nebo se pokusili vyřešit všechny zjištěné problémy. Chcete-li znovu načíst změny score.py souboru, použijte reload(). Například následující kód znovu načte skript pro službu a pak do ní odešle data. Data se ohodnotují pomocí aktualizovaného score.py souboru:

Důležité

Tato reload metoda je k dispozici pouze pro místní nasazení. Informace o aktualizaci nasazení na jiný cílový výpočetní objekt najdete v tématu aktualizace webové služby.

service.reload()
print(service.run(input_data=test_sample))

Poznámka:

Skript se znovu načte z umístění určeného InferenceConfig objektem používaným službou.

Pokud chcete změnit model, závislosti Conda nebo konfiguraci nasazení, použijte update(). Následující příklad aktualizuje model používaný službou:

service.update([different_model], inference_config, deployment_config)

Odstranění služby

Pokud chcete službu odstranit, použijte delete().

Kontrola protokolu Dockeru

Podrobné zprávy protokolu modulu Dockeru můžete vytisknout z objektu služby. Protokol můžete zobrazit pro nasazení ACI, AKS a Local. Následující příklad ukazuje, jak vytisknout protokoly.

# 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())

Pokud se v protokolech zobrazí řádek Booting worker with pid: <pid> , který se v protokolech vyskytuje vícekrát, znamená to, že není dostatek paměti ke spuštění pracovního procesu. Chybu můžete vyřešit zvýšením hodnoty memory_gb in deployment_config

Další kroky

Další informace o nasazení: