dòng chảy :: phục vụ :: Bộ tải

Đây là một lớp trừu tượng.

#include <loader.h>

Một bản tóm tắt được chuẩn hóa cho một đối tượng quản lý vòng đời của một dịch vụ, bao gồm cả việc tải và dỡ nó.

Bản tóm tắt

Các cung cấp dịch vụ là các đối tượng tùy ý phục vụ các thuật toán hoặc dữ liệu thường, mặc dù không nhất thiết, sử dụng mô hình máy học.

Một Loader cho một đối tượng thể phân phát đại diện cho một thể hiện của một dòng của các phiên bản thể phân phát, tất cả chia sẻ một tên chung (ví dụ: "my_servable") và ngày càng có nhiều phiên bản, điển hình là đại diện cho các thông số mô hình cập nhật rút ra từ dữ liệu huấn luyện tươi.

Một Loader nên bắt đầu trong tình trạng dỡ, có nghĩa là không có công việc đã được thực hiện để chuẩn bị để thực hiện các hoạt động. Một ví dụ điển hình chưa được tải chỉ chứa một con trỏ đến một vị trí mà từ đó dữ liệu của nó có thể được tải (ví dụ: đường dẫn hệ thống tệp hoặc vị trí mạng). Việc xây dựng và phá hủy các cá thể phải khá rẻ. Hoạt động khởi đắt nên được thực hiện trong Load () .

Lớp con có thể tùy chọn lưu trữ một con trỏ đến các nguồn có nguồn gốc nó, để truy cập vào trạng thái chia sẻ cho nhiều đối tượng thể phân phát trong một dòng thể phân phát cho.

Việc triển khai cần đảm bảo rằng các phương pháp mà chúng đưa ra là an toàn theo luồng, hoặc ghi chép cẩn thận và / hoặc phối hợp các thuộc tính an toàn của luồng với khách hàng của họ để đảm bảo tính đúng đắn. Servables không cần phải lo lắng về thực hiện đồng thời của Load () / Unload () như người gọi sẽ đảm bảo rằng không xảy ra.

Di sản

Chỉ đạo lớp con biết: tensorflow :: phục vụ :: ResourceUnsafeLoader

Người xây dựng và Người phá hủy

~Loader ()
Destructor sẽ không bao giờ được gọi là trên Loader có thể phân phát hiện đang được nạp, tức là

Chức năng công cộng

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
Ước tính các tài nguyên mà một dịch vụ sẽ sử dụng.
Load ()
virtual Status
Lấy về bất kỳ dữ liệu cần phải được nạp trước khi sử dụng thể phân phát được trả về bởi thể phân phát () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
Tương tự như các phương pháp trên, nhưng phải mất Metadata như một param, có thể được sử dụng bởi việc thực hiện nạp một cách thích hợp.
Unload ()=0
virtual void
Frees bất kỳ nguồn lực phân bổ trong Load () (ngoại trừ có lẽ đối với tài nguyên chia sẻ trên servables rằng vẫn là cần thiết cho những hoạt động khác).
servable ()=0
virtual AnyPtr
Trả lại giao diện mờ cho đối tượng có thể phục vụ bên dưới.

Cấu trúc

tensorflow :: phục vụ :: Loader :: Metadata

Siêu dữ liệu bao gồm ServableId.

Chức năng công cộng

Ước tính

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

Ước tính các tài nguyên mà một dịch vụ sẽ sử dụng.

QUAN TRỌNG: Việc triển khai phương pháp này phải tuân theo các yêu cầu sau, cho phép hệ thống phục vụ suy luận chính xác về việc các dịch vụ nào có thể được tải một cách an toàn:

  1. Ước tính phải đại diện cho giới hạn trên của giá trị thực tế.
  2. Trước khi tải, ước tính có thể bao gồm các tài nguyên không bị ràng buộc với bất kỳ phiên bản thiết bị cụ thể nào, ví dụ: RAM trên một trong hai GPU.
  3. Trong khi được tải, đối với bất kỳ thiết bị nào có nhiều phiên bản (ví dụ: hai GPU), ước tính phải chỉ định phiên bản mà mỗi tài nguyên bị ràng buộc.
  4. Ước tính phải đơn điệu không tăng, tức là nó không thể tăng theo thời gian. Những lý do khiến nó có khả năng giảm theo thời gian Lợi nhuận
    ước tính các tài nguyên mà dịch vụ sẽ sử dụng sau khi tải. Nếu dịch vụ đã được tải, trả về ước tính mức sử dụng tài nguyên thực tế.

Trọng tải

virtual Status Load()

Lấy về bất kỳ dữ liệu cần phải được nạp trước khi sử dụng thể phân phát được trả về bởi thể phân phát () .

Có thể sử dụng không có nhiều nguồn lực hơn so với dự toán báo cáo của EstimateResources () .

Nếu thực hiện Load () , bạn không cần phải ghi đè LoadWithMetadata () .

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

Tương tự như các phương pháp trên, nhưng phải mất Metadata như một param, có thể được sử dụng bởi việc thực hiện nạp một cách thích hợp.

Nếu bạn đang trọng LoadWithMetadata () , bởi vì bạn có thể sử dụng siêu dữ liệu một cách thích hợp, bạn có thể bỏ qua trọng Load () .

Dỡ hàng

virtual void Unload()=0

Frees bất kỳ nguồn lực phân bổ trong Load () (ngoại trừ có lẽ đối với tài nguyên chia sẻ trên servables rằng vẫn là cần thiết cho những hoạt động khác).

Bộ nạp không cần phải quay trở lại "mới" nhà nước (tức là Load () không thể được gọi sau khi Unload () ).

có thể phục vụ

virtual AnyPtr servable()=0

Trả lại giao diện mờ cho đối tượng có thể phục vụ bên dưới.

Người gọi nên biết loại giao diện chính xác để sử dụng nó thực tế. Ví dụ:

CustomLoader thực hiện:

class CustomLoader : public Loader {
 public:
  ...
  Status Load() override {
    servable_ = ...;
  }

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Phục vụ yêu cầu người sử dụng:

ServableHandle<CustomServable> handle = ...
CustomServable* servable = handle.get();
servable->...

Nếu thể phân phát () được gọi sau khi thành công Load () và trước khi Unload () , nó sẽ trả về một tổ chức phi-null đối tượng hợp lệ, AnyPtr. Nếu gọi trước khi một thành công Load () gọi hoặc sau Unload () , nó sẽ trả AnyPtr null.

~ Bộ tải

virtual  ~Loader()=default

Destructor sẽ không bao giờ được gọi là trên Loader có thể phân phát hiện đang được nạp, tức là

giữa (thành công) các cuộc gọi đến Tải ()Unload () .