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/invocations
felté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:
Nyissa meg a pontozáshoz használni kívánt adathalmazt.
Nyissa meg az Adatok átalakítása elemet.
Kattintson a jobb gombbal a bal oldali panelen, és válassza az Új lekérdezés létrehozása lehetőséget.
Nyissa meg a Speciális szerkesztő megtekintése > elemet.
Cserélje le a lekérdezés törzsét az alábbi kódrészletre a megfelelő és
MODEL_VERSION_URI
a .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
Adja meg a lekérdezést a kívánt modellnévvel.
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/invocations
felté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 asplit
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 arecords
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 arecords
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)t3
t1
tenzorpéldányokt2
száma eltérő, ezért ezt ainstances
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
További erőforrások
- Következtetéstáblák a modellek monitorozásához és hibakereséséhez.
- Lekérdezésgeneratív AI-modellek.
- Hibakeresési útmutató a modellkiszolgálóhoz.