dòng chảy :: phục vụ :: BasicManager

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

#include <basic_manager.h>

Giúp quản lý vòng đời của các dịch vụ bao gồm tải, phục vụ và dỡ chúng ra.

Bản tóm tắt

Người quản lý chấp nhận các dịch vụ dưới dạng Máy xúc.

Chúng tôi bắt đầu quản lý một dịch vụ thông qua một trong các phương thức ManageServable *. Bạn có thể tiếp tục tải các thể phân phát sau này bằng cách gọi LoadServable () . Việc tải cũng sẽ làm cho dịch vụ có sẵn để phục vụ. Khi bạn quyết định dỡ bỏ nó, bạn có thể gọi UnloadServable () vào nó, mà sẽ làm cho nó không có sẵn để phục vụ, sau đó dỡ bỏ các thể phân phát.

Servables được giữ lại cho đến khi StopManagingServable () được gọi. Điều này cho phép người quản lý cấp cao hơn có nhiều thông tin hơn để quyết định thời điểm an toàn nếu bạn quên một dịch vụ.

BasicManager theo dõi các nguồn lực (ví dụ RAM) được sử dụng bởi servables nạp, và chỉ cho phép tải servables mới phù hợp trong hệ thống tài nguyên chung.

BasicManager có thể được cấu hình để sử dụng một thread-pool để làm điều đó của tải và dỡ tải. Điều này làm cho LoadServable ()UnloadServable () phương pháp sắp xếp tải / unloads hơn là thực hiện chúng đồng bộ. Nếu có nhiều luồng tải / dỡ đang chờ xử lý hơn luồng trong nhóm luồng, chúng sẽ được xử lý theo thứ tự FIFO.

Khi có trình tải ước tính quá mức nhu cầu tài nguyên của các dịch vụ của họ và / hoặc chỉ liên kết tài nguyên của các dịch vụ của họ với các phiên bản thiết bị, đồng thời tải / dỡ tải có thể được giảm xuống dưới kích thước nhóm luồng. Đó là bởi vì chúng tôi có thể phải đợi quá trình tải / dỡ hàng của một dịch vụ hoàn tất để giảm khả năng cung cấp tài nguyên cho việc tải một dịch vụ khác.

ĐÒI HỎI:

  1. Trình tự các cuộc gọi phương pháp - ManageServable () (và các biến thể) -> LoadServable () -> UnloadServable () -> StopManagingServable () .
  2. Không lập lịch trình tải và dỡ đồng thời của cùng một dịch vụ.
  3. Không gọi tải hoặc dỡ tải nhiều lần trên cùng một dịch vụ.

Lớp này an toàn theo luồng.

Ví dụ sử dụng:

const ServableId id = {kServableName, 0};
std::unique_ptr<Loader> loader = ...;
...
BasicManager manager;
TF_CHECK_OK(manager.ManageServable(
  CreateServableData(id, std::move(loader))));
TF_CHECK_OK(manager.LoadServable(id));

...
TF_CHECK_OK(manager.GetServableHandle(
    ServableRequest::Latest(kServableName), &handle));
...

TF_CHECK_OK(manager.UnloadServable(id));
TF_CHECK_OK(manager.StopManagingServable(id));  

Di sản

Inherits từ: tensorflow :: phục vụ :: Quản lý

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

~BasicManager ()
Nếu được định cấu hình để sử dụng một nhóm luồng tải / dỡ tải, hãy đợi cho đến khi tất cả các lần tải và dỡ hàng theo lịch trình kết thúc và sau đó hủy tập hợp các luồng.

Các loại công khai

DoneCallback sử dụng
std::function< void(const Status &status)>
Gọi lại được gọi vào cuối {Load, Unload} Servable ().
PreLoadHook sử dụng
std::function< void(const ServableId &)>

Lớp học bạn bè

test_util::BasicManagerTestAccess
friend class

Các chức năng tĩnh công khai

Create ( Options options, std::unique_ptr< BasicManager > *manager)
Status

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

CancelLoadServableRetry (const ServableId & id)
void
Hủy bỏ thử lại tải trọng thể phân phát trong LoadServable () .
GetAdditionalServableState (const ServableId & id)
T *
GetAvailableUntypedServableHandles () const override
virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > >
GetManagedServableNames () const
std::vector< string >
GetManagedServableStateSnapshot (const ServableId & id)
optional< ServableStateSnapshot< T > >
GetManagedServableStateSnapshots (const string & servable_name) const
std::vector< ServableStateSnapshot< T > >
GetUntypedServableHandle (const ServableRequest & request, std::unique_ptr< UntypedServableHandle > *untyped_handle) override
virtual Status
ListAvailableServableIds () const override
virtual std::vector< ServableId >
Nhận danh sách tất cả các id dịch vụ có sẵn, tức là
LoadServable (const ServableId & id, DoneCallback done_callback)
void
Tải dịch vụ bằng id này và cập nhật cả bản đồ phục vụ.
ManageServable (ServableData< std::unique_ptr< Loader >> servable)
Status
Bắt đầu quản lý dịch vụ.
ManageServableWithAdditionalState (ServableData< std::unique_ptr< Loader >> servable, std::unique_ptr< T > additional_state)
Status
Tương tự như phương pháp trên, nhưng người gọi, thường là những người quản lý khác được xây dựng trên phương pháp này, có thể liên kết trạng thái bổ sung với dịch vụ.
StopManagingServable (const ServableId & id)
Status
Yêu cầu người quản lý ngừng quản lý dịch vụ này.
UnloadServable (const ServableId & id, DoneCallback done_callback)
void
Dỡ dịch vụ có id này và cập nhật cả bản đồ phục vụ.

Cấu trúc

tensorflow :: phục vụ :: BasicManager :: Tùy chọn

Tùy chọn cấu hình và các đối tượng pluggable sẽ được sử dụng bởi các BasicManager .

Các loại công khai

DoneCallback

std::function< void(const Status &status)> DoneCallback

Gọi lại được gọi vào cuối {Load, Unload} Servable ().

Chúng tôi chuyển trạng thái của hoạt động cho cuộc gọi lại.

PreLoadHook

std::function< void(const ServableId &)> PreLoadHook

Lớp học bạn bè

test_util :: BasicManagerTestAccess

friend class test_util::BasicManagerTestAccess

Các chức năng tĩnh công khai

Tạo ra

Status Create(
  Options options,
  std::unique_ptr< BasicManager > *manager
)

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

CancelLoadServableRetry

void CancelLoadServableRetry(
  const ServableId & id
)

Hủy bỏ thử lại tải trọng thể phân phát trong LoadServable () .

Không có gì nếu dịch vụ không được quản lý.

Nếu quá trình thử lại bị hủy, dịch vụ sẽ chuyển sang trạng thái phụ thuộc vào Tải cuối cùng () được gọi trên đó. Nếu lần tải cuối cùng () thành công, nó sẽ ở trạng thái kReady, khác ở trạng thái kError.

GetAdditionalServableState

T * GetAdditionalServableState(
  const ServableId & id
)

YÊU CẦU: Người quản lý này lẽ ra đã quản lý được dịch vụ này rồi, nếu không, chúng tôi trả về nullptr.

Thông tin chi tiết
Lợi nhuận
trạng thái bổ sung cho dịch vụ. Trả về nullptr nếu không có thiết lập trạng thái bổ sung hoặc nếu có kiểu không khớp giữa những gì đã thiết lập và những gì đang được yêu cầu.

GetAvailableUntypedServableHandles

virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > > GetAvailableUntypedServableHandles() const override

GetManagedServableNames

std::vector< string > GetManagedServableNames() const 

Thông tin chi tiết
Lợi nhuận
tên của tất cả các dịch vụ được quản lý bởi người quản lý này. Các tên sẽ không trùng lặp và không theo bất kỳ thứ tự cụ thể nào.

GetManagedServableStateSnapshot

optional< ServableStateSnapshot< T > > GetManagedServableStateSnapshot(
  const ServableId & id
)

YÊU CẦU: Người quản lý này lẽ ra đã quản lý được dịch vụ này rồi, nếu không, chúng tôi trả về nullopt.

Thông tin chi tiết
Lợi nhuận
ảnh chụp nhanh trạng thái của một id có thể phục vụ cụ thể do người quản lý này quản lý nếu có.

GetManagedServableStateSnapshots

std::vector< ServableStateSnapshot< T > > GetManagedServableStateSnapshots(
  const string & servable_name
) const 

T là kiểu trạng thái bổ sung, nếu có.

Thông tin chi tiết
Lợi nhuận
ảnh chụp nhanh trạng thái của tất cả các dịch vụ của một luồng cụ thể, do người quản lý này quản lý.

GetUntypedServableHandle

virtual Status GetUntypedServableHandle(
  const ServableRequest & request,
  std::unique_ptr< UntypedServableHandle > *untyped_handle
) override

ListAvailableServableIds

virtual std::vector< ServableId > ListAvailableServableIds() const override

Nhận danh sách tất cả các id dịch vụ có sẵn, tức là

mỗi cái trong số này có thể được truy xuất bằng GetServableHandle.

LoadServable

void LoadServable(
  const ServableId & id,
  DoneCallback done_callback
)

Tải dịch vụ bằng id này và cập nhật cả bản đồ phục vụ.

Cuộc gọi done_callback với ok iff thể phân phát đã được nạp thành công, lợi nhuận khác một trạng thái lỗi.

Nếu sử dụng một nhóm luồng, phương thức này sẽ chuyển khai thác có thể phục vụ sang trạng thái kLoading, lập lịch tải và trả về, nếu không, nó sẽ hoàn thành tải trước khi quay trở lại.

YÊU CẦU: quản lý này lẽ ra phải được quản lý thể phân phát này rồi, cho nó được nạp, nếu không chúng ta gọi là done_callback với một trạng thái lỗi. Không gọi điều này nhiều lần trên cùng một dịch vụ. Chỉ một trong số đó sẽ thành công và phần còn lại sẽ thất bại với trạng thái lỗi.

ManageServable

Status ManageServable(
  ServableData< std::unique_ptr< Loader >> servable
)

Bắt đầu quản lý dịch vụ.

Trả về lỗi nếu cung cấp một dịch vụ đang được quản lý.

Nếu thể phân phát là trong tình trạng lỗi, phương pháp này không trả lại một lỗi. Thay vào đó, người quản lý chấp nhận dịch vụ, đặt nó ở trạng thái kError (với thông báo được gửi đến bus sự kiện), rồi ngay lập tức ngừng quản lý nó. Hành vi này tạo điều kiện cho việc xử lý thống nhất các lỗi xảy ra trong các nguồn (ví dụ: đường dẫn tệp không hợp lệ đến dữ liệu có thể phục vụ) và các lỗi xảy ra trong trình quản lý (ví dụ: không đủ tài nguyên để tải dịch vụ).

ManageServableWithAdditionalState

Status ManageServableWithAdditionalState(
  ServableData< std::unique_ptr< Loader >> servable,
  std::unique_ptr< T > additional_state
)

Tương tự như phương pháp trên, nhưng người gọi, thường là những người quản lý khác được xây dựng trên phương pháp này, có thể liên kết trạng thái bổ sung với dịch vụ.

Trạng thái bổ sung có thể là ACL hoặc siêu dữ liệu lâu dài cho khả năng phục vụ đó. Quyền sở hữu của nhà nước được chuyển giao cho giai cấp này.

StopManagingServable

Status StopManagingServable(
  const ServableId & id
)

Yêu cầu người quản lý ngừng quản lý dịch vụ này.

Yêu cầu rằng dịch vụ hiện đang được quản lý và trạng thái của nó là một trong {kNew, kError, kDisabled}.

UnloadServable

void UnloadServable(
  const ServableId & id,
  DoneCallback done_callback
)

Dỡ dịch vụ có id này và cập nhật cả bản đồ phục vụ.

Cuộc gọi done_callback với ok iff thể phân phát được bốc dỡ thành công, lợi nhuận khác một trạng thái lỗi.

Nếu sử dụng thread-pool, phương thức này sẽ chuyển khai thác có thể phục vụ sang trạng thái kQuiescing, lập lịch trình dỡ tải và trả về, nếu không, nó sẽ hoàn thành việc dỡ bỏ trước khi quay trở lại.

YÊU CẦU: quản lý này nên đã tải và làm cho thể phân phát có sẵn này, cho nó được bốc dỡ, các cuộc gọi khác done_callback với một trạng thái lỗi. Không gọi điều này nhiều lần trên cùng một dịch vụ. Chỉ một trong số đó sẽ thành công và phần còn lại sẽ thất bại với trạng thái lỗi.

~ BasicManager

 ~BasicManager() override

Nếu được định cấu hình để sử dụng một nhóm luồng tải / dỡ tải, hãy đợi cho đến khi tất cả các lần tải và dỡ hàng theo lịch trình kết thúc và sau đó hủy tập hợp các luồng.