aliran tensor:: porsi:: Pemuat
Ini adalah kelas abstrak.#include <loader.h>
Abstraksi standar untuk objek yang mengelola siklus hidup servable, termasuk memuat dan membongkarnya.
Ringkasan
Servables adalah objek arbitrer yang melayani algoritma atau data yang sering, meskipun tidak harus, menggunakan model yang dipelajari mesin.
Sebuah Loader untuk objek servable merupakan satu contoh dari aliran versi servable, semua berbagi nama umum (misalnya "my_servable") dan meningkatkan nomor versi, biasanya mewakili parameter model diperbarui belajar dari data pelatihan segar.
Sebuah Loader harus mulai dalam keadaan diturunkan, yang berarti bahwa tidak ada pekerjaan yang telah dilakukan untuk mempersiapkan untuk melakukan operasi. Instance tipikal yang belum dimuat hanya berisi penunjuk ke lokasi dari mana datanya dapat dimuat (mis. jalur sistem file atau lokasi jaringan). Konstruksi dan penghancuran instance harus cukup murah. Operasi mahal inisialisasi harus dilakukan dalam Beban () .
Subclass mungkin opsional menyimpan pointer ke Sumber yang berasal itu, untuk mengakses negara bersama di beberapa objek servable dalam aliran servable diberikan.
Implementasi perlu memastikan bahwa metode yang mereka ekspos adalah thread-safe, atau dengan hati-hati mendokumentasikan dan/atau mengoordinasikan properti thread-safety mereka dengan klien mereka untuk memastikan kebenarannya. Servables tidak perlu khawatir tentang pelaksanaan bersamaan dari beban () / Unload () sebagai pemanggil akan memastikan bahwa tidak terjadi.
Warisan
Langsung Dikenal Subclass: tensorflow :: melayani :: ResourceUnsafeLoaderKonstruktor dan Destructor | |
---|---|
~Loader () Destructor akan pernah disebut pada Loader yang servable saat ini dimuat, yaitu |
Fungsi publik | |
---|---|
EstimateResources (ResourceAllocation *estimate) const =0 | virtual Status Memperkirakan sumber daya yang akan digunakan oleh servable. |
Load () | virtual Status Menjemput data bahwa kebutuhan akan dimuat sebelum menggunakan servable dikembalikan oleh servable () . |
LoadWithMetadata (const Metadata & metadata) | virtual Status Mirip dengan metode di atas, tetapi mengambil Metadata sebagai param, yang dapat digunakan oleh implementasi loader tepat. |
Unload ()=0 | virtual void Membebaskan sumber daya yang dialokasikan selama Beban () (kecuali mungkin untuk berbagi sumber daya di seluruh servables yang masih diperlukan untuk yang aktif lainnya). |
servable ()=0 | virtual AnyPtr Mengembalikan antarmuka buram ke objek servable yang mendasarinya. |
Struktur | |
---|---|
tensorflow :: melayani :: Loader :: Metadata | Metadata terdiri dari ServableId. |
Fungsi publik
PerkirakanSumber Daya
virtual Status EstimateResources( ResourceAllocation *estimate ) const =0
Memperkirakan sumber daya yang akan digunakan oleh servable.
PENTING: Implementasi metode ini harus mematuhi persyaratan berikut, yang memungkinkan sistem penyajian untuk mempertimbangkan dengan benar tentang server mana yang dapat dimuat dengan aman:
- Estimasi harus mewakili batas atas pada nilai sebenarnya.
- Sebelum memuat, perkiraan dapat mencakup sumber daya yang tidak terikat pada instans perangkat tertentu, misalnya RAM pada salah satu dari dua GPU.
- Saat dimuat, untuk perangkat apa pun dengan beberapa instans (misalnya dua GPU), perkiraan harus menentukan instans yang terikat dengan setiap sumber daya.
- Estimasi harus monoton tidak meningkat, yaitu tidak dapat meningkat dari waktu ke waktu. Alasan untuk membuatnya berpotensi berkurang seiring waktu
Kembali perkiraan sumber daya yang akan dikonsumsi oleh server setelah dimuat. Jika servable telah dimuat, mengembalikan perkiraan penggunaan sumber daya yang sebenarnya.
Memuat
virtual Status Load()
Menjemput data bahwa kebutuhan akan dimuat sebelum menggunakan servable dikembalikan oleh servable () .
Mungkin tidak menggunakan sumber daya lebih dari perkiraan dilaporkan oleh EstimateResources () .
Jika menerapkan Beban () , Anda tidak perlu menimpa LoadWithMetadata () .
MuatDenganMetadata
virtual Status LoadWithMetadata( const Metadata & metadata )
Mirip dengan metode di atas, tetapi mengambil Metadata sebagai param, yang dapat digunakan oleh implementasi loader tepat.
Jika Anda meng-override LoadWithMetadata () , karena Anda dapat menggunakan metadata tepat, Anda dapat melewati mengesampingkan beban () .
Membongkar
virtual void Unload()=0
bisa diservis
virtual AnyPtr servable()=0
Mengembalikan antarmuka buram ke objek servable yang mendasarinya.
Penelepon harus mengetahui jenis antarmuka yang tepat untuk memanfaatkannya secara aktual. Sebagai contoh:
CustomLoader pelaksanaan:
class CustomLoader : public Loader { public: ... Status Load() override { servable_ = ...; } AnyPtr servable() override { return servable_; } private: CustomServable* servable_ = nullptr; };
Melayani permintaan pengguna:
ServableHandle<CustomServable> handle = ... CustomServable* servable = handle.get(); servable->...
Jika servable () disebut setelah sukses Beban () dan sebelum Unload () , ia mengembalikan valid, non-null objek AnyPtr. Jika disebut sebelum sukses Beban () panggilan atau setelah Unload () , ia mengembalikan nol AnyPtr.