Azure Databricks'da MLflow Modeli Azure Databricks

Önemli

Bu özellik Genel Önizlemededir.

MLflow Model Hizmeti, Model Kayıt Defterinden makine öğrenmesi modellerini model sürümlerinin ve aşamaların kullanılabilirliği temel alarak otomatik olarak güncelleştirilen REST uç noktaları olarak barındırmaya olanak sağlar.

Belirli bir kayıtlı model için model sunan etkinleştiril Azure Databricks model için otomatik olarak benzersiz bir küme oluşturur ve modelin arşivlenmiş olmayan tüm sürümlerini bu kümeye dağıtır. Azure Databricks bir hata oluşursa kümeyi yeniden başlatıyor ve model için model hizmetini devre dışı bırakarak kümeyi sonlandırıyor. Model sunan model, Model Kayıt Defteri ile otomatik olarak eşitlenir ve yeni kayıtlı model sürümlerini dağıtır. Dağıtılan model sürümleri, standart bir REST API sorgulanabiliyor. Azure Databricks, standart kimlik doğrulamasını kullanarak modele yapılan isteklerin kimliğini doğrular.

Bu hizmet önizlemedeyken, Databricks düşük aktarım hızı ve kritik olmayan uygulamalar için kullanımını önermektedir. Hedef aktarım hızı 20 qps ve hedef kullanılabilirlik %99,5'tir, ancak iki durumda da garanti edilemez. Ayrıca istek başına 16 MB yük boyutu sınırı vardır.

Her model sürümü MLflow model dağıtımı kullanılarak dağıtılır ve bağımlılıkları tarafından belirtilen bir Conda ortamında çalışır.

Not

  • Etkin model sürümü mevcut olsa bile, hizmet sunan etkin olduğu sürece küme korunur. Hizmet sunan kümeyi sonlandırmak için, kayıtlı model için model hizmetini devre dışı bırakma.
  • Küme, çok amaçlı iş yükü fiyatlandırması tabi olmak üzere çok amaçlı bir küme olarak kabul edilir.
  • Kümeler hizmette genel init betikleri çalıştırlanmaz.

Gereksinimler

  • MLflow Model Sunma, Python MLflow modellerinde kullanılabilir. Conda ortamındaki tüm model bağımlılıklarını bildirin.
  • Model Hizmeti'ni etkinleştirmek için küme oluşturma izniniz olmalıdır.

Model Kayıt Defterinden model sunan

Model sunan, Model Azure Databricks'den kullanılabilir.

Model hizmetini etkinleştirme ve devre dışı bırakma

Bir modeli kayıtlı model sayfasından hizmet vermeye etkinleştirirsiniz.

  1. Hizmet Veriyor sekmesine tıklayın. Model henüz hizmet vermeye etkinleştirilmemişse, Hizmet Vereni Etkinleştir düğmesi görüntülenir.

    Etkinleştirme düğmesi

  2. Etkinleştirme'ye tıklayın. Hizmet Sunan sekmesi Durum Beklemede olarak görünür. Birkaç dakika sonra Durum Hazır olarak değişir.

Bir modeli hizmet vermeye devre dışı bırakmak için Durdur'a tıklayın.

Model sunanı doğrulama

Hizmet Sunan sekmesinden, sunulan modele bir istek gönderebilir ve yanıtı görüntüleyebilirsiniz.

Hizmet vermeye olanak sağlamak

Model sürümü URL'leri

Dağıtılan her model sürümüne bir veya daha fazla benzersiz URL atanır. En azından, her model sürümüne aşağıdaki gibi oluşturulmuş bir URI atanır:

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

Örneğin, olarak kaydedilen bir modelin 1. sürümünü aramak için iris-classifier şu URI'yi kullanın:

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

Ayrıca bir model sürümünü aşamasına göre çağırarak da çağırarak. Örneğin, sürüm 1 Üretim aşamasında ise, bu URI kullanılarak da puanlandır olabilir:

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

Kullanılabilir model URL'lerinin listesi, hizmet sayfasının Model Sürümleri sekmesinin üst kısmında görünür.

Sunulan sürümleri yönetme

Tüm etkin (arşivlenmiş olmayan) model sürümleri dağıtılır ve URI'leri kullanarak bunları sorguabilirsiniz. Azure Databricks, yeni model sürümlerini kaydedildiklerde otomatik olarak dağıtır ve arşivlenirken eski sürümleri otomatik olarak kaldırır.

Not

Kayıtlı modelin dağıtılan tüm sürümleri aynı kümeyi paylaşır.

Model erişim haklarını yönetme

Model erişim hakları Model Kayıt Defteri'den devralınmış. Hizmet özelliğini etkinleştirmek veya devre dışı bırakmak için kayıtlı modelde 'yönet' izni gerekir. Okuma haklarına sahip olan herkes dağıtılan sürümleri puanlar.

Dağıtılan model sürümlerini puanla

Dağıtılan bir modeli puan almak için kullanıcı arabirimini kullanabilir veya model URI'REST API bir istek göndersiniz.

Kullanıcı arabirimi aracılığıyla puan

Bu, modeli test etmenin en kolay ve en hızlı yolu. Model giriş verilerini JSON biçiminde eklemek ve İstek Gönder'e tıklamak için kullanabilirsiniz. Model bir giriş örneğiyle günlüğe kaydedilmişse (yukarıdaki grafikte gösterildiği gibi), giriş örneğini yüklemek için Örneği Yükle'ye tıklayın.

İstek aracılığıyla REST API puan

Standart Databricks kimlik doğrulamasını kullanarak REST API puanlama isteği gönderebilirsiniz. Aşağıdaki örneklerde kişisel erişim belirteci kullanılarak kimlik doğrulaması gösterilmiştir.

Gibi MODEL_VERSION_URI https://<databricks-instance>/model/iris-classifier/Production/invocations (burada <databricks-instance> Databricksörneğinizin adıdır) ve databricks REST API belirteci olarak verilmiştir. Burada, sunulan modeli sorgulamaya örnek kod parçacıkları DATABRICKS_API_TOKEN verilmiştir:

Bash

Veri çerçevesi girişlerini kabul eden bir modeli sorgulamak için kod parçacığı.

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

Tensor girişlerini kabul eden bir modeli sorgulamak için kod parçacığı. Tensor girişleri, TensorFlow Serving'ın API belgesinde açıklandığı gibi biçimlendirildi.

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

Aşağıdaki adımları kullanarak veri kümelerini Power BI Desktop puanabilirsiniz:

  1. Puan almak istediğiniz veri kümelerini açın.

  2. Verileri Dönüştürme'ye gidin.

  3. Sol panele sağ tıklayın ve Yeni Sorgu Oluştur'u seçin.

  4. Görünüm'e > Gelişmiş Düzenleyici.

  5. Uygun ve yerine doldurduktan sonra sorgu gövdesini aşağıdaki kod parçacığıyla DATABRICKS_API_TOKEN MODEL_VERSION_URI değiştirin.

    (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. Sorguyu istediğiniz model adıyla ad girin.

  7. Veri kümeniz için gelişmiş sorgu düzenleyicisini açın ve model işlevini uygulama.

Sunucu tarafından kabul edilen giriş veri biçimleri (örneğin, pandas bölünmüş odaklı biçim) hakkında daha fazla bilgi için MLflow belgelerine bakın.

Sunulan modelleri izleme

Hizmet sunan sayfasında, hizmet veren kümenin durum göstergelerinin yanı sıra tek tek model sürümleri görüntülenir. Ayrıca, daha fazla bilgi almak için aşağıdakini kullanabilirsiniz:

  • Hizmet veren kümenin durumunu incelemek için, bu model için tüm hizmet olaylarının listesini görüntüleyen Model Olayları sekmesini kullanın.
  • Tek bir model sürümünün durumunu incelemek için Model Sürümleri sekmesindeki Günlükler veya Sürüm Olayları sekmelerini kullanın.

Sürüm durumu

Model olayları

Hizmet veren kümeyi özelleştirme

Hizmet veren kümeyi özelleştirmek için, Hizmet Veren sekmesindeki Küme Ayarları sekmesini kullanın.

Küme ayarları

  • Bir hizmet veren kümenin bellek boyutunu ve çekirdek sayısını değiştirmek için Örnek Türü açılan menüsünü kullanarak istenen küme yapılandırmasını seçin. Kaydet'e tıklarsanız, mevcut küme sonlandırılır ve belirtilen ayarlarla yeni bir küme oluşturulur.
  • Etiket eklemek için Etiket Ekle alanlarına adı ve değeri yazın ve Ekle'ye tıklayın.
  • Mevcut bir etiketi düzenlemek veya silmek için Etiketler tablonun Eylemler sütunundaki simgelerden birini tıklatın.

Bilinen hatalar

ResolvePackageNotFound: pyspark=3.1.0

Modelin bağlı olduğu ve 8.x ile günlüğe Databricks Runtime pyspark bu hata oluşabilir. Bu hatayı görüyorsanız, pyspark parametresini kullanarak modeli günlüğe kaydetme sırasında sürümü açıkça conda_env belirtin.