Mengelola titik akhir penyajian model

Artikel ini menjelaskan cara mengelola model yang melayani titik akhir menggunakan Antarmuka Pengguna Penyajian dan REST API. Lihat Menyajikan titik akhir dalam referensi REST API.

Untuk membuat titik akhir penyajian model, gunakan salah satu hal berikut:

Dapatkan status titik akhir model

Anda dapat memeriksa status titik akhir menggunakan Antarmuka Pengguna penyajian atau secara terprogram menggunakan REST API, Klien Ruang Kerja Databricks, atau SDK Penyebaran MLflow.

Status titik akhir dapat berupa Ready, , Ready (Update failed), Not ready (Updating)Not ready (Update failed), atau Not ready (Stopped). Kesiapan mengacu pada apakah endpoint dapat diakses atau tidak. Pembaruan gagal menandakan bahwa perubahan terbaru pada titik akhir belum berhasil. Dihentikan berarti titik akhir dihentikan.

Antarmuka Pengguna

Indikator Status titik akhir penyajian di bagian atas halaman detail titik akhir:

Periksa status titik akhir menggunakan detail titik akhir di UI Penyajian.

Periksa status titik akhir menggunakan UI Penyajian daftar titik akhir.

REST API

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

Dalam contoh respons berikut, state.ready bidangnya adalah "SIAP", yang berarti titik akhir siap untuk menerima lalu lintas. Bidang state.update_state adalah NOT_UPDATING dan pending_config tidak lagi dikembalikan karena pembaruan berhasil diselesaikan.

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

Klien Ruang Kerja Databricks

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

SDK Penggelaran MLflow

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

Menghentikan model yang melayani titik akhir

Anda dapat menghentikan sementara model yang melayani titik akhir dan memulainya nanti. Saat titik akhir dihentikan:

  • Sumber daya yang disediakan untuknya dimatikan.
  • Endpoint tidak dapat melayani kueri sampai dimulai ulang.
  • Hanya titik akhir yang melayani model kustom dan tidak memiliki pembaruan yang sedang berlangsung dapat dihentikan.
  • Titik akhir yang dihentikan tidak dihitung terhadap kuota sumber daya.
  • Kueri yang dikirim ke endpoint yang dihentikan mengembalikan kesalahan 400.

Menghentikan titik akhir

Antarmuka Pengguna

Klik Berhenti di sudut kanan atas.

Matikan titik akhir model penyajian menggunakan Antarmuka Pengguna Penyajian.

REST API

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

Memulai titik akhir

Memulai sebuah titik akhir membuat versi konfigurasi baru dengan properti yang sama seperti konfigurasi yang telah dihentikan sebelumnya.

Ketika Anda siap untuk memulai ulang layanan titik akhir dari model yang sebelumnya dihentikan:

Antarmuka Pengguna

Klik Mulai di sudut kanan atas.

Mulai titik akhir penyajian model menggunakan UI Penyajian.

REST API

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

Menghapus titik akhir pengoperasian model

Menghapus titik akhir menonaktifkan penggunaan dan menghapus semua data yang terkait dengan titik akhir. Anda tidak dapat membatalkan penghapusan.

Antarmuka Pengguna

Klik menu kebab di bagian atas dan pilih Hapus.

Menghapus endpoint penyajian model menggunakan UI Penyajian.

REST API

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

SDK Penggelaran MLflow

from mlflow.deployments import get_deploy_client

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

Men-debug model yang melayani titik akhir

Dua jenis log tersedia untuk membantu men-debug masalah dengan titik akhir:

  • Log build kontainer server model: Dihasilkan selama proses inisialisasi endpoint ketika kontainer sedang dalam proses dibuat. Log ini menangkap fase penyiapan termasuk mengunduh model, menginstal dependensi, dan mengonfigurasi lingkungan runtime. Gunakan log ini untuk men-debug mengapa titik akhir gagal dimulai atau macet selama penyebaran.
  • Model server logs: Dihasilkan selama runtime ketika server model secara aktif melayani prediksi. Log ini menangkap permintaan masuk, eksekusi inferensi model, kesalahan runtime, dan pengelogan tingkat aplikasi dari kode model Anda. Gunakan log ini untuk men-debug masalah dengan prediksi atau menyelidiki kegagalan kueri.

Kedua jenis log juga dapat diakses dari antarmuka pengguna Titik Akhir di tab Log .

Mendapatkan log build kontainer

Untuk log build dari model yang dilayani, Anda dapat menggunakan permintaan berikut. Lihat Panduan Debugging untuk Penyajian Model untuk informasi lebih lanjut.


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

Mendapatkan log server model

Untuk log server model untuk model layanan, Anda dapat menggunakan permintaan berikut:


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

{
  "config_version": 1  // optional
}

Mengelola izin pada titik akhir penyajian model

Anda harus memiliki setidaknya izin CAN MANAGE pada titik akhir penyajian untuk mengubah izin. Untuk informasi selengkapnya tentang tingkat izin, lihat ACL pada titik akhir.

Dapatkan daftar izin di titik akhir layanan.

Antarmuka Pengguna

Klik tombol Izin di kanan atas UI.

Mengelola izin model yang melayani titik akhir menggunakan Antarmuka Pengguna penyajian.

Databricks CLI (antarmuka baris perintah)

databricks permissions get serving-endpoints <endpoint-id>

Berikan pengguna jsmith@example.com izin CAN QUERY pada titik akhir penyajian.

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

Anda juga dapat memodifikasi izin titik akhir penyajian menggunakan API Izin.

Menambahkan kebijakan penggunaan tanpa server untuk model yang melayani titik akhir

Penting

Fitur ini ada di Pratinjau Umum dan tidak tersedia untuk titik akhir yang melayani model Eksternal.

Kebijakan penggunaan tanpa server memungkinkan organisasi Anda menerapkan tag kustom pada penggunaan tanpa server untuk atribusi penagihan terperinci. Jika ruang kerja Anda menggunakan kebijakan penggunaan tanpa server untuk mengaitkan penggunaan tanpa server, Anda dapat menambahkan kebijakan penggunaan tanpa server ke titik akhir penyajian model Anda. Lihat Penggunaan atribut dengan kebijakan penggunaan tanpa server.

Selama pembuatan titik akhir penyajian model, Anda dapat memilih kebijakan penggunaan tanpa server titik akhir anda dari menu Kebijakan anggaran di Antarmuka Pengguna penayangan. Jika Anda memiliki kebijakan penggunaan tanpa server yang ditetapkan untuk Anda, semua titik akhir yang Anda buat diberi kebijakan penggunaan tanpa server tersebut, bahkan jika Anda tidak memilih kebijakan dari menu Kebijakan anggaran .

Tambahkan kebijakan penggunaan tanpa server selama pembuatan titik akhir penyajian model menggunakan Antarmuka pengguna Penyajian.

Jika Anda memiliki MANAGE izin untuk titik akhir yang sudah ada, Anda dapat mengedit dan menambahkan kebijakan penggunaan tanpa server ke titik akhir tersebut dari halaman Detail titik akhir di UI.

Edit kebijakan penggunaan tanpa server pada model yang sudah ada yang melayani titik akhir menggunakan Antarmuka pengguna Penyajian.

Nota

Jika Anda telah diberi kebijakan penggunaan tanpa server, titik akhir yang ada tidak secara otomatis ditandai dengan kebijakan Anda. Anda harus memperbarui titik akhir yang ada secara manual jika Anda ingin melampirkan kebijakan penggunaan tanpa server ke titik akhir tersebut.

Mendapatkan model yang melayani skema titik akhir

Penting

Dukungan untuk melayani skema kueri titik akhir ada di Pratinjau Umum. Fungsionalitas ini tersedia di wilayah Model Serving.

Skema kueri titik akhir penyajian adalah deskripsi formal tentang titik akhir penyajian menggunakan spesifikasi OpenAPI standar dalam format JSON. Ini berisi informasi tentang titik akhir termasuk jalur titik akhir, detail untuk mengkueri titik akhir seperti format isi permintaan dan respons, dan jenis data untuk setiap bidang. Informasi ini dapat membantu untuk skenario reproduksi atau ketika Anda memerlukan informasi tentang titik akhir, tetapi Anda bukan pembuat atau pemilik titik akhir asli.

Untuk mendapatkan skema titik akhir penyajian model, model yang disajikan harus memiliki tanda tangan model yang dicatat dan titik akhir harus dalam keadaan READY.

Contoh berikut menunjukkan cara mendapatkan model yang melayani skema titik akhir secara terprogram menggunakan REST API. Untuk fitur yang melayani skema titik akhir, lihat Fitur Melayani titik akhir.

Skema yang dikembalikan oleh API dalam format objek JSON yang mengikuti spesifikasi OpenAPI.


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"

Detail-detail tanggapan skema

Responsnya adalah spesifikasi OpenAPI dalam format JSON, biasanya termasuk bidang seperti openapi, info, servers dan paths. Karena respons skema adalah objek JSON, Anda dapat mengurainya menggunakan bahasa pemrograman umum, dan menghasilkan kode klien dari spesifikasi menggunakan alat pihak ketiga. Anda juga dapat memvisualisasikan spesifikasi OpenAPI menggunakan alat pihak ketiga seperti Swagger Editor.

Bidang utama respons meliputi:

  • Bidang info.title memperlihatkan nama titik akhir penyajian.
  • Bidang servers selalu berisi satu objek, biasanya url bidang yang merupakan url dasar titik akhir.
  • Objek paths dalam respons berisi semua jalur yang didukung untuk titik akhir. Kunci dalam objek adalah URL jalur. Masing-masing path dapat mendukung beberapa format input. Input ini tercantum di oneOf bidang .

Berikut ini adalah contoh respons skema titik akhir:

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