MLflow-modell kiszolgálása a Azure Databricks

Fontos

Ez a funkció a nyilvános előzetes verzióban érhető el.

Az MLflow Model Serving lehetővé teszi a modelljegyzékből származó gépi tanulási modellek REST-végpontokként való gazdagépét, amelyek automatikusan frissülnek a modellverziók és azok szakaszainak rendelkezésre állása alapján.

Ha engedélyezi a modellszolgáltatást egy adott regisztrált modellhez, a Azure Databricks automatikusan létrehoz egy egyedi fürtöt a modellhez, és üzembe helyez a modell összes nem archivált verzióját a fürtön. Azure Databricks hiba esetén a rendszer újraindítja a fürtöt, és le is kapcsolja a fürtöt, amikor letiltja a modell kiszolgálását. A modell kiszolgálása automatikusan szinkronizál a Modell-beállításjegyzékbe, és üzembe helyez minden új regisztrált modellverziót. Az üzembe helyezett modellverziók lekérdezhetőek standard REST API kéréssel. Azure Databricks szabványos hitelesítéssel hitelesíti a modellre vonatkozó kéréseket.

Bár ez a szolgáltatás előzetes verzióban érhető el, a Databricks azt javasolja, hogy használja az alacsony átviteli sebességet és a nem kritikus fontosságú alkalmazásokat. A cél átviteli sebesség 200 qps, a cél rendelkezésre állása pedig 99,5%, bár egyikre sem vállalunk garanciát. Emellett a hasznos adatok méretének korlátja kérésenként 16 MB.

Minden modellverzió az MLflow-modell üzembe helyezésével van üzembe adva, és a függőségei által meghatározott Conda-környezetben fut.

Megjegyzés

  • A fürt akkor is megmarad, ha a kiszolgáló engedélyezve van, még akkor is, ha nincs aktív modellverzió. A kiszolgáló fürt megszüntetéséhez tiltsa le a modell szolgáltatását a regisztrált modell számára.
  • A fürt minden célú fürtnek minősül, és a számítási feladatok díjszabása is vonatkozik rá.
  • A globális iniktív szkriptek nem a kiszolgáló fürtökön futnak.

Követelmények

Modell kiszolgálása a Modelljegyzékből

A modell kiszolgálása a Modell Azure Databricks jegyzékből érhető el.

Modell kiszolgálásának engedélyezése és letiltása

A modellnek a regisztrált modelloldalról való kiszolgálását engedélyezheti.

  1. Kattintson a Kiszolgáló fülre. Ha a modell még nincs engedélyezve a kiszolgáláshoz, megjelenik a Kiszolgáló engedélyezése gomb.

    Szolgáltatás engedélyezése gomb

  2. Kattintson a Kiszolgáló engedélyezése elemre. Megjelenik a Kiszolgáló lap Függőben állapottal. Néhány perc múlva az Állapot Kész állapotra változik.

Ha le szeretné tiltani egy modell kiszolgálását, kattintson a Stop (Leállítás) gombra.

Modell kiszolgálásának ellenőrzése

A Kiszolgáló lapon kérést küldhet a kiszolgált modellnek, és megtekintheti a választ.

Szolgáltatás engedélyezése

Modellverzió URI-i

Minden üzembe helyezett modellverzióhoz egy vagy több egyedi URI van hozzárendelve. Legalább minden modellverzióhoz hozzá van rendelve egy URI, amely a következőképpen épül fel:

<databricks-instance>/model/<registered-model-name>/<model-version>/invocations

Ha például a regisztrált modell 1. verzióját a következő URI-ként hívja iris-classifier meg:

https://<databricks-instance>/model/iris-classifier/1/invocations

A modellverziót annak fázisa alapján is meg lehet hívni. Ha például az 1. verzió az éles szakaszban van, a következő URI használatával is pontozást lehet használni:

https://<databricks-instance>/model/iris-classifier/Production/invocations

Az elérhető modell URI-k listája a kiszolgálóoldal Modellverziók lapjának tetején jelenik meg.

Kiszolgált verziók kezelése

A rendszer üzembe helyez minden aktív (nem archivált) modellverziót, és lekérdezheti őket az URI-k használatával. Azure Databricks automatikusan telepíti az új modellverziókat, amikor regisztrálva vannak, és az archiváláskor automatikusan eltávolítja a régi verziókat.

Megjegyzés

A regisztrált modell összes telepített verziója ugyanazt a fürtöt használja.

Modell-hozzáférési jogosultságok kezelése

A modell hozzáférési jogosultsága a modelljegyzékből öröklődik. A szolgáltatás funkció engedélyezéséhez vagy letiltásához "kezelés" engedély szükséges a regisztrált modellen. Bárki, aki olvasási jogosultsággal rendelkezik, pontozást kaphat az üzembe helyezett verziók bármelyikéhez.

Üzembe helyezett modellverziók pontozása

Az üzembe helyezett modell pontozása a felhasználói felületen vagy egy REST API a modell URI-nak.

Pontszám felhasználói felületen keresztül

Ez a modell tesztelésének legegyszerűbb és leggyorsabb módja. Beszúrhatja a modell bemeneti adatait JSON formátumban, és kattintson a Send Request (Kérés küldése) gombra. Ha a modellt egy bemeneti példával naplózták (a fenti ábrán látható módon), kattintson a Példa betöltése lehetőségre a példabemenet betöltéséhez.

Pontozás REST API kérésen keresztül

Pontozási kérelmet küldhet a REST API Standard Databricks-hitelesítéssel. Az alábbi példák személyes hozzáférési jogkivonattal való hitelesítést mutatnak be.

Egy hasonló (ahol a a Databricks-példány neve ) és egy MODEL_VERSION_URIhttps://<databricks-instance>/model/iris-classifier/Production/invocations nevű <databricks-instance>MODEL_VERSION_URIREST API-jogkivonat íme néhány példarészlet a kiszolgált modell DATABRICKS_API_TOKEN lekérdezésére:

Bash

Kódrészlet adatkeret-bemeneteket elfogadó modell lekérdezéséhez.

curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
  -H 'Content-Type: application/json' \
  -d '[
    {
      "sepal_length": 5.1,
      "sepal_width": 3.5,
      "petal_length": 1.4,
      "petal_width": 0.2
    }
  ]'

Kódrészlet tenzor bemeneteket elfogadó modell lekérdezéséhez. A Tensor-bemeneteket a TensorFlow ServingAPI-dokumentációjának leírásának megfelelő módon kell formázni.

curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
   -H 'Content-Type: application/json' \
   -d '{"inputs": [[5.1, 3.5, 1.4, 0.2]]}'

Python

import numpy as np
import pandas as pd
import requests

def create_tf_serving_json(data):
  return {'inputs': {name: data[name].tolist() for name in data.keys()} if isinstance(data, dict) else data.tolist()}

def score_model(model_uri, databricks_token, data):
  headers = {
    "Authorization": f"Bearer {databricks_token}",
    "Content-Type": "application/json",
  }
  data_json = data.to_dict(orient='records') if isinstance(data, pd.DataFrame) else create_tf_serving_json(data)
  response = requests.request(method='POST', headers=headers, url=model_uri, json=data_json)
  if response.status_code != 200:
      raise Exception(f"Request failed with status {response.status_code}, {response.text}")
  return response.json()

# Scoring a model that accepts pandas DataFrames
data =  pd.DataFrame([{
  "sepal_length": 5.1,
  "sepal_width": 3.5,
  "petal_length": 1.4,
  "petal_width": 0.2
}])
score_model(MODEL_VERSION_URI, DATABRICKS_API_TOKEN, data)

# Scoring a model that accepts tensors
data = np.asarray([[5.1, 3.5, 1.4, 0.2]])
score_model(MODEL_VERSION_URI, DATABRICKS_API_TOKEN, data)

Powerbi

A következő lépésekkel pontozást Power BI Desktop egy adatkészletben:

  1. Nyissa meg a pontozásra kívánt adatkészletet.

  2. Ugrás az Adatok átalakítása panelre.

  3. Kattintson a jobb gombbal a bal oldali panelen, és válassza az Új lekérdezés létrehozása lehetőséget.

  4. A View (Nézet) Speciális szerkesztő.

  5. A megfelelő és kitöltése után cserélje le a lekérdezés törzsét az alábbi DATABRICKS_API_TOKENMODEL_VERSION_URI kódrészletre.

    (dataset as table ) as table =>
    let
      call_predict = (dataset as table ) as list =>
      let
        apiToken = DATABRICKS_API_TOKEN,
        modelUri = MODEL_VERSION_URI,
        responseList = Json.Document(Web.Contents(modelUri,
          [
            Headers = [
              #"Content-Type" = "application/json",
              #"Authorization" = Text.Format("Bearer #{0}", {apiToken})
            ],
            Content = Json.FromValue(dataset)
          ]
        ))
      in
        responseList,
      predictionList = List.Combine(List.Transform(Table.Split(dataset, 256), (x) => call_predict(x))),
      predictionsTable = Table.FromList(predictionList, (x) => {x}, {"Prediction"}),
      datasetWithPrediction = Table.Join(
        Table.AddIndexColumn(predictionsTable, "index"), "index",
        Table.AddIndexColumn(dataset, "index"), "index")
    in
      datasetWithPrediction
    
  6. Nevezze el a lekérdezést a kívánt modellnévvel.

  7. Nyissa meg az adatkészlet speciális lekérdezésszerkesztőjét, és alkalmazza a modell függvényt.

A kiszolgáló által elfogadott bemeneti adatformátumokról (például a pandas felosztásalapú formátumáról) az MLflow dokumentációjában talál további információt.

Kiszolgált modellek figyelése

A kiszolgálóoldal állapotjelzőket jelenít meg a kiszolgáló fürthöz és az egyes modellverziókhoz.

  • A kiszolgáló fürt állapotának vizsgálatához használja a Modellesemények lapot, amely megjeleníti a modellhez használható összes kiszolgálóesemény listáját.
  • Egyetlen modellverzió állapotának vizsgálathoz kattintson a Modellverziók lapra, és görgessen lefelé a Naplók vagy a Verzióesemények lapok megtekintéséhez.

Kiszolgáló lap

A kiszolgálófürt testreszabása

A kiszolgálófürt testreszabásához használja a Gépház lapKiszolgáló lapján.

Fürtbeállítások

  • A kiszolgáló fürt memóriaméretének és magszámának módosításához használja a Példány típusa legördülő menüt a kívánt fürtkonfiguráció kiválasztásához. Amikor a Mentés gombrakattint, a meglévő fürt leáll, és létrejön egy új fürt a megadott beállításokkal.
  • Címke hozzáadásához írja be a nevet és az értéket a Címke hozzáadása mezőkbe, majd kattintson a Hozzáadás elemre.
  • Meglévő címke szerkesztéséhez vagy törléséhez kattintson az egyik ikonra a Tags tábla Műveletekoszlopában.

Ismert hibák

ResolvePackageNotFound: pyspark=3.1.0

Ez a hiba akkor fordulhat elő, ha egy modelltől függ, és a pyspark 8.x Databricks Runtime van naplózva. Ha ezt a hibát látja, explicit módon adja meg a verziót a modell pyspark naplózása során a paraméter pyspark