Arsitektur

TensorFlow Serving adalah sistem penyajian yang fleksibel dan berperforma tinggi untuk model pembelajaran mesin, yang dirancang untuk lingkungan produksi. TensorFlow Serving memudahkan penerapan algoritme dan eksperimen baru, sekaligus mempertahankan arsitektur server dan API yang sama. TensorFlow Serving menyediakan integrasi langsung dengan model TensorFlow, namun dapat dengan mudah diperluas untuk melayani jenis model lainnya.

Konsep Utama

Untuk memahami arsitektur TensorFlow Serving, Anda perlu memahami konsep utama berikut:

Dapat diservis

Servable adalah abstraksi utama dalam TensorFlow Serving. Servable adalah objek dasar yang digunakan klien untuk melakukan komputasi (misalnya, pencarian atau inferensi).

Ukuran dan granularitas dari Servable bersifat fleksibel. Satu Servable dapat mencakup apa saja, mulai dari satu pecahan tabel pencarian, satu model, hingga serangkaian model inferensi. Servable dapat berupa jenis dan antarmuka apa pun, sehingga memungkinkan fleksibilitas dan peningkatan di masa mendatang seperti:

  • hasil streaming
  • API eksperimental
  • mode operasi asinkron

Servable tidak mengatur siklus hidupnya sendiri.

Servis yang umum meliputi hal berikut:

  • TensorFlow SavedModelBundle ( tensorflow::Session )
  • tabel pencarian untuk penyematan atau pencarian kosakata

Versi yang Dapat Diservis

TensorFlow Serving dapat menangani satu atau beberapa versi servable selama masa pakai satu instance server. Hal ini memungkinkan konfigurasi algoritme baru, bobot, dan data lainnya dimuat seiring waktu. Versi memungkinkan lebih dari satu versi server yang dapat dimuat secara bersamaan, mendukung peluncuran dan eksperimen bertahap. Pada waktu penayangan, klien dapat meminta versi terbaru atau id versi tertentu, untuk model tertentu.

Aliran yang Dapat Diservis

Aliran yang dapat diservis adalah urutan versi dari suatu aliran yang dapat diservis, diurutkan berdasarkan peningkatan nomor versi.

Model

TensorFlow Serving merepresentasikan model sebagai satu atau beberapa yang dapat diservis. Model pembelajaran mesin dapat mencakup satu atau lebih algoritme (termasuk bobot yang dipelajari) dan tabel pencarian atau penyematan.

Anda dapat merepresentasikan model komposit sebagai salah satu dari berikut ini:

  • beberapa server independen
  • komposit tunggal yang dapat diservis

Sebuah servis mungkin juga berhubungan dengan sebagian kecil dari suatu model. Misalnya, tabel pencarian berukuran besar dapat dibagi ke banyak instance TensorFlow Serving.

Loader

Loader mengelola siklus hidup yang dapat diservis. Loader API memungkinkan infrastruktur umum yang independen dari algoritma pembelajaran tertentu, data atau kasus penggunaan produk yang terlibat. Secara khusus, Loader menstandarkan API untuk memuat dan membongkar muatan yang dapat diservis.

Sumber

Sumber adalah modul plugin yang menemukan dan menyediakan layanan. Setiap Sumber menyediakan nol atau lebih aliran yang dapat diservis. Untuk setiap aliran yang dapat diservis, Sumber menyediakan satu instans Loader untuk setiap versi yang tersedia untuk dimuat. (Sumber sebenarnya dirangkai bersama dengan nol atau lebih SourceAdapters, dan item terakhir dalam rantai memancarkan Loader.)

Antarmuka TensorFlow Serving untuk Sumber dapat menemukan server yang dapat diservis dari sistem penyimpanan arbitrer. TensorFlow Serving mencakup implementasi Sumber referensi umum. Misalnya, Sumber dapat mengakses mekanisme seperti RPC dan dapat melakukan polling pada sistem file.

Sumber dapat mempertahankan status yang dibagikan ke beberapa server atau versi. Ini berguna untuk server yang menggunakan pembaruan delta (diff) antar versi.

Versi yang Dicita-citakan

Versi yang dicita-citakan mewakili kumpulan versi yang dapat diservis yang harus dimuat dan siap. Sumber mengomunikasikan kumpulan versi yang dapat diservis ini untuk satu aliran yang dapat diservis dalam satu waktu. Ketika Sumber memberikan daftar baru versi yang diinginkan kepada Manajer, Sumber tersebut menggantikan daftar sebelumnya untuk aliran yang dapat diservis tersebut. Manajer membongkar versi apa pun yang dimuat sebelumnya yang tidak lagi muncul dalam daftar.

Lihat tutorial lanjutan untuk melihat cara kerja pemuatan versi dalam praktiknya.

Manajer

Manajer menangani seluruh siklus hidup Servable, termasuk:

  • memuat Servable
  • menyajikan Servable
  • membongkar Servable

Manajer mendengarkan Sumber dan melacak semua versi. Manajer mencoba memenuhi permintaan Sumber, namun mungkin menolak memuat versi yang diinginkan jika, misalnya, sumber daya yang diperlukan tidak tersedia. Manajer juga dapat menunda “pembongkaran”. Misalnya, Manajer mungkin menunggu untuk membongkar hingga versi yang lebih baru selesai memuat, berdasarkan kebijakan untuk menjamin bahwa setidaknya satu versi dimuat setiap saat.

TensorFlow Serving Managers menyediakan antarmuka yang sederhana dan sempit -- GetServableHandle() -- agar klien dapat mengakses instance yang dapat diservis dan dimuat.

Inti

Dengan menggunakan TensorFlow Serving API standar, TensorFlow Serving Core mengelola aspek-aspek yang dapat diservable berikut:

  • lingkaran kehidupan
  • metrik

TensorFlow Serving Core memperlakukan servable dan loader sebagai objek buram.

Kehidupan yang Dapat Diservis

tf menyajikan diagram arsitektur

Pada umumnya:

  1. Sumber membuat Loader untuk Versi yang Dapat Diservis.
  2. Loader dikirim sebagai Versi yang Dicita-citakan ke Manajer, yang memuat dan menyajikannya sesuai permintaan klien.

Lebih detailnya:

  1. Plugin Sumber membuat Loader untuk versi tertentu. Loader berisi metadata apa pun yang diperlukan untuk memuat Servable.
  2. Sumber menggunakan panggilan balik untuk memberi tahu Manajer tentang Versi yang Dicita-citakan.
  3. Manajer menerapkan Kebijakan Versi yang dikonfigurasi untuk menentukan tindakan selanjutnya yang harus diambil, yang dapat berupa membongkar versi yang dimuat sebelumnya atau memuat versi baru.
  4. Jika Manajer menentukan bahwa versi tersebut aman, Manajer akan memberikan sumber daya yang diperlukan kepada Loader dan memerintahkan Loader untuk memuat versi baru.
  5. Klien meminta Manajer untuk Servable, baik menentukan versi secara eksplisit atau hanya meminta versi terbaru. Manajer mengembalikan pegangan untuk Servable.

Misalnya, Sumber mewakili grafik TensorFlow dengan bobot model yang sering diperbarui. Bobot disimpan dalam file di disk.

  1. Sumber mendeteksi versi baru dari bobot model. Ini menciptakan Loader yang berisi pointer ke data model pada disk.
  2. Sumber memberi tahu Manajer Dinamis tentang Versi yang Dicita-citakan.
  3. Manajer Dinamis menerapkan Kebijakan Versi dan memutuskan untuk memuat versi baru.
  4. Manajer Dinamis memberi tahu Loader bahwa terdapat cukup memori. Loader membuat instance grafik TensorFlow dengan bobot baru.
  5. Klien meminta pegangan ke versi model terbaru, dan Manajer Dinamis mengembalikan pegangan ke versi baru dari Servable.

Kemungkinan diperpanjang

TensorFlow Serving menyediakan beberapa titik ekstensi tempat Anda dapat menambahkan fungsi baru.

Kebijakan Versi

Kebijakan Versi menentukan urutan pemuatan dan pembongkaran versi dalam satu aliran yang dapat diservis.

TensorFlow Serving mencakup dua kebijakan yang mengakomodasi sebagian besar kasus penggunaan yang diketahui. Ini adalah Kebijakan Pelestarian Ketersediaan (hindari membiarkan versi nol dimuat; biasanya memuat versi baru sebelum membongkar versi lama), dan Kebijakan Pelestarian Sumber Daya (hindari memuat dua versi secara bersamaan, sehingga memerlukan sumber daya dua kali lipat; membongkar versi lama sebelum memuat yang baru). Untuk penggunaan TensorFlow Serving yang sederhana ketika ketersediaan penyajian suatu model penting dan biaya sumber dayanya rendah, Kebijakan Pelestarian Ketersediaan akan memastikan bahwa versi baru dimuat dan siap sebelum membongkar versi lama. Untuk penggunaan TensorFlow Serving yang canggih, misalnya mengelola versi di beberapa instance server, Kebijakan Pelestarian Sumber Daya memerlukan sumber daya paling sedikit (tidak ada buffer tambahan untuk memuat versi baru).

Sumber

Sumber Baru dapat mendukung sistem file baru, penawaran cloud, dan backend algoritma. TensorFlow Serving menyediakan beberapa elemen dasar umum untuk mempermudah & mempercepat pembuatan sumber baru. Misalnya, TensorFlow Serving menyertakan utilitas untuk menggabungkan perilaku polling dengan sumber sederhana. Sumber terkait erat dengan Loader untuk algoritma tertentu dan server data hosting.

Lihat dokumen Sumber Kustom untuk mengetahui selengkapnya tentang cara membuat Sumber kustom.

Loader

Loader adalah titik ekstensi untuk menambahkan algoritma dan backend data. TensorFlow adalah salah satu backend algoritma tersebut. Misalnya, Anda akan mengimplementasikan Loader baru untuk memuat, menyediakan akses, dan membongkar instance model pembelajaran mesin tipe baru yang dapat diservis. Kami mengantisipasi pembuatan Loader untuk tabel pencarian dan algoritma tambahan.

Lihat dokumen Custom Servable untuk mempelajari cara membuat custom servable.

Pengumpul

Pengelompokan beberapa permintaan menjadi satu permintaan dapat mengurangi biaya pelaksanaan inferensi secara signifikan, terutama dengan adanya akselerator perangkat keras seperti GPU. TensorFlow Serving menyertakan widget pengelompokan permintaan yang memungkinkan klien dengan mudah mengelompokkan inferensi spesifik jenis di seluruh permintaan menjadi permintaan batch sehingga sistem algoritme dapat memprosesnya dengan lebih efisien. Lihat Panduan Batching untuk informasi lebih lanjut.