Gépi tanulási modell üzembe helyezése Azure Functions Azure Cache for Redis
Ebben a cikkben egy modellt helyez üzembe az Azure Machine Learningből függvényalkalmazásként Azure Functions egy Azure Cache for Redis-példány használatával.
Azure Cache for Redis teljesítmény és skálázható. Azure Machine Learning-modellel párosítva alacsony késést és nagy átviteli sebességet kap az alkalmazásban. Néhány olyan forgatókönyv, ahol a gyorsítótár hasznos: az adatok következtetése és a tényleges modellkövetkeztetés eredményei. Mindkét esetben a metaadatok vagy az eredmények a memóriában vannak tárolva, ami nagyobb teljesítményt eredményez.
Megjegyzés
Bár az Azure Machine Learning és a Azure Functions is általánosan elérhető, a modell a Machine Learning service for Functions szolgáltatásból való csomagolásának lehetősége előzetes verzióban érhető el.
Előfeltételek
- Azure-előfizetés – hozzon létre egyet ingyen.
- Egy Azure Machine Learning-munkaterület. További információt a Munkaterület létrehozása című cikkben talál.
- Azure parancssori felület (CLI).
- A munkaterületen regisztrált betanított gépi tanulási modell. Ha nem rendelkezik modellel, használja a Képbesorolási oktatóanyagot: Modell betanítása a betanítása és regisztrálása gombra.
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 Learningben.
Azure Cache for Redis-példány létrehozása
A gépi tanulási modellt bármilyen alapszintű, standard vagy prémium szintű gyorsítótárpéldánysal Azure Functions üzembe helyezheti. Gyorsítótárpéldány létrehozásához kövesse az alábbi lépéseket.
Nyissa meg a Azure Portal kezdőlapot, vagy nyissa meg az oldalsáv menüjét, majd válassza az Erőforrás létrehozása lehetőséget.
Az Új lapon válassza az Adatbázisok, majd a Azure Cache for Redis lehetőséget.
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 gazdagépneveDNS 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 válasszon 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 szeretné 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. Hely 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ő menüben válasszon ki egy 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ó: Azure Cache for Redis Áttekintés. Kattintson a Hálózat fülre, vagy válassza a lap alján található Hálózatkezelés gombot.
A Hálózat lapon válassza ki a kapcsolati módszert.
Válassza a Tovább: Speciális lapot, vagy válassza a Tovább: Speciális gombot a lap alján.
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.
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.
Válassza a Tovább: Címkék lapot, vagy válassza a Tovább: Címkék gombot a lap alján.
Ha kategorizálni szeretné az erőforrást, a Címkék lapon adja meg a nevet és az értéket.
Válassza az Áttekintés + létrehozás lehetőséget. A rendszer a Felülvizsgálat + létrehozás lapra kerül, ahol az Azure ellenőrzi a konfigurációt.
Miután megjelenik a zöld Érvényesítés átadott üzenet, válassza a Létrehozás lehetőséget.
A gyorsítótár létrehozása eltarthat egy ideig. A folyamat előrehaladását az Azure Cache for Redis Áttekintés lapon figyelheti. Ha az állapotFut állapotúké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 pontszámot ad a kérésnek, é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 használhat, a szkript elfogadható formátummá alakíthatja őket. Átalakíthatja a választ is, 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én), akkor a nyers adatok elfogadásához használja az AMLRequest parancsot.
A futtatási függvényhez 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 modell futtatásához
Ezek az entitások egy következtetési konfigurációba vannak beá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 a Azure Functions használatához, környezeti objektumot kell használnia. Vegye figyelembe, hogy ha egyéni környezetet definiál, pip-függőségként hozzá kell adnia az azureml-defaults verzió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ért lásd: Modellek üzembe helyezése az Azure Machine Learningben.
Fontos
A Functionsben való üzembe helyezéskor nem kell üzembehelyezési konfigurációt létrehoznia.
Az SDK előzetes verziójának telepítése a Functions támogatásához
A Azure Functions csomagjainak 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
A Azure Functions ü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. A következő kódrészlet bemutatja, hogyan hozhat létre új csomagot EGY HTTP-eseményindítóval a modellből és a következtetési konfigurációból:
Megjegyzé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=True
a , megjelenik a Docker buildelési folyamatának kimenete. A folyamat befejezése után a rendszerkép a munkaterület Azure Container Registry lett létrehozva. A rendszerkép létrehozása után megjelenik a Azure Container Registry helye. A visszaadott hely formátuma <acrinstance>.azurecr.io/package@sha256:<imagename>
.
Megjegyzé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 lásd: Azure Functions kötések.
Fontos
Mentse a helyadatokat, mivel az a lemezkép üzembe helyezésekor használatos.
Rendszerkép üzembe helyezése webalkalmazásként
Az alábbi paranccsal kérje le a rendszerképet tartalmazó Azure Container Registry bejelentkezési hitelesítő adatait. Cserélje le a elemet
<myacr>
a korábban visszaadott értékre a következőbőlpackage.location
:az acr credential show --name <myacr>
A parancs kimenete a következő JSON-dokumentumhoz hasonló:
{ "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.
Ha még nem rendelkezik erőforráscsoporttal vagy App Service-csomaggal a szolgáltatás üzembe helyezéséhez, ezek a 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 linuxos alapszintű tarifacsomagot (
--sku B1
) használunk.Fontos
Az Azure Machine Learning által létrehozott rendszerképek Linuxot használnak, ezért a paramétert
--is-linux
kell használnia.Hozza létre a webfeladat-tárolóhoz használni kívánt tárfiókot, és kérje le a kapcsolati sztring. Cserélje le
<webjobStorage>
a elemet 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
A függvényalkalmazás létrehozásához használja a következő parancsot. Cserélje le
<app-name>
a elemet a használni kívánt névre. Cserélje le<acrinstance>
a és<imagename>
a értéket a korábban visszaadottpackage.location
értékekre. Cserélje le<webjobStorage>
a elemet 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 képet tartalmazó Azure Container Registry, 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.
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 elemet a függvényalkalmazás nevére. Cserélje le<acrinstance>
a és<imagetag>
a értéket az előző lépésben az AZ CLI-hívás értékeire. Cserélje le<username>
a és<password>
a értéket a korábban lekért ACR bejelentkezési adatokra: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ó információkat 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 megkezdi a kép betöltését.
Fontos
A kép betöltése eltarthat néhány percig. A folyamat előrehaladását a Azure Portal követheti nyomon.
Azure Functions HTTP-eseményindító tesztelése
Most futtatjuk és teszteljük a Azure Functions HTTP-eseményindítót.
- Nyissa meg a függvényalkalmazást a Azure Portal.
- A fejlesztő területen válassza a Kód + teszt lehetőséget.
- A jobb oldalon válassza a Bemenet lapot.
- Válassza a Futtatás gombot a Azure Functions HTTP-eseményindító teszteléséhez.
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. A Azure Cache for Redis 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 végzett a rövid útmutatóval, 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áscsoportban 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
Jelentkezzen be az Azure Portalra, és válassza az Erőforráscsoportok elemet.
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
- További információ a Azure Cache for Redis
- A függvényalkalmazás konfigurálását a Functions dokumentációjában találja.
- API-referencia
- Azure Cache for Redis használó Python-alkalmazás létrehozása