Megosztás a következőn keresztül:


Gépi tanulási modell üzembe helyezése az Azure Functionsben az Azure Cache for Redis használatával

Ebben a cikkben egy Azure Machine Learning-modellt helyez üzembe függvényalkalmazásként az Azure Functionsben egy Azure Cache for Redis-példány használatával.

Az Azure Cache for Redis teljesítménye és méretezhető. Azure Machine Learning-modellel párosítva alacsony késést és magas átviteli sebességet érhet el az alkalmazásban. Néhány olyan forgatókönyv, ahol a gyorsítótár hasznos: az adatok következtetése és a modell tényleges következtetési eredményei. Mindkét esetben a metaadatok vagy az eredmények memóriában vannak tárolva, ami nagyobb teljesítményt eredményez.

Feljegyzés

Bár az Azure Machine Learning és az Azure Functions is általánosan elérhető, a Modell becsomagolása a Machine Learning service for Functions szolgáltatásból előzetes verzióban érhető el.

Előfeltételek

Fontos

A cikkben szereplő kódrészletek feltételezik, hogy a következő változókat állította be:

  • ws - Az Azure Machine Learning-munkaterület.
  • model - Az üzembe helyezendő regisztrált modell.
  • inference_config - A modell következtetési konfigurációja.

A változók beállításával kapcsolatos további információkért lásd : Modellek üzembe helyezése az Azure Machine Learning használatával.

Azure Cache for Redis-példány létrehozása

Gépi tanulási modellt bármilyen alapszintű, standard vagy prémium szintű gyorsítótár-példánysal üzembe helyezhet az Azure Functionsben. Gyorsítótárpéldány létrehozásához kövesse az alábbi lépéseket.

  1. Nyissa meg az Azure Portal kezdőlapját, vagy nyissa meg az oldalsáv menüjét, majd válassza az Erőforrás létrehozása lehetőséget.

  2. Az Új lapon válassza az Adatbázisok, majd az Azure Cache for Redis lehetőséget.

    Válassza az Azure Cache for Redis lehetőséget.

  3. Az Új Redis Cache lapon konfigurálja az új gyorsítótár beállításait.

    Beállítás Ajánlott érték Leírás
    DNS-név Adjon meg egy globálisan egyedi nevet. A gyorsítótár nevének 1 és 63 karakter közötti sztringnek kell lennie. A sztring csak számokat, betűket vagy kötőjeleket tartalmazhat. A névnek számmal vagy betűvel kell kezdődnie és végződnie, és nem tartalmazhat egymást követő kötőjeleket. A gyorsítótárpéldány állomásneve DNS name.redis.cache.windows.net> lesz<.
    Előfizetés Legördülő menüben válassza ki az előfizetését. Az előfizetés, amely alatt létre kell hozni ezt az új Azure Cache for Redis-példányt.
    Erőforráscsoport Legördülő menüben jelöljön ki egy erőforráscsoportot, vagy válassza az Új létrehozása lehetőséget, és adjon meg egy új erőforráscsoportnevet. Annak az erőforráscsoportnak a neve, amelyben létre kívánja hozni a gyorsítótárat és más erőforrásokat. Ha az összes alkalmazás-erőforrást egy erőforráscsoportba helyezi, egyszerűen kezelheti vagy törölheti őket.
    Helyen Legördülő menüben válasszon ki egy helyet. Válasszon ki egy régiót más szolgáltatások közelében, amelyek a gyorsítótárat fogják használni.
    Tarifacsomag Legördülő listából válassza ki a tarifacsomagot. A tarifacsomag határozza meg a gyorsítótár méretét, teljesítményét és elérhető funkcióit. További információt az Azure Cache for Redis áttekintésében talál.
  4. Válassza a Hálózat lapfület , vagy válassza a Lap alján található Hálózatkezelés gombot.

  5. A Hálózatkezelés lapon válassza ki a kapcsolati módszert.

  6. Válassza a Tovább: Speciális lapot, vagy válassza a Tovább: Speciális gombot a lap alján.

  7. Ha nem TLS-portot szeretne engedélyezni, az alapszintű vagy standard gyorsítótárpéldány Speciális lapján válassza az engedélyezés kapcsolót.

  8. A prémium szintű gyorsítótárpéldány Speciális lapján konfigurálja a nem TLS-port, a fürtözés és az adatmegőrzés beállításait.

  9. Válassza a Tovább: Címkék lapot, vagy válassza a Következő: Címkék gombot a lap alján.

  10. Ha kategorizálni szeretné az erőforrást, a Címkék lapon adja meg a nevet és az értéket.

  11. Válassza az Áttekintés + létrehozás lehetőséget. Ekkor megjelenik a Véleményezés + létrehozás lap, ahol az Azure ellenőrzi a konfigurációt.

  12. A zöld érvényesítési üzenet megjelenése után válassza a Létrehozás lehetőséget.

A gyorsítótár létrehozása eltarthat egy ideig. Az előrehaladást az Azure Cache for Redis áttekintési oldalán követheti nyomon. Ha az állapot futásként jelenik meg, a gyorsítótár készen áll a használatra.

Felkészülés az üzembe helyezésre

Az üzembe helyezés előtt meg kell határoznia, hogy mi szükséges a modell webszolgáltatásként való futtatásához. Az alábbi lista az üzembe helyezéshez szükséges alapvető elemeket ismerteti:

  • Egy bejegyzésszkript. Ez a szkript fogadja a kéréseket, a modell használatával pontozza a kérést, és visszaadja az eredményeket.

    Fontos

    A belépési szkript a modellre vonatkozik; tisztában kell lennie a bejövő kérelemadatok formátumával, a modell által várt adatok formátumával és az ügyfeleknek visszaadott adatok formátumával.

    Ha a kérelemadatok olyan formátumban találhatóak, amelyet a modell nem tud használni, a szkript elfogadható formátummá alakíthatja őket. Átalakíthatja a választ, mielőtt visszaküldené az ügyfélnek.

    Alapértelmezés szerint a függvények csomagolásakor a bemenet szövegként lesz kezelve. Ha a bemenet nyers bájtjait szeretné felhasználni (például Blob-eseményindítók esetében), a nyers adatok elfogadásához használja az AMLRequest függvényt.

A futtatási függvény esetében győződjön meg arról, hogy egy Redis-végponthoz csatlakozik.

import json
import numpy as np
import os
import redis
from sklearn.externals import joblib

def init():
    global model
    global azrediscache
    azrediscache = redis.StrictRedis(host='<host_url>', port=6380, password="<access_key>", ssl=True)
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    model = joblib.load(model_path)

@input_schema('data', NumpyParameterType(input_sample))
@output_schema(NumpyParameterType(output_sample))
def run(data):
    try:
        input = azrediscache.get(data)
        result = model.predict(input)
        data = np.array(json.loads(data))
        result = model.predict(data)
        # You can return any data type, as long as it is JSON serializable.
        return result.tolist()
    except Exception as e:
        error = str(e)
        return error

A belépési szkripttel kapcsolatos további információkért lásd : Pontozási kód definiálása.

  • Függőségek, például segédszkriptek vagy Python-/Conda-csomagok a belépési szkript vagy a modell futtatásához

Ezek az entitások következtetési konfigurációba vannak ágyazva. A következtetési konfiguráció a bejegyzés parancsfájljára és további függőségekre hivatkozik.

Fontos

Ha következtetéskonfigurációt hoz létre az Azure Functions használatával való használatra, környezeti objektumot kell használnia. Vegye figyelembe, hogy ha egyéni környezetet határoz meg, pipfüggőségként hozzá kell adnia az azureml alapértelmezett verzióját az = 1.0.45 verzióval >. Ez a csomag tartalmazza a modell webszolgáltatásként való üzemeltetéséhez szükséges funkciókat. Az alábbi példa egy környezeti objektum létrehozását és következtetési konfigurációval való használatát mutatja be:

from azureml.core.environment import Environment
from azureml.core.conda_dependencies import CondaDependencies

# Create an environment and add conda dependencies to it
myenv = Environment(name="myenv")
# Enable Docker based environment
myenv.docker.enabled = True
# Build conda dependencies
myenv.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'],
                                                           pip_packages=['azureml-defaults', 'redis'])
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)

A környezetekkel kapcsolatos további információkért lásd : Környezetek létrehozása és kezelése betanításhoz és üzembe helyezéshez.

A következtetés konfigurálásának további információi: Modellek üzembe helyezése az Azure Machine Learning használatával.

Fontos

A Functionsben való üzembe helyezéskor nem kell üzembehelyezési konfigurációt létrehoznia.

Az SDK előzetes verziós csomagjának telepítése a Functions-támogatáshoz

Az Azure Functions-csomagok létrehozásához telepítenie kell az SDK előzetes verzióját.

pip install azureml-contrib-functions

A rendszerkép létrehozása

Az Azure Functionsben üzembe helyezett Docker-rendszerkép létrehozásához használja az azureml.contrib.functions.package vagy a használni kívánt eseményindító adott csomagfüggvényét. Az alábbi kódrészlet bemutatja, hogyan hozhat létre új csomagot HTTP-eseményindítóval a modellből és a következtetési konfigurációból:

Feljegyzés

A kódrészlet feltételezi, hogy model egy regisztrált modellt tartalmaz, és tartalmazza inference_config a következtetési környezet konfigurációját. További információ: Modellek üzembe helyezése az Azure Machine Learning használatával.

from azureml.contrib.functions import package
from azureml.contrib.functions import HTTP_TRIGGER
model_package = package(ws, [model], inference_config, functions_enabled=True, trigger=HTTP_TRIGGER)
model_package.wait_for_creation(show_output=True)
# Display the package location/ACR path
print(model_package.location)

Amikor show_output=Truemegjelenik a Docker buildelési folyamatának kimenete. Miután a folyamat befejeződött, a rendszerkép létre lett hozva a munkaterület Azure Container Registryjében. A rendszerkép létrehozása után megjelenik az Azure Container Registry helye. A visszaadott hely formátuma <acrinstance>.azurecr.io/package@sha256:<imagename>.

Feljegyzés

A Functions csomagolása jelenleg támogatja a HTTP-eseményindítókat, a Blob-eseményindítókat és a Service Bus-eseményindítókat. Az eseményindítókkal kapcsolatos további információkért tekintse meg az Azure Functions kötéseit.

Fontos

Mentse a helyadatokat a rendszerkép üzembe helyezésekor használt módon.

Rendszerkép üzembe helyezése webalkalmazásként

  1. Az alábbi paranccsal szerezze be a rendszerképet tartalmazó Azure Container Registry bejelentkezési hitelesítő adatait. Cserélje le <myacr> a korábban a következőből package.locationvisszaadott értékre:

    az acr credential show --name <myacr>
    

    A parancs kimenete hasonló a következő JSON-dokumentumhoz:

    {
    "passwords": [
        {
        "name": "password",
        "value": "abcdefghijklmmopqrstuv1234567890"
        },
        {
        "name": "password2",
        "value": "1234567890abcdefghijklmmopqrstuv"
        }
    ],
    "username": "charlie.roy"
    }
    

    Mentse a felhasználónév és az egyik jelszó értékét.

  2. Ha még nem rendelkezik erőforráscsoporttal vagy App Service-csomaggal a szolgáltatás üzembe helyezéséhez, az alábbi parancsok bemutatják, hogyan hozhat létre mindkettőt:

    az group create --name myresourcegroup --location "West Europe"
    az appservice plan create --name myplanname --resource-group myresourcegroup --sku B1 --is-linux
    

    Ebben a példában egy Linux alapszintű tarifacsomagot (--sku B1) használunk.

    Fontos

    Az Azure Machine Learning által létrehozott képek Linuxot használnak, ezért a paramétert --is-linux kell használnia.

  3. Hozza létre a webfeladat-tárolóhoz használni kívánt tárfiókot, és szerezze be a kapcsolati sztring. Cserélje le <webjobStorage> a használni kívánt névre.

    az storage account create --name <webjobStorage> --location westeurope --resource-group myresourcegroup --sku Standard_LRS
    
    az storage account show-connection-string --resource-group myresourcegroup --name <webJobStorage> --query connectionString --output tsv
    
  4. A függvényalkalmazás létrehozásához használja az alábbi parancsot. Cserélje le <app-name> a használni kívánt névre. Cserélje le és <imagename> cserélje le <acrinstance> a korábban visszaadott package.location értékeket. Cserélje le <webjobStorage> az előző lépésben szereplő tárfiók nevére:

    az functionapp create --resource-group myresourcegroup --plan myplanname --name <app-name> --deployment-container-image-name <acrinstance>.azurecr.io/package:<imagename> --storage-account <webjobStorage>
    

    Fontos

    Ekkor létrejött a függvényalkalmazás. Mivel azonban nem adta meg a HTTP-eseményindító kapcsolati sztring vagy hitelesítő adatait a rendszerképet tartalmazó Azure Container Registrynek, a függvényalkalmazás nem aktív. A következő lépésekben meg kell adnia a tárolóregisztrációs adatbázis kapcsolati sztring és hitelesítési adatait.

  5. Ha meg szeretné adni a függvényalkalmazásnak a tárolóregisztrációs adatbázis eléréséhez szükséges hitelesítő adatokat, használja az alábbi parancsot. Cserélje le <app-name> a függvényalkalmazás nevére. Cserélje le és <imagetag> cserélje le <acrinstance> az előző lépésben az AZ CLI-hívás értékeit. Cserélje le és <password> cserélje le <username> a korábban lekért ACR bejelentkezési adatokat:

    az functionapp config container set --name <app-name> --resource-group myresourcegroup --docker-custom-image-name <acrinstance>.azurecr.io/package:<imagetag> --docker-registry-server-url https://<acrinstance>.azurecr.io --docker-registry-server-user <username> --docker-registry-server-password <password>
    

    Ez a parancs a következő JSON-dokumentumhoz hasonló adatokat ad vissza:

    [
    {
        "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
        "slotSetting": false,
        "value": "false"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_URL",
        "slotSetting": false,
        "value": "[server-name].azurecr.io"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_USERNAME",
        "slotSetting": false,
        "value": "[username]"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
        "slotSetting": false,
        "value": null
    },
    {
        "name": "DOCKER_CUSTOM_IMAGE_NAME",
        "value": "DOCKER|[server-name].azurecr.io/package:20190827195524"
    }
    ]
    

Ekkor a függvényalkalmazás elkezdi betölteni a képet.

Fontos

A kép betöltése több percig is eltarthat. A folyamat előrehaladását az Azure Portalon követheti nyomon.

Az Azure Functions HTTP-eseményindító tesztelése

Most futtatjuk és teszteljük az Azure Functions HTTP-eseményindítóját.

  1. Nyissa meg a függvényalkalmazást az Azure Portalon.
  2. A fejlesztő területen válassza a Code + Test lehetőséget.
  3. A jobb oldalon válassza a Bevitel lapot.
  4. A Futtatás gombra kattintva tesztelheti az Azure Functions HTTP-eseményindítóját.

Sikeresen üzembe helyezett egy modellt az Azure Machine Learningből függvényalkalmazásként egy Azure Cache for Redis-példány használatával. Az Azure Cache for Redisről az alábbi szakaszban található hivatkozásokra kattintva tudhat meg többet.

Az erőforrások eltávolítása

Ha azt tervezi, hogy a következő oktatóanyaggal folytatja, megtarthatja és újból felhasználhatja az ebben a rövid útmutatóban létrehozott erőforrásokat.

Ellenkező esetben, ha befejezte a rövid útmutatót, törölheti az ebben a rövid útmutatóban létrehozott Azure-erőforrásokat a díjak elkerülése érdekében.

Fontos

Az erőforráscsoport törlése nem vonható vissza. Az erőforráscsoport törlésekor a benne foglalt összes erőforrás véglegesen törlődik. Figyeljen arra, hogy ne töröljön véletlenül erőforráscsoportot vagy erőforrásokat. Ha a minta üzemeltetéséhez létrehozott erőforrásokat egy meglévő erőforráscsoporton belül hozta létre, amely a megtartani kívánt erőforrásokat tartalmazza, az erőforráscsoport törlése helyett egyenként törölheti az egyes erőforrásokat a bal oldalon.

Erőforráscsoport törlése

  1. Jelentkezzen be az Azure Portalra, és válassza az Erőforráscsoportok elemet.

  2. A Szűrés név alapján mezőbe írja be az erőforráscsoport nevét. Az erőforráscsoport eredménylistájában válassza a ..., majd az Erőforráscsoport törlése lehetőséget.

A rendszer az erőforráscsoport törlésének megerősítését kéri. A megerősítéshez írja be az erőforráscsoport nevét, és válassza a Törlést.

A rendszer néhány pillanaton belül törli az erőforráscsoportot és annak erőforrásait.

Következő lépések