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


Végpontok lekérdezése egyéni modellekhez

Ebből a cikkből megtudhatja, hogyan formázhatja a kiszolgált modell pontozási kéréseit, és hogyan küldheti el ezeket a kéréseket a modell kiszolgáló végpontjának. Az útmutató az egyéni modellek kiszolgálása szempontjából releváns, amelyet a Databricks hagyományos ML-modellekként vagy MLflow formátumban csomagolt testreszabott Python-modellekként határoz meg. Regisztrálhatók a Unity Katalógusban vagy a munkaterület-modell beállításjegyzékében. Ilyenek például a scikit-learn, az XGBoost, a PyTorch és az Ölelés Arc transzformátormodellek. Erről a funkcióról és a támogatott modellkategóriákról további információt az Azure Databricks szolgáltatással kapcsolatos modellben talál.

A generatív AI- és LLM-számítási feladatok lekérdezési kéréseivel kapcsolatban lásd a lekérdezésgeneratív AI-modelleket.

Követelmények

  • Végpontot kiszolgáló modell.
  • Az MLflow Deployment SDK-hoz az MLflow 2.9 vagy újabb verziójára van szükség.
  • Pontozási kérés elfogadott formátumban.
  • Ha pontozási kérelmet szeretne küldeni a REST API-val vagy az MLflow Deployment SDK-val, rendelkeznie kell egy Databricks API-jogkivonattal.

Fontos

A Databricks ajánlott biztonsági gyakorlatként az éles környezetekben a gépről gépre történő OAuth-jogkivonatok használatát javasolja a hitelesítéshez az éles környezetben.

Teszteléshez és fejlesztéshez a Databricks a munkaterület felhasználói helyett a szolgáltatásnevekhez tartozó személyes hozzáférési jogkivonat használatát javasolja. A szolgáltatásnevek jogkivonatainak létrehozásáról a szolgáltatásnév jogkivonatainak kezelése című témakörben olvashat.

Lekérdezési módszerek és példák

A Mozaik AI-modellkiszolgáló a következő lehetőségeket kínálja a pontozási kérések kézbesítésére a kiszolgált modelleknek:

Metódus Részletek
Felhasználói felület kiszolgálása Válassza a Lekérdezésvégpont lehetőséget a Databricks-munkaterület Kiszolgáló végpont lapján. JSON formátummodell bemeneti adatainak beszúrása, majd a Kérés küldése gombra kattintva. Ha a modellhez egy bemeneti példa van naplózva, a Példa megjelenítése parancsot használva töltse be.
REST API A modell meghívása és lekérdezése a REST API használatával. Részletekért lásd: POST /serving-endpoints/{name}/invocations . A több modellt kiszolgáló végpontokra irányuló pontozási kérelmekről a végpont mögötti egyes modellek lekérdezése című témakörben olvashat.
MLflow Deployments SDK A modell lekérdezéséhez használja az MLflow Deployments SDK predict() függvényét.
SQL-függvény Modellkövetkeztetés meghívása közvetlenül az SQL-ből az ai_query SQL-függvény használatával. Lásd: Kiszolgált modell lekérdezése ai_query()-val.

Példa a Pandas DataFrame pontozására

Az alábbi példa egy hasonlót https://<databricks-instance>/model/iris-classifier/Production/invocationsfeltételez, ahol <databricks-instance> a Databricks-példány neve és egy Databricks REST API-jogkivonat neve szerepelDATABRICKS_API_TOKEN.MODEL_VERSION_URI

Lásd: Támogatott pontozási formátumok.

REST API

Az adatkeret felosztott bemeneti formátumát elfogadó modell pontszáma.

curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
  -H 'Content-Type: application/json' \
  -d '{"dataframe_split": [{
     "columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"],
     "data": [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]]
    }]
  }'

A tenzor bemeneteket elfogadó modell pontszáma. A Tensor-bemeneteket a TensorFlow Serving API-dokumentációjában leírtak szerint 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]]}'

MLflow Deployments SDK

Fontos

Az alábbi példa az predict() MLflow Deployments SDK API-t használja.


import mlflow.deployments

export DATABRICKS_HOST="https://<workspace_host>.databricks.com"
export DATABRICKS_TOKEN="dapi-your-databricks-token"

client = mlflow.deployments.get_deploy_client("databricks")

response = client.predict(
            endpoint="test-model-endpoint",
            inputs={"dataframe_split": {
                    "index": [0, 1],
                    "columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"],
                    "data": [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]]
                    }
                }
           )

SQL

Fontos

Az alábbi példa a beépített SQL-függvényt használja, ai_query. Ez a függvény nyilvános előzetes verzió , és a definíció változhat. Lásd: Kiszolgált modell lekérdezése ai_query()-val.

Az alábbi példa lekérdezi a végpont mögötti sentiment-analysis modellt az text adatkészlettel, és megadja a kérés visszatérési típusát.

SELECT text, ai_query(
    "sentiment-analysis",
    text,
    returnType => "STRUCT<label:STRING, score:DOUBLE>"
  ) AS predict
FROM
  catalog.schema.customer_reviews

PowerBI

A Power BI Desktopban az alábbi lépések végrehajtásával pontozást végezhet egy adatkészleten:

  1. Nyissa meg a pontozáshoz használni kívánt adathalmazt.

  2. Nyissa meg az Adatok átalakítása elemet.

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

  4. Nyissa meg a Speciális szerkesztő megtekintése > elemet.

  5. Cserélje le a lekérdezés törzsét az alábbi kódrészletre a megfelelő és MODEL_VERSION_URIa .DATABRICKS_API_TOKEN

    (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 = {"dataframe_records": 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. Adja meg a lekérdezést a kívánt modellnévvel.

  7. Nyissa meg az adathalmaz speciális lekérdezésszerkesztőt, és alkalmazza a modellfüggvényt.

Tensor bemeneti példa

Az alábbi példa egy tenzor bemeneteket elfogadó modellt mutat be. A Tensor-bemeneteket a TensorFlow-kiszolgáló API-dokumentációjában leírtak szerint kell formázni. Ez a példa egy MODEL_VERSION_URI hasonlót https://<databricks-instance>/model/iris-classifier/Production/invocationsfeltételez, ahol <databricks-instance> a Databricks-példány neve és egy Databricks REST API-jogkivonat neve szerepelDATABRICKS_API_TOKEN.

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]]}'

Támogatott pontozási formátumok

Egyéni modellek esetén a Modellkiszolgáló támogatja a pontozási kéréseket a Pandas DataFrame-ben vagy a Tensor bemenetében.

Pandas DataFrame

A kéréseket egy JSON-szerializált Pandas DataFrame-et kell létrehozni a támogatott kulcsok egyikével és egy bemeneti formátumnak megfelelő JSON-objektummal.

  • (Ajánlott)dataframe_split formátum egy JSON-szerializált Pandas DataFrame a split tájolásban.

    {
      "dataframe_split": {
        "index": [0, 1],
        "columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"],
        "data": [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]]
      }
    }
    
  • dataframe_records JSON-szerializált Pandas DataFrame a records tájolásban.

    Feljegyzés

    Ez a formátum nem garantálja az oszloprendezés megőrzését, és a split formátumot előnyben részesíti a records formátum.

    {
      "dataframe_records": [
      {
        "sepal length (cm)": 5.1,
        "sepal width (cm)": 3.5,
        "petal length (cm)": 1.4,
        "petal width (cm)": 0.2
      },
      {
        "sepal length (cm)": 4.9,
        "sepal width (cm)": 3,
        "petal length (cm)": 1.4,
        "petal width (cm)": 0.2
      },
      {
        "sepal length (cm)": 4.7,
        "sepal width (cm)": 3.2,
        "petal length (cm)": 1.3,
        "petal width (cm)": 0.2
      }
      ]
    }
    

A végpont válasza tartalmazza a modell kimenetét, JSON-val szerializálva, kulcsba predictions csomagolva.

{
  "predictions": [0,1,1,1,0]
}

Tensor bemenet

Ha a modell tenzorokat vár, például TensorFlow- vagy Pytorch-modelleket, a kérések küldésének két támogatott formátumbeállítása van: instances és inputs.

Ha soronként több elnevezett tenzort is használ, akkor minden sorhoz minden egyes tenzorból egyet kell hozzáadnia.

  • instances egy tenzoralapú formátum, amely sorformátumban fogadja el a tenzorokat. Ezt a formátumot akkor használja, ha az összes bemeneti tenzor azonos 0-ás dimenzióval rendelkezik. Elméletileg a példányok listájában szereplő összes tenzor a lista többi részében lévő többi azonos nevű tenzorhoz csatlakoztatható a modell teljes bemeneti tenzorának létrehozásához, ami csak akkor lehetséges, ha az összes tenzor azonos 0-edik dimenzióval rendelkezik.

    {"instances": [ 1, 2, 3 ]}
    

    Az alábbi példa bemutatja, hogyan adhat meg több elnevezett tenzort.

    {
    "instances": [
      {
       "t1": "a",
       "t2": [1, 2, 3, 4, 5],
       "t3": [[1, 2], [3, 4], [5, 6]]
      },
      {
       "t1": "b",
       "t2": [6, 7, 8, 9, 10],
       "t3": [[7, 8], [9, 10], [11, 12]]
      }
    ]
    }
    
  • inputs tenzoros lekérdezések küldése oszlopos formátumban. Ez a kérés azért különbözik, mert valójában a (3) és a (3) t3t1 tenzorpéldányok t2 száma eltérő, ezért ezt a instances bemenetet nem lehet a formátumban ábrázolni.

    {
    "inputs": {
      "t1": ["a", "b"],
      "t2": [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]],
      "t3": [[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]]
    }
    }
    

A végpont válasza a következő formátumban van.

{
  "predictions": [0,1,1,1,0]
}

Példa jegyzetfüzetre

Az alábbi jegyzetfüzetből megtudhatja, hogyan tesztelheti a Modellkiszolgáló végpontot Egy Python-modellel:

Végpontjegyzetfüzetet kiszolgáló modell tesztelése

Jegyzetfüzet beszerzése

További erőforrások