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 :: ResourceUnsafeLoader

Konstruktor 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:

  1. Estimasi harus mewakili batas atas pada nilai sebenarnya.
  2. Sebelum memuat, perkiraan dapat mencakup sumber daya yang tidak terikat pada instans perangkat tertentu, misalnya RAM pada salah satu dari dua GPU.
  3. Saat dimuat, untuk perangkat apa pun dengan beberapa instans (misalnya dua GPU), perkiraan harus menentukan instans yang terikat dengan setiap sumber daya.
  4. 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

Membebaskan sumber daya yang dialokasikan selama Beban () (kecuali mungkin untuk berbagi sumber daya di seluruh servables yang masih diperlukan untuk yang aktif lainnya).

Loader tidak perlu kembali ke negara "baru" (yaitu beban () tidak dapat disebut setelah Unload () ).

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.

~Pemuat

virtual  ~Loader()=default

Destructor akan pernah disebut pada Loader yang servable saat ini dimuat, yaitu

antara (sukses) panggilan ke Muat () dan Unload () .