Regisztrált R-modell üzembe helyezése online (valós idejű) végponton
A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)
Ebben a cikkben megtudhatja, hogyan helyezhet üzembe R-modellt egy felügyelt végponton (Web API), hogy az alkalmazás közel valós időben értékelhesse az új adatokat a modellhez.
Előfeltételek
- Egy Azure Machine Learning-munkaterület.
- Telepítve van az Azure CLI és az ml-bővítmény. Vagy használjon számítási példányt a munkaterületen, amelyen előre telepítve van a parancssori felület.
- Legalább egy, a munkaterülethez társított egyéni környezet. Hozzon létre R-környezetet vagy bármely más egyéni környezetet, ha nem rendelkezik ilyen környezettel.
- Az R-csomag
plumber
ismertetése - A munkaterületre betanított és becsomagolt
crate
és regisztrált modell
Mappa létrehozása ezzel a struktúrával
Hozza létre ezt a mappastruktúrát a projekthez:
📂 r-deploy-azureml
├─📂 docker-context
│ ├─ Dockerfile
│ └─ start_plumber.R
├─📂 src
│ └─ plumber.R
├─ deployment.yml
├─ endpoint.yml
Az egyes fájlok tartalma ebben a cikkben látható és ismertetve jelenik meg.
Dockerfile
Ez a fájl határozza meg a tárolókörnyezetet. Itt további R-csomagok telepítését is meghatározhatja.
A dockerfile-minta a következőképpen fog kinézni:
# REQUIRED: Begin with the latest R container with plumber
FROM rstudio/plumber:latest
# REQUIRED: Install carrier package to be able to use the crated model (whether from a training job
# or uploaded)
RUN R -e "install.packages('carrier', dependencies = TRUE, repos = 'https://cloud.r-project.org/')"
# OPTIONAL: Install any additional R packages you may need for your model crate to run
RUN R -e "install.packages('<PACKAGE-NAME>', dependencies = TRUE, repos = 'https://cloud.r-project.org/')"
RUN R -e "install.packages('<PACKAGE-NAME>', dependencies = TRUE, repos = 'https://cloud.r-project.org/')"
# REQUIRED
ENTRYPOINT []
COPY ./start_plumber.R /tmp/start_plumber.R
CMD ["Rscript", "/tmp/start_plumber.R"]
Módosítsa a fájlt a pontozási szkripthez szükséges csomagok hozzáadásához.
vízvezeték szerelő. R
Fontos
Ez a szakasz bemutatja, hogyan strukturálhatja a vízvezeték-szerelőt . R-szkript . A csomagról részletes információt a plumber
dokumentációban találplumber
.
A fájl vízvezeték-szerelő. Az R az az R-szkript, amely meghatározza a pontozás függvényét. Ez a szkript a végpont működéséhez szükséges feladatokat is végrehajtja. A szkript a következőket hajtja végre:
- Lekéri a modell csatlakoztatási útvonalát a
AZUREML_MODEL_DIR
tároló környezeti változójából. - Betölti a csomagból a
crate
függvénnyel létrehozott modellobjektumot, amelyet crate.bin ként mentett a csomagbacarrier
. - A modellobjektum átrendezése
- A pontozási függvény definiálása
Tipp.
Győződjön meg arról, hogy a pontozási függvény által előállított értékeket vissza lehet konvertálni JSON-ra. Egyes R-objektumok konvertálása nem egyszerű.
# plumber.R
# This script will be deployed to a managed endpoint to do the model scoring
# REQUIRED
# When you deploy a model as an online endpoint, Azure Machine Learning mounts your model
# to your endpoint. Model mounting enables you to deploy new versions of the model without
# having to create a new Docker image.
model_dir <- Sys.getenv("AZUREML_MODEL_DIR")
# REQUIRED
# This reads the serialized model with its respecive predict/score method you
# registered. The loaded load_model object is a raw binary object.
load_model <- readRDS(paste0(model_dir, "/models/crate.bin"))
# REQUIRED
# You have to unserialize the load_model object to make it its function
scoring_function <- unserialize(load_model)
# REQUIRED
# << Readiness route vs. liveness route >>
# An HTTP server defines paths for both liveness and readiness. A liveness route is used to
# check whether the server is running. A readiness route is used to check whether the
# server's ready to do work. In machine learning inference, a server could respond 200 OK
# to a liveness request before loading a model. The server could respond 200 OK to a
# readiness request only after the model has been loaded into memory.
#* Liveness check
#* @get /live
function() {
"alive"
}
#* Readiness check
#* @get /ready
function() {
"ready"
}
# << The scoring function >>
# This is the function that is deployed as a web API that will score the model
# Make sure that whatever you are producing as a score can be converted
# to JSON to be sent back as the API response
# in the example here, forecast_horizon (the number of time units to forecast) is the input to scoring_function.
# the output is a tibble
# we are converting some of the output types so they work in JSON
#* @param forecast_horizon
#* @post /score
function(forecast_horizon) {
scoring_function(as.numeric(forecast_horizon)) |>
tibble::as_tibble() |>
dplyr::transmute(period = as.character(yr_wk),
dist = as.character(logmove),
forecast = .mean) |>
jsonlite::toJSON()
}
start_plumber. R
A fájl start_plumber. Az R a tároló indításakor futtatott R-szkript, amely meghívja a vízvezeték-szerelőt . R-szkript . Használja a következő szkriptet is.
entry_script_path <- paste0(Sys.getenv('AML_APP_ROOT'),'/', Sys.getenv('AZUREML_ENTRY_SCRIPT'))
pr <- plumber::plumb(entry_script_path)
args <- list(host = '0.0.0.0', port = 8000);
if (packageVersion('plumber') >= '1.0.0') {
pr$setDocs(TRUE)
} else {
args$swagger <- TRUE
}
do.call(pr$run, args)
Tároló összeállítása
Ezek a lépések feltételezik, hogy egy Azure Container Registry van társítva a munkaterülethez, amely az első egyéni környezet létrehozásakor jön létre. Annak megtekintéséhez, hogy rendelkezik-e egyéni környezettel:
- Jelentkezzen be az Azure Machine Learning Studióba.
- Szükség esetén válassza ki a munkaterületet.
- A bal oldali navigációs sávon válassza a Környezetek lehetőséget.
- Felül válassza az Egyéni környezetek lehetőséget.
- Ha egyéni környezeteket lát, semmi többre nincs szükség.
- Ha nem lát egyéni környezeteket, hozzon létre egy R-környezetet vagy bármely más egyéni környezetet. (Ezt a környezetet nem fogja használni az üzembe helyezéshez, de az Ön számára is létrehozott tárolóregisztrációs adatbázist fogja használni.)
Miután ellenőrizte, hogy rendelkezik-e legalább egy egyéni környezettel, indítsa el a terminált, és állítsa be a parancssori felületet:
Nyisson meg egy terminálablakot, és jelentkezzen be az Azure-ba. Ha Azure Machine Learning számítási példányt használ, használja a következőket:
az login --identity
Ha nem a számítási példányon dolgozik, hagyja ki
--identity
és kövesse az utasításokat a böngészőablak megnyitásához a hitelesítéshez.Győződjön meg arról, hogy a parancssori felület és a bővítmény legújabb verzióival
ml
rendelkezik:az upgrade
Ha több Azure-előfizetéssel rendelkezik, állítsa az aktív előfizetést a munkaterülethez használtra. (Ezt a lépést kihagyhatja, ha csak egyetlen előfizetéshez rendelkezik hozzáféréssel.) Cserélje le
<YOUR_SUBSCRIPTION_NAME_OR_ID>
az előfizetés nevét vagy az előfizetés azonosítóját. Távolítsa el a szögletes zárójeleket<>
is.az account set -s "<YOUR_SUBSCRIPTION_NAME_OR_ID>"
Állítsa be az alapértelmezett munkaterületet. Ha számítási példányt használ, az alábbi parancsot megtarthatja. Ha más számítógépen dolgozik, cserélje le helyette az erőforráscsoport és a munkaterület nevét. (Ezeket az értékeket a következő helyen találja: Azure Machine Learning Studio.)
az configure --defaults group=$CI_RESOURCE_GROUP workspace=$CI_WORKSPACE
A parancssori felület beállítása után a következő lépésekkel hozhat létre tárolót.
Győződjön meg arról, hogy a projektkönyvtárban van.
cd r-deploy-azureml
A rendszerkép felhőben való létrehozásához hajtsa végre a következő bash-parancsokat a terminálban. Cserélje le
<IMAGE-NAME>
a képet adni kívánt névre.Ha a munkaterület virtuális hálózaton található, a kód utolsó sorában található parancshoz való hozzáadás
--image-build-compute
további lépéseit az Azure Container Registry (ACR) engedélyezése című témakörben találja.az acr build
WORKSPACE=$(az config get --query "defaults[?name == 'workspace'].value" -o tsv) ACR_NAME=$(az ml workspace show -n $WORKSPACE --query container_registry -o tsv | cut -d'/' -f9-) IMAGE_TAG=${ACR_NAME}.azurecr.io/<IMAGE-NAME> az acr build ./docker-context -t $IMAGE_TAG -r $ACR_NAME
Fontos
A rendszerkép létrehozása néhány percet vesz igénybe. Várjon, amíg a buildelési folyamat befejeződik, mielőtt továbblép a következő szakaszra. Ne zárja be ezt a terminált, a mellette fogja használni az üzembe helyezés létrehozásához.
A az acr
parancs automatikusan feltölti a docker-context mappát – amely tartalmazza a rendszerkép létrehozásához szükséges összetevőket – arra a felhőre, ahol a rendszerképet egy Azure Container Registryben fogja létrehozni és üzemeltetni.
Modell üzembe helyezése
A cikk jelen szakaszában meghatároz és létrehoz egy végpontot és üzembe helyezést, amely az előző lépésekben létrehozott modellt és rendszerképet egy felügyelt online végponton helyezi üzembe.
A végpont olyan HTTPS-végpont, amelyet az ügyfelek – például egy alkalmazás – meghívhatnak egy betanított modell pontozási kimenetének fogadásához. Ez biztosítja:
- Hitelesítés a "key & token" alapú hitelesítéssel
- SSL leállítása
- Stabil pontozási URI (endpoint-name.region.inference.ml.Azure.com)
Az üzembe helyezés a modell üzemeltetéséhez szükséges erőforrások készlete, amely elvégzi a tényleges pontozást. Egyetlen végpont több üzembe helyezést is tartalmazhat. Az Azure Machine Learning által felügyelt végpontok terheléselosztási képességei lehetővé teszik, hogy az egyes üzemelő példányok forgalmának bármely százalékát átadhassa. A forgalomelosztással biztonságosan üzembe helyezheti a kék/zöld környezeteket a különböző példányok közötti kérelmek kiegyensúlyozásával.
Felügyelt online végpont létrehozása
A projektkönyvtárban adja hozzá a endpoint.yml fájlt a következő kóddal. Cserélje le
<ENDPOINT-NAME>
azt a nevet, amelyet a felügyelt végpontnak meg szeretne adni.$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: <ENDPOINT-NAME> auth_mode: aml_token
Ugyanazt a terminált használva, ahol a rendszerképet létrehozta, hajtsa végre a következő PARANCSSOR-parancsot egy végpont létrehozásához:
az ml online-endpoint create -f endpoint.yml
Hagyja nyitva a terminált a következő szakaszban való használat folytatásához.
Üzemelő példány létrehozása
Az üzembe helyezés létrehozásához adja hozzá a következő kódot a deployment.yml fájlhoz.
Cserélje le
<ENDPOINT-NAME>
a endpoint.yml fájlban definiált végpontnévreCserélje le
<DEPLOYMENT-NAME>
azt a nevet, amelyet az üzembe helyezésnek meg szeretne adniCserélje le
<MODEL-URI>
a regisztrált modell URI-jára a következő formában:azureml:modelname@latest
Cserélje le
<IMAGE-TAG>
a következő értékre:echo $IMAGE_TAG
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: <DEPLOYMENT-NAME> endpoint_name: <ENDPOINT-NAME> code_configuration: code: ./src scoring_script: plumber.R model: <MODEL-URI> environment: image: <IMAGE-TAG> inference_config: liveness_route: port: 8000 path: /live readiness_route: port: 8000 path: /ready scoring_route: port: 8000 path: /score instance_type: Standard_DS2_v2 instance_count: 1
Ezután a terminálon hajtsa végre a következő CLI-parancsot az üzembe helyezés létrehozásához (figyelje meg, hogy a modell felé a forgalom 100%-át állítja be):
az ml online-deployment create -f deployment.yml --all-traffic --skip-script-validation
Feljegyzés
A szolgáltatás üzembe helyezése több percet is igénybe vehet. Várjon, amíg az üzembe helyezés befejeződik, mielőtt továbblép a következő szakaszra.
Teszt
Az üzembe helyezés sikeres létrehozása után tesztelheti a végpontot a studióval vagy a parancssori felülettel:
Lépjen az Azure Machine Learning Studióba, és válassza ki a bal oldali menü Végpontok elemét. Ezután válassza ki a korábban létrehozott r-endpoint-íriszt .
Adja meg a következő json-t a bemeneti adatokba a valós idejű végpont szövegmezőjének pihenéséhez:
{
"forecast_horizon" : [2]
}
Válassza ki a Teszt lehetőséget. A következő kimenetnek kell megjelennie:
Erőforrások törlése
Most, hogy sikeresen elvégezte a pontszámot a végponttal, törölheti azt, hogy ne járjon folyamatos költséggel:
az ml online-endpoint delete --name r-endpoint-forecast
Következő lépések
Az R és az Azure Machine Learning használatával kapcsolatos további információkért tekintse meg az R-képességek áttekintését az Azure Machine Learningben