Membuat model kustom yang melayani titik akhir

Artikel ini menjelaskan cara membuat model yang melayani titik akhir yang melayani model kustom menggunakan Databricks Model Serving.

Model Serving menyediakan opsi berikut untuk melayani pembuatan titik akhir:

  • Antarmuka Penyajian
  • REST API
  • Penyebaran SDK MLflow

Untuk membuat titik akhir yang melayani model AI, lihat Membuat model fondasi yang melayani titik akhir.

Persyaratan

  • Ruang kerja Anda harus berada di wilayah yang didukung.
  • Jika Anda menggunakan pustaka kustom atau pustaka dari server cermin privat dengan model Anda, lihat Menggunakan pustaka Python kustom dengan Penyajian Model sebelum Anda membuat titik akhir model.
  • Untuk membuat titik akhir menggunakan SDK Penyebaran MLflow, Anda harus menginstal klien Penyebaran MLflow. Untuk menginstalnya, jalankan:
import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

Identitas dan akses

Untuk membuat atau memperbarui model yang melayani titik akhir, pemanggil dan pembuat rekaman titik akhir harus:

  • Jadilah anggota ruang kerja.
  • workspace-access Pegang hak.

Identitas kreator

Saat Anda membuat endpoint, Databricks mencatat identitas pemanggil sebagai pembuat endpoint. Identitas ini — biasanya perwakilan layanan — digunakan untuk mengakses sumber daya Katalog Unity atas nama titik akhir dan tidak dapat diubah setelah pembuatan.

Jika pembuat yang tercatat tidak memiliki hak akses Unity Catalog yang diperlukan atau telah dihapus dari ruang kerja, Anda harus menghapus endpoint tersebut dan membuatnya kembali menggunakan perwakilan layanan yang memiliki izin yang diperlukan dan saat ini menjadi anggota ruang kerja.

Pembaruan konfigurasi dan entitas tersaji mengevaluasi ulang keanggotaan ruang kerja serta izin akses milik pembuat yang tercatat. Pembaruan gagal dengan PERMISSION_DENIED jika pembuat yang tercatat tidak lagi menjadi anggota ruang kerja, bahkan ketika pemanggil memiliki izin yang valid.

Izin entitas yang dilayani

Pembuat yang tercatat harus memiliki izin akses berikut pada setiap entitas yang dilayani. Grant yang divalidasi saat pembuatan atau pembaruan endpoint akan menyebabkan permintaan gagal dengan PERMISSION_DENIED jika tidak ada. Izin akses yang diperlukan saat kueri dijalankan tidak divalidasi terlebih dahulu — izin akses yang tidak ada menyebabkan kesalahan saat runtime ketika endpoint melayani permintaan.

Jenis sumber daya Pemberian yang diperlukan Ketika divalidasi
model di Unity Catalog USE CATALOG pada katalog, USE SCHEMA pada skema, EXECUTE pada model Pembuatan atau pembaruan titik akhir

Nota

Jika model Unity Catalog mendeklarasikan dependensi fungsi transitif, pembuat yang tercatat juga memerlukan EXECUTE pada fungsi hulu tersebut.

Mengelola akses titik akhir

Untuk memahami opsi kontrol akses untuk model yang melayani titik akhir, lihat Mengelola izin pada model yang melayani titik akhir.

Membuat titik akhir

Melayani UI

Anda dapat membuat endpoint untuk penyajian model dengan Antarmuka Pengguna Penyajian.

  1. Klik Serving di bar samping untuk menampilkan antarmuka pengguna Serving.

  2. Klik Buat titik akhir penayangan.

    Panel penyajian model di antarmuka pengguna Databricks

Untuk model dalam Unity Catalog (disarankan) atau Registri Model Ruang Kerja lama:

  1. Di bidang Nama berikan nama untuk titik akhir Anda.

    • Nama titik akhir tidak dapat menggunakan awalan databricks- . Awalan ini dicadangkan untuk titik akhir Databricks yang telah dikonfigurasi sebelumnya.
  2. Di bagian Entitas yang dilayani

    1. Klik bidang Entitas untuk membuka formulir Pilih entitas yang dilayani .
    2. Pilih Model saya- Unity Catalog atau Model saya- Model Registri berdasarkan tempat model Anda didaftarkan. Formulir diperbarui secara dinamis berdasarkan pilihan Anda.
    3. Pilih model dan versi model mana yang ingin Anda layani.
    4. Pilih persentase lalu lintas yang akan dirutekan ke model yang dilayani.
    5. Pilih komputasi ukuran apa yang akan digunakan. Anda dapat menggunakan komputasi CPU atau GPU untuk beban kerja Anda. Lihat Tipe komputasi untuk jenis beban kerja yang tersedia, termasuk opsi CPU_MEDIUM dan CPU_LARGE untuk model yang memerlukan lebih banyak memori daripada tipe standar CPU. Untuk contoh kode GPU, lihat Jenis beban kerja GPU.
    6. Di bawah Peluasan Skala Komputasi, pilih ukuran peluasan skala komputasi yang sesuai dengan jumlah permintaan yang dapat diproses model yang dilayani ini secara bersamaan. Angka ini harus kira-kira sama dengan waktu proses model QPS x. Untuk pengaturan komputasi yang ditentukan pelanggan, lihat batas penyajian model.
      1. Ukuran yang tersedia adalah Kecil untuk 0-4 permintaan, permintaan Sedang 8-16, dan Besar untuk 16-64 permintaan.
    7. Tentukan apakah titik akhir harus diskalakan ke nol saat tidak digunakan. Skala ke nol tidak disarankan untuk titik akhir produksi, karena kapasitas tidak dijamin ketika diskalakan ke nol. Ketika endpoint diskalakan menjadi nol, terdapat latensi tambahan, yang juga disebut sebagai cold start, ketika endpoint diskalakan kembali untuk melayani permintaan.
    8. Di bawah Konfigurasi tingkat lanjut, Anda dapat:
      • Ganti nama entitas yang dilayani untuk menyesuaikan tampilannya di titik akhir.
      • Tambahkan variabel lingkungan untuk menyambungkan ke sumber daya dari titik akhir Anda atau catat dataFrame pencarian fitur Anda ke tabel inferensi titik akhir. Mencatat pencarian fitur DataFrame memerlukan MLflow 2.14.0 atau lebih tinggi.
    9. (Opsional) Untuk menambahkan entitas tambahan yang dilayani ke titik akhir Anda, klik Tambahkan entitas yang dilayani dan ulangi langkah-langkah konfigurasi di atas. Anda dapat melayani beberapa model atau versi model dari satu titik akhir dan mengontrol pemisahan lalu lintas di antaranya. Lihat melayani beberapa model untuk informasi selengkapnya.
  3. Di bagian Pengoptimalan rute , Anda dapat mengaktifkan pengoptimalan rute untuk titik akhir Anda. Pengoptimalan rute direkomendasikan untuk titik akhir dengan persyaratan QPS dan throughput tinggi. Lihat Pengoptimalan rute pada titik akhir penyajian.

  4. Di bagian Gateway AI , Anda dapat memilih fitur tata kelola mana yang akan diaktifkan di titik akhir Anda. Lihat Tata kelola AI dengan Unity AI Gateway.

  5. Klik Buat. Halaman Titik akhir penayangan muncul dengan status Titik akhir penayangan ditampilkan sebagai Belum Siap.

    Membuat model yang melayani titik akhir

REST API

Anda dapat membuat titik akhir menggunakan REST API. Lihat POST /api/2.0/serving-endpoints untuk parameter konfigurasi titik akhir.

Contoh berikut membuat titik akhir yang melayani versi ketiga model my-ads-model yang terdaftar di registri model Unity Catalog. Untuk menentukan model dari Unity Catalog, berikan nama model lengkap termasuk katalog dan skema induk seperti, catalog.schema.example-model. Contoh ini menggunakan konkurensi yang ditentukan khusus dengan min_provisioned_concurrency dan max_provisioned_concurrency. Nilai konkurensi harus kelipatan 4.


POST /api/2.0/serving-endpoints

{
  "name": "uc-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "name": "ads-entity",
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "3",
        "min_provisioned_concurrency": 4,
        "max_provisioned_concurrency": 12,
        "scale_to_zero_enabled": false
      }
    ]
  }
}

Berikut ini adalah contoh respons. Status endpoint config_update adalah NOT_UPDATING dan model yang dilayani dalam keadaan READY.

{
  "name": "uc-model-endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1700089637000,
  "last_updated_timestamp": 1700089760000,
  "state": {
    "ready": "READY",
    "config_update": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "ads-entity",
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "3",
        "min_provisioned_concurrency": 4,
        "max_provisioned_concurrency": 12,
        "scale_to_zero_enabled": false,
        "workload_type": "CPU",
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "user@email.com",
        "creation_timestamp": 1700089760000
      }
    ],
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "data science"
    }
  ],
  "id": "e3bd3e471d6045d6b75f384279e4b6ab",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

Penyebaran SDK MLflow

Penyebaran MLflow menyediakan API untuk membuat, memperbarui, dan menghapus tugas. API untuk tugas-tugas ini menerima parameter yang sama dengan REST API untuk melayani titik akhir. Lihat POST /api/2.0/serving-endpoints untuk parameter konfigurasi titik akhir.

Contoh berikut membuat titik akhir yang melayani versi ketiga model my-ads-model yang terdaftar di registri model Unity Catalog. Anda harus memberikan nama model lengkap termasuk katalog dan skema induk seperti, catalog.schema.example-model. Contoh ini menggunakan konkurensi yang ditentukan khusus dengan min_provisioned_concurrency dan max_provisioned_concurrency. Nilai konkurensi harus kelipatan 4.

import mlflow
from mlflow.deployments import get_deploy_client

mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")

endpoint = client.create_endpoint(
    name="unity-catalog-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity",
                "entity_name": "catalog.schema.my-ads-model",
                "entity_version": "3",
                "min_provisioned_concurrency": 4,
                "max_provisioned_concurrency": 12,
                "scale_to_zero_enabled": False
            }
        ]
    }
)

Klien Lingkungan Kerja

Contoh berikut menunjukkan cara membuat titik akhir menggunakan Databricks Workspace Client SDK.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput

w = WorkspaceClient()

w.serving_endpoints.create(
    name="uc-model-endpoint",
    config=EndpointCoreConfigInput(
        served_entities=[
            ServedEntityInput(
                name="ads-entity",
                entity_name="catalog.schema.my-ads-model",
                entity_version="3",
                workload_size="Small",
                scale_to_zero_enabled=False
            )
        ]
    )
)

Anda juga dapat:

Anda juga dapat menambahkan variabel lingkungan untuk menyimpan kredensial untuk penyajian model. Lihat Mengonfigurasi akses ke sumber daya dari titik akhir penyajian model

Jenis beban kerja GPU

Penyebaran GPU kompatibel dengan versi paket berikut:

  • PyTorch 1.13.0 - 2.0.1
  • TensorFlow 2.5.0 - 2.13.0
  • MLflow 2.4.0 ke atas

Contoh berikut menunjukkan cara membuat titik akhir GPU menggunakan metode yang berbeda.

Melayani UI

Untuk mengonfigurasi titik akhir Anda untuk beban kerja GPU dengan UI Serving, pilih jenis GPU yang diinginkan dari Jenis Komputasi dropdown saat membuat titik akhir Anda. Ikuti langkah-langkah yang sama di Membuat titik akhir, tetapi pilih jenis beban kerja GPU, bukan CPU.

REST API

Untuk menerapkan model Anda menggunakan GPU, sertakan bidang workload_type dalam konfigurasi titik akhir Anda.

POST /api/2.0/serving-endpoints

{
  "name": "gpu-model-endpoint",
  "config": {
    "served_entities": [{
      "entity_name": "catalog.schema.my-gpu-model",
      "entity_version": "1",
      "workload_type": "GPU_SMALL",
      "workload_size": "Small",
      "scale_to_zero_enabled": false
    }]
  }
}

Penyebaran SDK MLflow

Contoh berikut menunjukkan cara membuat titik akhir GPU menggunakan SDK Penyebaran MLflow.

import mlflow
from mlflow.deployments import get_deploy_client

mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")

endpoint = client.create_endpoint(
    name="gpu-model-endpoint",
    config={
        "served_entities": [{
            "entity_name": "catalog.schema.my-gpu-model",
            "entity_version": "1",
            "workload_type": "GPU_SMALL",
            "workload_size": "Small",
            "scale_to_zero_enabled": False
        }]
    }
)

Klien Lingkungan Kerja

Contoh berikut menunjukkan cara membuat titik akhir GPU menggunakan SDK Klien Ruang Kerja Databricks.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput

w = WorkspaceClient()

w.serving_endpoints.create(
    name="gpu-model-endpoint",
    config=EndpointCoreConfigInput(
        served_entities=[
            ServedEntityInput(
                entity_name="catalog.schema.my-gpu-model",
                entity_version="1",
                workload_type="GPU_SMALL",
                workload_size="Small",
                scale_to_zero_enabled=False
            )
        ]
    )
)

Jenis beban kerja GPU yang tersedia bergantung pada penyedia cloud Anda, seperti yang dirangkum dalam tabel berikut.

Jenis beban kerja GPU Instans GPU Memori GPU
GPU_SMALL 1xT4 16GB
GPU_LARGE 1xA100 80GB
GPU_LARGE_2 2xA100 160GB
GPU_LARGE_4 4xA100 320GB

Untuk titik akhir GPU, nilai konkurensi menentukan jumlah replika yang dialokasikan untuk melayani model Anda. Jumlah replika sama dengan nilai konkurensi dibagi 4. Misalnya, menetapkan min_provisioned_concurrency ke 12 akan menyediakan 3 replika.

Mengubah titik akhir model kustom

Setelah mengaktifkan titik akhir model kustom, Anda dapat memperbarui konfigurasi komputasi sesuai keinginan. Konfigurasi ini sangat membantu jika Anda memerlukan sumber daya tambahan untuk model Anda. Ukuran beban kerja dan konfigurasi komputasi memainkan peran kunci dalam sumber daya apa yang dialokasikan untuk melayani model Anda.

Nota

Pembaruan konfigurasi dan pembaruan entitas tersaji memvalidasi ulang keanggotaan ruang kerja kreator endpoint yang tercatat serta izin untuk setiap entitas tersaji. Pastikan keduanya masih berlaku sebelum mengirimkan pembaruan; lihat Identitas dan akses.

Untuk menghindari kegagalan pembaruan:

  • Gunakan perwakilan layanan berumur panjang yang dimiliki oleh tim Anda sebagai pembuat titik akhir.
  • Jangan gunakan akun pengguna pribadi yang mungkin dinonaktifkan atau dihapus dari ruang kerja nanti.
  • Pembuat yang tercatat harus tetap menjadi anggota ruang kerja selama masa berlaku titik akhir.

Nota

Pembaruan pada konfigurasi titik akhir bisa gagal. Ketika kegagalan terjadi, konfigurasi aktif yang ada tetap efektif seolah-olah pembaruan tidak terjadi.

Verifikasi bahwa pembaruan berhasil diterapkan dengan meninjau status titik akhir Anda.

Hingga konfigurasi baru siap, konfigurasi lama terus melayani lalu lintas prediksi. Meskipun ada pembaruan yang sedang berlangsung, pembaruan lain tidak dapat dilakukan. Namun, Anda dapat membatalkan pembaruan yang sedang berlangsung dari antarmuka pengguna penyajian.

Melayani UI

Setelah Anda mengaktifkan titik akhir model, pilih Edit titik akhir untuk mengubah konfigurasi komputasi titik akhir Anda.

Tombol Edit titik akhir

Anda dapat mengubah sebagian besar aspek konfigurasi titik akhir, kecuali untuk nama titik akhir dan properti tertentu yang tidak dapat diubah.

Anda dapat membatalkan pembaruan konfigurasi yang sedang berlangsung dengan memilih Batalkan pembaruan di halaman detail titik akhir.

REST API

Berikut ini adalah contoh pembaruan konfigurasi titik akhir menggunakan REST API. Lihat PUT /api/2.0/serving-endpoints/{name}/config.


PUT /api/2.0/serving-endpoints/{name}/config

{
  "name": "unity-catalog-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "5",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      }
    ],
    "traffic_config":
    {
      "routes": [
        {
          "served_model_name": "my-ads-model-5",
          "traffic_percentage": 100
        }
      ]
    }
  }
}

Penyebaran SDK MLflow

SDK Penyebaran MLflow menggunakan parameter yang sama dengan REST API, lihat PUT /api/2.0/serving-endpoints/{name}/config untuk detail skema permintaan dan respons.

Sampel kode berikut menggunakan model dari registri model Unity Catalog:

import mlflow
from mlflow.deployments import get_deploy_client

mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")

endpoint = client.update_endpoint_config(
  endpoint=f"{endpointname}",
  config={
    "served_entities": [
        {
            "entity_name": f"{catalog}.{schema}.{model_name}",
            "entity_version": "1",
            "workload_size": "Small",
            "scale_to_zero_enabled": True
        }
    ],
    "traffic_config": {
        "routes": [
            {
                "served_model_name": f"{model_name}-1",
                "traffic_percentage": 100
            }
        ]
    }
  }
)

Menilai titik akhir model

Untuk menilai model Anda, kirim permintaan ke titik akhir penyajian model.

Sumber Daya Tambahan:

Contoh buku catatan

Notebook berikut menyertakan berbagai model terdaftar Databricks yang dapat Anda gunakan untuk memulai dan menjalankan model yang melayani titik akhir. Untuk contoh tambahan, lihat Tutorial: Menyebarkan dan mengkueri model kustom.

Contoh model dapat diimpor ke ruang kerja dengan mengikuti petunjuk dalam Mengimpor buku catatan. Setelah Anda memilih dan membuat model dari salah satu contoh, daftarkan di Katalog Unity, lalu ikuti langkah-langkah alur kerja UI untuk penyajian model.

Melatih dan mendaftarkan model scikit-learn untuk notebook penyajian model

Dapatkan buku catatan

Melatih dan mendaftarkan model HuggingFace untuk model yang melayani notebook

Dapatkan buku catatan