Share via


Hibaelhárítás helyi modell üzembe helyezésével

Első lépésként próbálja ki a helyi modell üzembe helyezését az Azure Container Instances (ACI) vagy az Azure Kubernetes Service (AKS) üzembe helyezésének hibaelhárításában. A helyi webszolgáltatás használata megkönnyíti az Azure Machine Tanulás Docker webszolgáltatás üzembe helyezési hibáinak észlelése és kijavítása.

Előfeltételek

  • Egy Azure-előfizetés. Próbálja ki az Azure Machine Tanulás ingyenes vagy fizetős verzióját.
  • A lehetőség (ajánlott) – Hibakeresés helyileg az Azure Machine Tanulás Számítási példányon
  • B lehetőség – Helyi hibakeresés a számításban
    • Az Azure Machine Tanulás SDK.
    • The Azure CLI.
    • Az Azure Machine Tanulás CLI-bővítménye.
    • Működő Docker-telepítéssel rendelkezik a helyi rendszeren.
    • A Docker telepítésének ellenőrzéséhez használja a terminál vagy parancssor parancsát docker run hello-world . A Docker telepítésével vagy a Docker hibáinak elhárításával kapcsolatos információkért tekintse meg a Docker dokumentációját.
  • C lehetőség – Helyi hibakeresés engedélyezése az Azure Machine Tanulás következtetési HTTP-kiszolgálóval.
    • Az Azure Machine Tanulás következtetési HTTP-kiszolgáló egy Python-csomag, amely lehetővé teszi a belépési szkript (score.py) egyszerű érvényesítését egy helyi fejlesztési környezetben. Ha probléma van a pontozási szkripttel, a kiszolgáló hibát ad vissza. Ezenkívül a hiba helyét is visszaadja.
    • A kiszolgáló használható érvényesítési kapuk folyamatos integrációs és üzembehelyezési folyamatokban való létrehozásakor is. Indítsa el például a kiszolgálót a jelölt szkripttel, és futtassa a tesztcsomagot a helyi végponton.

Azure Machine Tanulás következtetési HTTP-kiszolgáló

A helyi következtetési kiszolgáló lehetővé teszi a bejegyzésszkript (score.py) gyors hibakeresését. Ha a mögöttes pontszámszkript hibát észlelt, a kiszolgáló nem fogja inicializálni vagy kiszolgálni a modellt. Ehelyett kivételt fog kivenni a probléma helyétől. További információ az Azure Machine Tanulás következtetési HTTP-kiszolgálóról

  1. Telepítse a csomagot a azureml-inference-server-httppypi-hírcsatornából :

    python -m pip install azureml-inference-server-http
    
  2. Indítsa el a kiszolgálót, és állítsa be score.py belépési szkriptként:

    azmlinfsrv --entry_script score.py
    
  3. Pontozási kérés küldése a kiszolgálónak a következő használatával curl:

    curl -p 127.0.0.1:5001/score
    

Helyi hibakeresés

A Gép Tanulás Notebooks adattárban talál egy minta helyi üzembe helyezési jegyzetfüzetet egy futtatható példa megismeréséhez.

Figyelmeztetés

A helyi webszolgáltatás-telepítések éles környezetben nem támogatottak.

A helyi üzembe helyezéshez módosítsa a kódot LocalWebservice.deploy_configuration() egy üzembehelyezési konfiguráció létrehozásához. Ezután használja Model.deploy() a szolgáltatás üzembe helyezéséhez. Az alábbi példa egy modellt helyez üzembe (a modellváltozóban található) helyi webszolgáltatásként:

ÉRVÉNYES: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)

Ha saját conda specifikációjú YAML-t határoz meg, az azureml-defaults verzió = 1.0.45-ös verziót >sorolja fel pipfüggőségként. Ez a csomag szükséges a modell webszolgáltatásként való üzemeltetéséhez.

Ezen a ponton a szolgáltatással a szokásos módon dolgozhat. Az alábbi kód bemutatja az adatok szolgáltatásba való küldését:

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)

További információ a Python-környezet testreszabásáról: Környezetek létrehozása és kezelése betanításhoz és üzembe helyezéshez.

A szolgáltatás frissítése

A helyi tesztelés során előfordulhat, hogy frissítenie kell a fájlt a score.py naplózás hozzáadásához, vagy meg kell kísérelnie a felderített problémák megoldását. A fájl módosításainak újratöltéséhez használja a score.py következőt reload(): . Az alábbi kód például újra betölti a szolgáltatás szkriptét, majd adatokat küld neki. Az adatok pontozása a frissített score.py fájl használatával történik:

Fontos

Ez reload a módszer csak helyi üzemelő példányokhoz érhető el. Az üzembe helyezés másik számítási célra való frissítésével kapcsolatos információkért tekintse meg a webszolgáltatás frissítését.

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

Megjegyzés:

A szkript a szolgáltatás által használt objektum által InferenceConfig megadott helyről töltődik be újra.

A modell, a Conda-függőségek vagy az üzembehelyezési konfiguráció módosításához használja a frissítés()t. Az alábbi példa frissíti a szolgáltatás által használt modellt:

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

A szolgáltatás törlése

A szolgáltatás törléséhez használja a delete() parancsot.

A Docker-napló vizsgálata

Részletes Docker-motornapló-üzeneteket nyomtathat ki a szolgáltatásobjektumból. Megtekintheti az ACI, az AKS és a helyi üzemelő példányok naplóit. Az alábbi példa bemutatja, hogyan nyomtathatja ki a naplókat.

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

Ha többször is megjelenik a sor Booting worker with pid: <pid> a naplókban, az azt jelenti, hogy nincs elegendő memória a feldolgozó elindításához. A hiba elhárításához növelje a hiba értékét memory_gbdeployment_config

További lépések

További információk az üzembe helyezésről: