Model sunucu uç noktalarını yönetme

Bu makalede, Sunum Kullanıcı Arabirimi ve REST API'sini kullanarak model sunum uç noktalarının nasıl yönetileceğini açıklar. Bkz REST API referansında Hizmet uç noktaları.

Model sunma uç noktaları oluşturmak için aşağıdakilerden birini kullanın:

  • Uç noktaları sunan özel model oluşturma.
  • uç noktaları sunan temel model oluşturma.

Model uç noktasının durumunu alma

Hizmet Verme Arabirimini veya REST API, Databricks Çalışma Alanı İstemcisi ya da MLflow Dağıtım SDK'sını kullanarak, programlı olarak bir uç noktanın durumunu kontrol edebilirsiniz.

Uç nokta durumları , , ReadyReady (Update failed), Not ready (Updating)veya Not ready (Update failed)olabilirNot ready (Stopped). Hazır olma, bir uç noktanın sorgulanıp sorgulanamayacağını belirtir. Güncelleme başarısız oldu, bu da uç noktada yapılan en son değişikliğin başarısız olduğunu gösteriyor. Durduruldu, uç noktanın durdurulduğu anlamına gelir.

Kullanıcı Arayüzü (UI)

Uç noktasının ayrıntılar sayfasının üst kısmındaki Serving uç noktası durumu göstergesi:

Serving UI uç noktası ayrıntılarını kullanarak uç noktanın durumunu kontrol edin.

List Endpoints Serving UI'yi kullanarak uç nokta durumunu kontrol edin.

REST API

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

Aşağıdaki örnek yanıtta state.ready , alan "HAZIR" şeklindedir ve bu da uç noktanın trafiği almaya hazır olduğu anlamına gelir. state.update_state alanı NOT_UPDATING ve güncelleştirme başarıyla tamamlandığından pending_config artık döndürülmüyor.

{
  "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 Çalışma Alanı İstemcisi

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 Dağıtımları SDK'sı

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

Uç noktaya hizmet veren bir modeli durdurma

Uç nokta sunan bir modeli geçici olarak durdurabilir ve daha sonra başlatabilirsiniz. Uç nokta durdurulduğunda:

  • Sağlanan kaynaklar devre dışı bırakılır.
  • Uç nokta, yeniden başlatılana kadar sorguları yanıtlayamaz.
  • Yalnızca özel modellere hizmet veren ve devam eden güncelleştirmeleri olmayan uç noktalar durdurulabilir.
  • Durdurulan uç noktalar kaynak kotasına göre sayılmaz.
  • Durdurulan uç noktaya gönderilen sorgular 400 hatası döndürür.

Uç noktayı durdur

Kullanıcı Arayüzü (UI)

Sağ üst köşedeki Durdur'a tıklayın.

Sunum kullanıcı arabirimini kullanarak uç noktaya hizmet veren bir modeli durdurun.

REST API

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

Uç noktayı başlat

Uç noktanın başlatılması, mevcut durdurulan yapılandırmayla aynı özelliklere sahip yeni bir yapılandırma sürümü oluşturur.

Uç noktaya hizmet veren durdurulmuş bir modeli başlatmaya hazır olduğunuzda:

Kullanıcı Arayüzü (UI)

Sağ üst köşedeki Başlat'a tıklayın.

Sunum kullanıcı arabirimini kullanarak uç noktaya hizmet veren bir model başlatın.

REST API

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

Model sunma uç noktasını silme

Uç nokta silindiğinde kullanım devre dışı bırakılır ve uç noktayla ilişkili tüm veriler silinir. Silme işlemini geri alamazsınız.

Kullanıcı Arayüzü (UI)

Üstteki kebap menüsüne tıklayın ve Silöğesini seçin.

Sunum kullanıcı arabirimini kullanarak bir model sunum uç noktasını silin.

REST API

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

MLflow Dağıtımları SDK'sı

from mlflow.deployments import get_deploy_client

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

Uç noktaya hizmet veren modelde hata ayıklama

Sorunları gidermek üzere uç noktalarla ilgili hata ayıklamak için iki tür günlük mevcuttur.

  • Model sunucusu kapsayıcısı derleme günlükleri: Kapsayıcı oluşturulurken uç nokta başlatma sırasında oluşturulur. Bu günlükler modeli indirme, bağımlılıkları yükleme ve çalışma zamanı ortamını yapılandırma gibi kurulum aşamasını yakalar. Bir uç noktanın neden başlatılamadığını veya dağıtım sırasında takıldığını ayıklamak için bu günlükleri kullanın.
  • Model sunucusu günlükleri: Uç nokta etkin bir şekilde tahminler sunarken çalışma zamanı sırasında oluşturulur. Bu günlükler, gelen istekleri, model çıkarım işlemlerini, çalışma zamanı hatalarını ve uygulama düzeyinde günlüğe kaydetme işlemlerini model kodunuzdan yakalar. Tahminlerle ilgili sorunlarda hata ayıklamak veya sorgu hatalarını araştırmak için bu günlükleri kullanın.

Her iki günlük türüne de Günlükler sekmesindeki Uç Noktalar kullanıcı arabiriminden erişilebilir.

Kapsayıcı derleme günlüklerini alma

Sunulan bir modelin derleme günlükleri için aşağıdaki isteği kullanabilirsiniz. Daha fazla bilgi için Model Sunumu için Hata Ayıklama Kılavuzu konusuna bakın.


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

Model sunucu günlüklerini alma

Bir hizmet modelinin model sunucusu günlükleri için aşağıdaki isteği kullanabilirsiniz:


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

{
  "config_version": 1  // optional
}

Uç noktaya hizmet veren bir model üzerindeki izinleri yönetme

İzinleri değiştirmek için hizmet sunma uç noktasında en azından CAN MANAGE iznine sahip olmanız gerekir. İzin düzeyleri hakkında daha fazla bilgi için Uç noktaların ACL'lerini sunma bölümüne bakın.

Sunum uç noktası üzerindeki izinlerin listesini alın.

Kullanıcı Arayüzü (UI)

Kullanıcı arabiriminin sağ üst kısmındaki İzinler düğmesine tıklayın.

Sunum kullanıcı arabirimini kullanarak uç noktaya hizmet veren bir modelin izinlerini yönetin.

Databricks Komut Satırı Arayüzü (CLI)

databricks permissions get serving-endpoints <endpoint-id>

jsmith@example.com numaralı kullanıcıya hizmet etme uç noktasında CAN QUERY izni verin.

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

İzinler API'sini kullanarak uç nokta izinlerinin sunulmasını da değiştirebilirsiniz.

Uç noktaya hizmet veren bir model için sunucusuz kullanım ilkesi ekleme

Önemli

Bu özellik genel önizleme aşamasındadır ve dış modellerine hizmet eden uç noktalar için kullanılamaz.

Sunucusuz kullanım ilkeleri, kuruluşunuzun ayrıntılı faturalama atfı için sunucusuz kullanıma özel etiketler uygulamasına olanak sağlar. Çalışma alanınız sunucusuz kullanımı ilişkilendirmek için sunucusuz kullanım ilkeleri kullanıyorsa, uç noktaları sunan modelinize sunucusuz kullanım ilkesi ekleyebilirsiniz. Bkz . Sunucusuz kullanım ilkeleriyle öznitelik kullanımı.

Model sunum uç noktası oluşturma sırasında, Hizmet Sunma kullanıcı arabirimindeki Bütçe ilkesi menüsünden uç noktanızın sunucusuz kullanım ilkesini seçebilirsiniz. Size atanmış bir sunucusuz kullanım ilkeniz varsa, Bütçe ilkesi menüsünden bir ilke seçmeseniz bile, oluşturduğunuz tüm uç noktalara sunucusuz kullanım ilkesi atanır.

Sunum kullanıcı arabirimini kullanarak uç nokta oluşturma işlemi yapan model sırasında sunucusuz kullanım ilkesi ekleyin.

Mevcut bir uç nokta için izinleriniz MANAGE varsa, kullanıcı arabirimindeki Uç nokta ayrıntıları sayfasından sunucusuz kullanım ilkesini düzenleyebilir ve bu uç noktaya ekleyebilirsiniz.

Sunum kullanıcı arabirimini kullanarak mevcut model sunum uç noktasında sunucusuz kullanım ilkesini düzenleyin.

Not

Size sunucusuz kullanım ilkesi atanmışsa, mevcut uç noktalarınız ilkenizle otomatik olarak etiketlenmez. Sunucusuz kullanım ilkesi eklemek istiyorsanız mevcut uç noktaları el ile güncelleştirmeniz gerekir.

Uç nokta şeması sunan bir model alma

Önemli

Uç nokta sorgu şemalarını sunma desteği Genel Önizleme aşamasındadır. Bu işlev Model Sunma bölgelerinde kullanılabilir.

Sunum uç noktası sorgu şeması, JSON biçiminde standart OpenAPI belirtimi kullanılarak sunulan uç noktanın resmi bir açıklamasıdır. Uç nokta yolu, istek ve yanıt gövdesi biçimi gibi uç noktayı sorgulama ayrıntıları ve her alan için veri türü dahil olmak üzere uç nokta hakkında bilgi içerir. Bu bilgiler, yeniden üretilebilirlik senaryolarında veya uç nokta hakkında bilgiye ihtiyacınız olduğunda yararlı olabilir, ancak özgün uç nokta oluşturucusu veya sahibi değilsiniz.

Model hizmet uç nokta şemasını almak için, sunulan modelin günlüğe kaydedilmiş bir model imzasına sahip olması ve uç noktanın READY durumunda olması gerekir.

Aşağıdaki örnekler, REST API kullanarak uç nokta şeması sunan modelin program aracılığıyla nasıl alınduğunu gösterir. Özellik sunma uç noktası şemaları için bkz. Özellik Sunma uç noktaları.

API tarafından döndürülen şema, OpenAPI belirtimini izleyen bir JSON nesnesi biçimindedir.


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"

Şema yanıtı ayrıntıları

Yanıt, genellikle , openapiinfo ve serversgibi pathsalanlar da dahil olmak üzere JSON biçiminde bir OpenAPI belirtimidir. Şema yanıtı bir JSON nesnesi olduğundan, bunu ortak programlama dillerini kullanarak ayrıştırabilir ve üçüncü taraf araçları kullanarak belirtimden istemci kodu oluşturabilirsiniz. OpenAPI belirtimini Swagger Editor gibi üçüncü taraf araçları kullanarak da görselleştirebilirsiniz.

Yanıtın ana alanları şunlardır:

  • alanında info.title , sunum uç noktasının adı gösterilir.
  • Alanı servers her zaman bir nesne içerir; genellikle url uç noktanın temel URL'si olan alan.
  • Yanıttaki paths nesne, bir uç nokta için desteklenen tüm yolları içerir. Nesnedeki anahtarlar yol URL'leridir. Her path biri birden çok giriş biçimi destekleyebilir. Bu girişler alanda oneOf listelenir.

Aşağıda örnek bir uç nokta şeması yanıtı verilmiştir:

{
  "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"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}