Végpontokat kiszolgáló modell kezelése

Ez a cikk bemutatja, hogyan kezelheti a kiszolgálói végpontokat kiszolgáló modelleket a kiszolgáló felhasználói felületen és a REST API-val. Lásd : Végpontok kiszolgálása a REST API-referenciaban.

A végpontokat kiszolgáló modell létrehozásához használja az alábbiak egyikét:

A modellvégpont állapotának lekérése

A végpont állapotát a kiszolgáló felhasználói felületén vagy programozott módon ellenőrizheti a REST API, a Databricks Workspace-ügyfél vagy az MLflow Deployments SDK használatával.

A végpont állapota lehet Ready, Ready (Update failed), Not ready (Updating)vagy Not ready (Update failed)Not ready (Stopped). A felkészültség azt jelenti, hogy lekérdezhető-e egy végpont. A frissített hiba azt jelzi, hogy a végpont legutóbbi módosítása sikertelen volt. A leállítás azt jelenti, hogy a végpont le lett állítva.

UI

A végpont adatoldalának tetején található kiszolgálói végpont állapotjelzője :

Ellenőrizze a végpont állapotát a kiszolgáló felhasználói felületének végpontadataival.

Ellenőrizze a végpont állapotát a felhasználói felületet kiszolgáló listavégpontok használatával.

REST API

GET /api/2.0/serving-endpoints/{name}

A következő példaválaszban a state.ready mező "KÉSZ", ami azt jelenti, hogy a végpont készen áll a forgalom fogadására. A state.update_state mező NOT_UPDATING, és a pending_config már nem lesz visszaadva, mert a frissítés sikeresen befejeződött.

{
  "name": "unity-model-endpoint",
  "creator": "customer@example.com",
  "creation_timestamp": 1666829055000,
  "last_updated_timestamp": 1666829055000,
  "state": {
    "ready": "READY",
    "update_state": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "my-ads-model",
        "entity_name": "myCatalog.mySchema.my-ads-model",
        "entity_version": "1",
        "workload_size": "Small",
        "scale_to_zero_enabled": false,
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "customer@example.com",
        "creation_timestamp": 1666829055000
      }
    ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "my-ads-model",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "permission_level": "CAN_MANAGE"
}

Databricks Workspace-ügyfél

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
endpoint = w.serving_endpoints.get(name="my-endpoint")
print(f"Endpoint state: {endpoint.state.ready}")
print(f"Update state: {endpoint.state.config_update}")

MLflow Deployments SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.get_endpoint(endpoint="my-endpoint")
print(f"Endpoint state: {endpoint['state']}")
print(f"Endpoint config: {endpoint['config']}")

Egy modellt kiszolgáló végpont leállítása

Ideiglenesen leállíthat egy végpontot kiszolgáló modellt, és később elindíthatja azt. Végpont leállítása esetén:

  • A számára kiosztott erőforrások leállnak.
  • A végpont nem tudja kiszolgálni a lekérdezéseket, amíg újra nem indítja.
  • Csak olyan végpontok állíthatók le, amelyek egyéni modelleket szolgálnak ki, és nem rendelkeznek folyamatban lévő frissítésekkel.
  • A leállított végpontok nem számítanak bele az erőforráskvótába.
  • A leállított végpontra küldött lekérdezések 400-os hibát adnak vissza.

Végpont leállítása

UI

Kattintson a Jobb felső sarokban található Leállítás gombra.

Állítson le egy végpontot kiszolgáló modellt a kiszolgáló felhasználói felülettel.

REST API

POST /api/2.0/serving-endpoints/{name}/config:stop

Végpont elindítása

A végpont indításakor létrejön egy új konfigurációs verzió, amely ugyanazokkal a tulajdonságokkal rendelkezik, mint a meglévő leállított konfiguráció.

Ha készen áll egy leállított modellkiszolgáló végpont újraindítására:

UI

Kattintson a Jobb felső sarokban lévő Start gombra.

Indítson el egy modellkiszolgáló végpontot a Serving felhasználói felülettel.

REST API

POST /api/2.0/serving-endpoints/{name}/config:start

Végpontot kiszolgáló modell törlése

A végpont törlése letiltja a használatot, és törli a végponthoz társított összes adatot. A törlés nem vonható vissza.

UI

Kattintson a felső kebab menüre, és válassza a Törléslehetőséget.

Töröljön egy kiszolgálói végpontot kiszolgáló modellt a kiszolgáló felhasználói felületén.

REST API

DELETE /api/2.0/serving-endpoints/{name}

MLflow Deployments SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
client.delete_endpoint(endpoint="chat")

Végpontot kiszolgáló modell hibakeresése

A végpontokkal kapcsolatos problémák hibakereséséhez kétféle napló érhető el:

  • Modellkiszolgáló tárolólétrehozási naplói: A tároló létrehozásakor a végpont inicializálása során jön létre. Ezek a naplók rögzítik a telepítési fázist, beleértve a modell letöltését, a függőségek telepítését és a futtatókörnyezet konfigurálását. Ezekkel a naplókkal hibakeresést végezhet arról, hogy egy végpont miért nem indult el vagy elakadt az üzembe helyezés során.
  • Modellkiszolgáló naplói: Futásidőben jönnek létre, amikor a végpont aktívan szolgálja ki az előrejelzéseket. Ezek a naplók rögzítik a bejövő kéréseket, a modell következtetésének végrehajtását, a futásidejű hibákat és az alkalmazásszintű naplózást a modellkódból. Ezekkel a naplókkal hibakeresést végezhet az előrejelzésekben, vagy kivizsgálhatja a lekérdezési hibákat.

Mindkét naplótípus a Naplók lap Végpontok felhasználói felületén is elérhető.

A tároló buildnaplóinak lekérése

Egy kiszolgált modell buildnaplóihoz az alábbi kérést használhatja. További információt a Modellkiszolgáló hibakeresési útmutatójában talál.


GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
  "config_version": 1  // optional
}

Modellkiszolgáló naplóinak lekérése

Egy kiszolgálómodell modellkiszolgálói naplóihoz a következő kérést használhatja:


GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs

{
  "config_version": 1  // optional
}

Engedélyek kezelése végpontot kiszolgáló modellen

Az engedélyek módosításához legalább a CAN MANAGE engedéllyel kell rendelkeznie egy kiszolgáló végponton. A jogosultsági szintekről további információt a végponti ACL-ek kiszolgálása című témakörben talál.

Kérje le a kiszolgáló végpont engedélyeinek listáját.

UI

Kattintson a felhasználói felület jobb felső sarkában található Engedélyek gombra.

Egy végpontot kiszolgáló modell engedélyeinek kezelése a kiszolgáló felhasználói felületével.

A Databricks parancssori felülete

databricks permissions get serving-endpoints <endpoint-id>

Adja meg a felhasználónak jsmith@example.com a CAN QUERY engedélyt a kiszolgáló végponton.

databricks permissions update serving-endpoints <endpoint-id> --json '{
  "access_control_list": [
    {
      "user_name": "jsmith@example.com",
      "permission_level": "CAN_QUERY"
    }
  ]
}'

A végpontengedélyek kiszolgálását az Permissions API használatával is módosíthatja.

Kiszolgáló nélküli használati szabályzat hozzáadása egy végpontot kiszolgáló modellhez

Fontos

Ez a funkció nyilvános előzetes verzióban van, és nem érhető el olyan végpontokhoz, amelyek külső modelleketszolgálnak ki.

A kiszolgáló nélküli használati szabályzatok lehetővé teszik a szervezet számára, hogy egyéni címkéket alkalmazzanak a kiszolgáló nélküli használatra a részletes számlázási hozzárendeléshez. Ha a munkaterület kiszolgáló nélküli használati szabályzatokat használ a kiszolgáló nélküli használat attribútumához, hozzáadhat egy kiszolgáló nélküli használati szabályzatot a végpontokat kiszolgálói modellhez. Lásd : Attribútumhasználat kiszolgáló nélküli használati szabályzatokkal.

A végpontlétrehozási modell létrehozása során kiválaszthatja a végpont kiszolgáló nélküli használati szabályzatát a Kiszolgálói felhasználói felület Költségvetés szabályzat menüjéből. Ha kiszolgáló nélküli használati szabályzat van hozzárendelve Önhöz, a rendszer minden létrehozott végponthoz hozzárendeli azt a kiszolgáló nélküli használati szabályzatot, még akkor is, ha nem választ ki szabályzatot a Költségvetés házirend menüjéből.

Kiszolgáló nélküli használati szabályzat hozzáadása a végpontlétrehozási modell létrehozása során a kiszolgálói felhasználói felületen.

Ha rendelkezik MANAGE engedéllyel egy meglévő végponthoz, szerkeszthet és hozzáadhat kiszolgáló nélküli használati szabályzatot az adott végponthoz a felhasználói felület Végpont részletei lapján.

Szerkessze a kiszolgáló nélküli használati szabályzatot egy meglévő, kiszolgálói végpontot kiszolgáló modellen a kiszolgálói felhasználói felület használatával.

Jegyzet

Ha kiszolgáló nélküli használati szabályzatot kapott, a meglévő végpontok nem lesznek automatikusan címkézve a szabályzattal. Ha kiszolgáló nélküli használati szabályzatot szeretne hozzájuk csatolni, manuálisan kell frissítenie a meglévő végpontokat.

Végpontsémát kiszolgáló modell lekérése

Fontos

A végpontlekérdezés sémáinak kiszolgálása nyilvános előzetes verzióban érhető el. Ez a funkció a Modellkiszolgáló régiókban érhető el.

A kiszolgálói végpontlekérdezés sémája a kiszolgáló végpontjának formális leírása a standard OpenAPI-specifikáció JSON formátumban történő használatával. Információkat tartalmaz a végpontról, beleértve a végpont elérési útját, a végpont lekérdezésének részleteit, például a kérelem- és választörzs formátumát, valamint az egyes mezők adattípusát. Ezek az információk hasznosak lehetnek a reprodukálhatósági forgatókönyvekben, vagy ha a végponttal kapcsolatos információkra van szüksége, de nem Ön az eredeti végpont létrehozója vagy tulajdonosa.

A modell végpontséma lekéréséhez a kiszolgált modellnek naplózott modellaírással kell rendelkeznie, és a végpontnak READY állapotban kell lennie.

Az alábbi példák bemutatják, hogyan lehet programozott módon lekérni a végpontsémát kiszolgáló modellt a REST API használatával. A szolgáltatásvégpontok sémáit a szolgáltatás-kiszolgáló végpontok című témakörben talál.

Az API által visszaadott séma az OpenAPI-specifikációt követő JSON-objektum formátumában található.


ACCESS_TOKEN="<endpoint-token>"
ENDPOINT_NAME="<endpoint name>"

curl "https://example.databricks.com/api/2.0/serving-endpoints/$ENDPOINT_NAME/openapi" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json"

Sémaválasz részletei

A válasz egy JSON formátumú OpenAPI-specifikáció, amely általában olyan mezőket tartalmaz, mint a openapi, infoservers és paths. Mivel a sémaválasz egy JSON-objektum, elemezheti azt közös programozási nyelvek használatával, és ügyfélkódot hozhat létre a specifikációból külső eszközökkel. Az OpenAPI-specifikációt külső eszközök, például a Swagger Editor használatával is megjelenítheti.

A válasz fő mezői a következők:

  • A info.title mező a kiszolgáló végpont nevét jeleníti meg.
  • A servers mező mindig egy objektumot tartalmaz, általában azt a url mezőt, amely a végpont alap URL-címe.
  • A paths válaszban szereplő objektum egy végpont összes támogatott elérési útját tartalmazza. Az objektum kulcsai az elérési út URL-címe. Mindegyik path támogatja a bemenetek több formátumát. Ezek a bemenetek szerepelnek a oneOf mezőben.

Az alábbiakban egy példa végpontséma-választ mutatunk be:

{
  "openapi": "3.1.0",
  "info": {
    "title": "example-endpoint",
    "version": "2"
  },
  "servers": [{ "url": "https://example.databricks.com/serving-endpoints/example-endpoint" }],
  "paths": {
    "/served-models/vanilla_simple_model-2/invocations": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_split": {
                        "type": "object",
                        "properties": {
                          "columns": {
                            "description": "required fields: int_col",
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": ["int_col", "float_col", "string_col"]
                            }
                          },
                          "data": {
                            "type": "array",
                            "items": {
                              "type": "array",
                              "prefixItems": [
                                {
                                  "type": "integer",
                                  "format": "int64"
                                },
                                {
                                  "type": "number",
                                  "format": "double"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    },
                    "examples": [
                      {
                        "columns": ["int_col", "float_col", "string_col"],
                        "data": [
                          [3, 10.4, "abc"],
                          [2, 20.4, "xyz"]
                        ]
                      }
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_records": {
                        "type": "array",
                        "items": {
                          "required": ["int_col", "float_col", "string_col"],
                          "type": "object",
                          "properties": {
                            "int_col": {
                              "type": "integer",
                              "format": "int64"
                            },
                            "float_col": {
                              "type": "number",
                              "format": "double"
                            },
                            "string_col": {
                              "type": "string"
                            },
                            "becx_col": {
                              "type": "object",
                              "format": "unknown"
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "predictions": {
                      "type": "array",
                      "items": {
                        "type": "number",
                        "format": "double"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}