MLflow-model serving op Azure Databricks

Belangrijk

Deze functie is beschikbaar als openbare preview.

Met MLflow Model Serving kunt u machine learning-modellen uit het modelregister hosten als REST-eindpunten die automatisch worden bijgewerkt op basis van de beschikbaarheid van modelversies en hun fasen.

Wanneer u het bedienen van modellen inschakelen voor een bepaald geregistreerd model, maakt Azure Databricks automatisch een uniek cluster voor het model en implementeert alle niet-gearchiveerde versies van het model op dat cluster. Azure Databricks start het cluster opnieuw op als er een fout optreedt en beëindigt het cluster wanneer u de modelservice voor het model uit schakelen. Modelregistratie wordt automatisch gesynchroniseerd met het modelregister en nieuwe geregistreerde modelversies worden geïmplementeerd. Geïmplementeerde modelversies kunnen worden opgevraagd met een standaard REST API aanvraag. Azure Databricks verifieert aanvragen voor het model met behulp van de standaardverificatie.

Hoewel deze service in preview is, raadt Databricks het gebruik aan voor toepassingen met lage doorvoer en niet-kritieke toepassingen. De doeldoorvoer is 200 qps en de doelbeschikbaarheid is 99,5%, hoewel voor beide geen enkele garantie wordt gedaan. Daarnaast is er een limiet voor de nettoladinggrootte van 16 MB per aanvraag.

Elke modelversie wordt geïmplementeerd met behulp van de implementatie van het MLflow-model en wordt uitgevoerd in een Conda-omgeving die is opgegeven door de afhankelijkheden ervan.

Notitie

  • Het cluster wordt onderhouden zolang de uitvoering is ingeschakeld, zelfs als er geen actieve modelversie bestaat. Als u het cluster wilt beëindigen, schakelt u de modelservice voor het geregistreerde model uit.
  • Het cluster wordt beschouwd als een cluster voor alle doeleinden, afhankelijk van de workloadprijzen voor alle doeleinden.
  • Globale init-scripts worden niet uitgevoerd op het bedienen van clusters.

Vereisten

Modellen bedienen vanuit het modelregister

Het bedienen van modellen is beschikbaar in Azure Databricks van het modelregister.

Het bedienen van modellen in- en uitschakelen

U kunt een model inschakelen voor het bedienen vanaf de geregistreerde modelpagina.

  1. Klik op het tabblad Serving. Als het model nog niet is ingeschakeld voor het bedienen, wordt de knop Bedienen inschakelen weergegeven.

    Knop Voor bedienen inschakelen

  2. Klik op Enable Serving. Het tabblad Bedienen wordt weergegeven met de status In behandeling. Na enkele minuten wordt de Status gewijzigd in Gereed.

Als u een model wilt uitschakelen voor het bedienen, klikt u op Stoppen.

Model serving valideren

Op het tabblad Bedienen kunt u een aanvraag verzenden naar het model dat wordt gebruikt en het antwoord bekijken.

Bedienen inschakelen

Modelversie-URI's

Aan elke geïmplementeerde modelversie worden een of meer unieke URI's toegewezen. Aan elke modelversie wordt minimaal een URI toegewezen die als volgt is samengesteld:

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

Als u bijvoorbeeld versie 1 wilt aanroepen van een model dat is geregistreerd als iris-classifier , gebruikt u deze URI:

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

U kunt ook een modelversie aanroepen op de fase. Als versie 1 zich bijvoorbeeld in de fase Productie, kan deze ook worden scoren met behulp van deze URI:

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

De lijst met beschikbare model-URI's wordt weergegeven boven aan het tabblad Modelversies op de pagina voor het bedienen.

Bediende versies beheren

Alle actieve (niet-gearchiveerde) modelversies worden geïmplementeerd en u kunt er query's op uitvoeren met behulp van de URI's. Azure Databricks implementeert automatisch nieuwe modelversies wanneer ze zijn geregistreerd en verwijdert automatisch oude versies wanneer ze worden gearchiveerd.

Notitie

Alle geïmplementeerde versies van een geregistreerd model delen hetzelfde cluster.

Modeltoegangsrechten beheren

Modeltoegangsrechten worden overgenomen van het modelregister. Voor het in- of uitschakelen van de functie voor het bedienen is de machtiging 'beheren' vereist voor het geregistreerde model. Iedereen met leesrechten kan een van de geïmplementeerde versies scoren.

Geïmplementeerde modelversies scoren

Als u een geïmplementeerd model wilt scoren, kunt u de gebruikersinterface gebruiken of een REST API verzenden naar de model-URI.

Scoren via gebruikersinterface

Dit is de eenvoudigste en snelste manier om het model te testen. U kunt de modelinvoergegevens invoegen in JSON-indeling en op Aanvraag verzenden klikken. Als het model is vastgelegd met een invoervoorbeeld (zoals weergegeven in de bovenstaande afbeelding), klikt u op Voorbeeld laden om het invoervoorbeeld te laden.

Scoren via REST API-aanvraag

U kunt een scoreaanvraag verzenden via de REST API met behulp van standaard Databricks-verificatie. In de onderstaande voorbeelden wordt verificatie met behulp van een persoonlijk toegang token gedemonstreerd.

Gezien een like (waarbij de naam is van uw MODEL_VERSION_URI https://<databricks-instance>/model/iris-classifier/Production/invocations <databricks-instance> Databricks-exemplaar) en een Databricks REST API-token met de naam , vindt u hier enkele voorbeeldfragmenten van het uitvoeren van een query op een bepaald DATABRICKS_API_TOKEN model:

Bash

Fragment om een query uit te voeren op een model dat gegevensframeinvoer accepteert.

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 om een query uit te voeren op een model dat tensorinvoer accepteert. Tensor-invoer moet zijn opgemaakt zoals beschreven in API-documenten van TensorFlow Serving.

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

U kunt een gegevensset in Power BI Desktop met behulp van de volgende stappen:

  1. Open de gegevensset die u wilt scoren.

  2. Ga naar Gegevens transformeren.

  3. Klik met de rechtermuisknop in het linkerpaneel en selecteer Nieuwe query maken.

  4. Ga naar Weergave > Geavanceerde editor.

  5. Vervang de query-body door het onderstaande codefragment, nadat u een geschikt en DATABRICKS_API_TOKEN MODEL_VERSION_URI invult.

    (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. Noem de query de naam van het gewenste model.

  7. Open de geavanceerde queryeditor voor uw gegevensset en pas de modelfunctie toe.

Zie de MLflow-documentatievoor meer informatie over invoergegevensindelingen die door de server worden geaccepteerd (bijvoorbeeld pandas split-oriented format).

Bediende modellen bewaken

Op de pagina voor het bedienen worden statusindicatoren weergegeven voor het cluster dat wordt gebruikt, evenals afzonderlijke modelversies. Bovendien kunt u het volgende gebruiken om meer informatie te verkrijgen:

  • Als u de status van het cluster wilt controleren, gebruikt u het tabblad Modelgebeurtenissen, waarin een lijst met alle gebeurtenissen voor dit model wordt weergegeven.
  • Als u de status van één modelversie wilt controleren, gebruikt u de tabbladen Logboeken of Versiegebeurtenissen op het tabblad Modelversies.

Versiestatus

Modelgebeurtenissen

Het cluster voor het leveren van gegevens aanpassen

Als u het cluster wilt aanpassen, gebruikt u het tabblad Cluster Instellingen op het tabblad Serving .

Clusterinstellingen

  • Als u de geheugengrootte en het aantal kernen van een bedienend cluster wilt wijzigen, gebruikt u de vervolgkeuzelijst Instantietype om de gewenste clusterconfiguratie te selecteren. Wanneer u op Opslaan klikt, wordt het bestaande cluster beëindigd en wordt er een nieuw cluster gemaakt met de opgegeven instellingen.
  • Als u een tag wilt toevoegen, typt u de naam en waarde in de velden Tag toevoegen en klikt u op Toevoegen.
  • Als u een bestaande tag wilt bewerken of verwijderen, klikt u op een van de pictogrammen in de kolom Acties van de tabel Tags.

Bekende fouten

ResolvePackageNotFound: pyspark=3.1.0

Deze fout kan optreden als een model afhankelijk is van en wordt geregistreerd met pyspark Databricks Runtime 8.x. Als deze fout wordt weergegeven, geeft u de versie expliciet op bij het registreren van pyspark het model met behulp van de conda_env parameter.