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


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

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:

  1. Jelentkezzen be az Azure Machine Learning Studióba.
  2. Szükség esetén válassza ki a munkaterületet.
  3. A bal oldali navigációs sávon válassza a Környezetek lehetőséget.
  4. Felül válassza az Egyéni környezetek lehetőséget.
  5. Ha egyéni környezeteket lát, semmi többre nincs szükség.
  6. 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:

  1. 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.

  2. 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
    
  3. 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>"
    
  4. Á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.

  1. Győződjön meg arról, hogy a projektkönyvtárban van.

    cd r-deploy-azureml
    
  2. 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

  1. 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
    
  2. 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
    
  3. Hagyja nyitva a terminált a következő szakaszban való használat folytatásához.

Üzemelő példány létrehozása

  1. 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évre

    • Cserélje le <DEPLOYMENT-NAME> azt a nevet, amelyet az üzembe helyezésnek meg szeretne adni

    • Cseré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
    
  2. 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:

Képernyőkép egy modell tesztelésének eredményeiről.

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