Model MLflow obsluhující na Azure Databricks

Důležité

Tato funkce je ve verzi Public Preview.

Model MLflow slouží k hostování modelů strojového učení z registru modelu jako koncových bodů REST, které se automaticky aktualizují na základě dostupnosti modelových verzí a jejich fází.

Pokud povolíte model obsluhující pro daný registrovaný model, Azure Databricks automaticky vytvoří jedinečný cluster pro model a nasadí všechny nearchivované verze modelu v tomto clusteru. Azure Databricks restartuje cluster, pokud dojde k chybě, a ukončí cluster při zakázání modelu obsluhujícího pro model. Model obsluhující automatickou synchronizaci s registry modelu a nasadí všechny nové registrované verze modelu. K nasazeným verzím modelu se dá dotázat pomocí standardní REST API žádosti. Azure Databricks ověřuje požadavky na model pomocí jeho standardního ověřování.

I když je tato služba ve verzi Preview, služba datacihly doporučuje její použití pro nízkou propustnost a nekritické aplikace. Propustnost cíle je 20 QPS a cílová dostupnost je 99,5%, i když není nijak zaručena kterákoli z nich. Kromě toho je omezení velikosti datové části na jednu žádost nastaveno na 16 MB.

Každá verze modelu se nasazuje pomocí nasazení modelu MLflow a běží v prostředí conda určeném jeho závislostmi.

Poznámka

  • Cluster se udržuje, pokud je povolená funkce obsluhující, a to i v případě, že neexistuje žádná aktivní verze modelu. Chcete-li ukončit obsluhující cluster, zakažte model obsluhy pro registrovaný model.
  • Cluster se považuje za cluster pro všechny účely s využitím cen za úlohy všech účelů.
  • Globální skripty init nejsou spouštěny v rámci obsluhy clusterů.

Požadavky

  • Obsluha modelů MLflow je k dispozici pro modely MLflow v Pythonu. Je nutné deklarovat všechny závislosti modelu v prostředí conda.
  • Pokud chcete povolit model obsluhy, musíte mít oprávnění vytvořit cluster.

Model obsluhující z registru modelu

Obsluha modelů je k dispozici v Azure Databricks z registru modelů.

Povolení a zakázání modelu obsluhujícího

Povolíte model pro obsluhu ze stránky jeho registrovaného modelu.

  1. Klikněte na kartu obsluha . Pokud model ještě není povolen pro obsluhu, zobrazí se tlačítko Povolit obsluhu .

    Povolit obsluhující tlačítko

  2. Klikněte na Povolit obsluhu. Karta obsluhující se zobrazí se stavem čeká na vyřízení. Po několika minutách se stav změní na připraveno.

Chcete-li zakázat model pro obsluhu, klikněte na tlačítko zastavit.

Ověření modelu obsluhujícího

Na kartě obsluha můžete odeslat požadavek do poskytovaného modelu a zobrazit odpověď.

Povolení obsluhy

Identifikátory URI verze modelu

Každá verze nasazeného modelu je přiřazena jeden nebo několik jedinečných identifikátorů URI. Minimálně každá verze modelu má přiřazený identifikátor URI sestavený takto:

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

Například pro volání verze 1 modelu registrovaného jako iris-classifier použijte tento identifikátor URI:

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

Můžete také volat verzi modelu podle fáze. Například pokud je verze 1 ve fázi produkčního prostředí, může se také určit skóre pomocí tohoto identifikátoru URI:

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

Seznam dostupných identifikátorů URI modelu se zobrazí v horní části karty verze modelu na stránce obsluhující.

Správa zpracovaných verzí

Všechny aktivní (nearchivované) modelové verze jsou nasazené a můžete je dotazovat pomocí identifikátorů URI. Azure Databricks automaticky nasadí nové verze modelu při jejich registraci a automaticky odstraní staré verze při jejich archivaci.

Poznámka

Všechny nasazené verze registrovaného modelu sdílejí stejný cluster.

Správa přístupových práv modelu

Přístupová práva modelu se dědí z registru modelu. Povolení nebo zakázání funkce obsluhující vyžaduje pro registrovaný model oprávnění Manage. Kdokoli s právy ke čtení může vyhodnotit kteroukoli z nasazených verzí.

Skóre nasazených modelů verze

Chcete-li určit skóre nasazeného modelu, můžete použít uživatelské rozhraní nebo odeslat požadavek REST API do identifikátoru URI modelu.

Skóre prostřednictvím uživatelského rozhraní

Toto je nejjednodušší a nejrychlejší způsob testování modelu. Vstupní data modelu můžete vložit ve formátu JSON a kliknout na Odeslat žádost. Pokud byl model přihlášen jako vstupní příklad (jak je znázorněno na obrázku výše), klikněte na načíst příklad a načtěte ukázkový výstup.

Skóre prostřednictvím REST API žádosti

Pomocí ověřování Standard datacihlymůžete odeslat žádost o vyhodnocování prostřednictvím REST API. Následující příklady ukazují ověřování pomocí osobního přístupového tokenu.

V MODEL_VERSION_URI takovém případě https://<databricks-instance>/model/iris-classifier/Production/invocations (kde <databricks-instance> je název instance datacihly) a datacihly REST API token nazvaný DATABRICKS_API_TOKEN , tady je několik ukázkových fragmentů, jak zadat dotaz na poskytovaný model:

Bash

Fragment pro dotaz na model, který přijímá vstupy datového rámce.

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

Fragment pro dotaz na model přijímající vstupy tensor Vstupy tensor by se měly formátovat, jak je popsáno v dokumentaci k rozhraní API pro TensorFlow.

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(dataset, pd.DataFrame) else create_tf_serving_json(dataset)
  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

Datovou sadu v Power BI Desktop můžete vyhodnotit pomocí následujících kroků:

  1. Otevřete datovou sadu, kterou chcete skóre.

  2. Přejít na transformovaná data.

  3. Na levém panelu klikněte pravým tlačítkem myši a vyberte vytvořit nový dotaz.

  4. Přejít na zobrazení > rozšířený editor.

  5. Nahraďte tělo dotazu následujícím fragmentem kódu, poté co naplníte příslušnou DATABRICKS_API_TOKEN a MODEL_VERSION_URI .

    (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. Pojmenujte dotaz s požadovaným názvem modelu.

  7. Otevřete rozšířený editor dotazů pro datovou sadu a použijte funkci modelu.

Další informace o formátech vstupních dat přijatých serverem (například PANDAS rozdělený formát) najdete v dokumentaci k MLflow.

Monitorovat obsluhováné modely

Stránka obsluhující zobrazuje indikátory stavu pro cluster obsluhující i jednotlivé verze modelu. Kromě toho můžete k získání dalších informací použít následující:

  • Pokud chcete zkontrolovat stav clusteru obsluhujícího, použijte kartu události modelu , která zobrazuje seznam všech obsluhy událostí pro tento model.
  • Chcete-li zkontrolovat stav jedné verze modelu, použijte karty události protokolů nebo verze na kartě verze modelu .

Stav verze

Události modelu

Přizpůsobení clusteru obsluhujícího

Chcete-li přizpůsobit cluster obsluhující, použijte kartu Nastavení clusteru na kartě obsluha .

Nastavení clusteru

  • Chcete-li upravit velikost paměti a počet jader pro obsluhující cluster, použijte rozevírací nabídku typ instance a vyberte požadovanou konfiguraci clusteru. Když kliknete na Uložit, existující cluster se ukončí a vytvoří se nový cluster se zadaným nastavením.
  • Chcete-li přidat značku, zadejte název a hodnotu do pole Přidat značku a klikněte na tlačítko Přidat.
  • Chcete-li upravit nebo odstranit existující značku, klikněte na jednu z ikon ve sloupci Akce v tabulce značky .