tensorflow ::サービング::ローダ

これは抽象クラスです。

#include <loader.h>

サーバブルのロードとアンロードを含む、サーバブルのライフサイクルを管理するオブジェクトの標準化された抽象化。

概要

サーバブルは、アルゴリズムまたはデータを提供する任意のオブジェクトであり、必ずしもそうとは限りませんが、機械学習モデルを使用することがよくあります。

Aローダサービス提供可能なオブジェクトのためには、すべての一般的な名前(例えば「my_servable」)を共有し、一般的に、新鮮なトレーニングデータから学んだ更新モデルパラメータを表す、バージョン番号を増やし、サービス提供可能なバージョンのストリームの1つのインスタンスを表します。

A Loaderは何の仕事が操作を実行するために準備するために行われていないことを意味し、無負荷状態で起動する必要があります。まだロードされていない一般的なインスタンスには、データをロードできる場所(ファイルシステムパスやネットワークの場所など)へのポインターが含まれているだけです。インスタンスの構築と破棄はかなり安価である必要があります。高価な初期化操作はで行わなければならない)(負荷

サブクラスは、必要に応じへのポインタを格納することができるソース所与のサービス提供可能なストリーム内の複数のサービス提供可能なオブジェクト間で共有状態にアクセスするために、それを発信しました。

実装は、公開するメソッドがスレッドセーフであることを確認するか、スレッドセーフプロパティをクライアントと注意深く文書化および/または調整して正確性を確保する必要があります。 Servablesはの同時実行を心配する必要はありません)をロード(呼び出し側が起こらないことを保証するよう/アンロード()。

継承

直系の既知のサブクラス: tensorflow ::提供:: ResourceUnsafeLoader

コンストラクタとデストラクタ

~Loader ()
デストラクタはで呼び出されることはありませんローダすなわち、そのサービス提供可能な現在ロードされています

公の行事

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
servableが使用するリソースを見積もります。
Load ()
virtual Status
ニーズがで返されるサービス提供可能な使用する前にロードすることを任意のデータ取得サービス提供可能なを() 。
LoadWithMetadata (const Metadata & metadata)
virtual Status
上記の方法に類似するが、かかるメタデータを適切ローダー実装によって使用されてもよいPARAMとして。
Unload ()=0
virtual void
解放時に割り当てられたリソースの負荷を() (まだ他のアクティブなもののために必要とされるservables全体で共有リソースのために、おそらく除きます)。
servable ()=0
virtual AnyPtr
基になるservableオブジェクトへの不透明なインターフェースを返します。

構造体

tensorflow ::サービス提供::ローダー::メタデータ

メタデータはServableIdで構成されます。

公の行事

EstimateResources

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

servableが使用するリソースを見積もります。

重要:このメソッドの実装は、次の要件に従う必要があります。これにより、サービングシステムは、どのサーバブルを安全にロードできるかについて正しく推論できます。

  1. 見積もりは、実際の値の上限を表す必要があります。
  2. ロード前の見積もりには、特定のデバイスインスタンスにバインドされていないリソース(2つのGPUのいずれかのRAMなど)が含まれる場合があります。
  3. ロード中、複数のインスタンス(2つのGPUなど)を持つデバイスの場合、見積もりでは、各リソースがバインドされているインスタンスを指定する必要があります。
  4. 推定値は単調に増加しない必要があります。つまり、時間の経過とともに増加することはできません。時間の経過とともに減少する可能性がある理由戻り値
    サーバブルがロードされた後に消費するリソースの見積もり。 servableがすでにロードされている場合は、実際のリソース使用量の見積もりを返します。

ロード

virtual Status Load()

ニーズがで返されるサービス提供可能な使用する前にロードすることを任意のデータ取得サービス提供可能なを() 。

推定値はによって報告よりも多くのリソースを使用することができEstimateResources() 。

実装した場合の負荷()を、あなたは上書きする必要はありません)(LoadWithMetadataを

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

上記の方法に類似するが、かかるメタデータを適切ローダー実装によって使用されてもよいPARAMとして。

あなたがオーバーライドしている場合LoadWithMetadataを()あなたは適切なメタデータを使用することができますので、あなたがオーバーライドスキップすることができます(ロード)

アンロード

virtual void Unload()=0

解放時に割り当てられたリソースの負荷を() (まだ他のアクティブなもののために必要とされるservables全体で共有リソースのために、おそらく除きます)。

ローダー「新しい」状態に戻す必要はありません(すなわち負荷は()の後に呼び出すことはできません(アンロード) )。

サーブ可能

virtual AnyPtr servable()=0

基になるservableオブジェクトへの不透明なインターフェースを返します。

発信者は、実際に使用するために、インターフェイスの正確なタイプを知っている必要があります。例えば:

CustomLoader実装:

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

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

ユーザの要求をサービング:

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

場合はサービス提供可能な()成功した後に呼び出される(ロード)と前にアンロード() 、それが有効な、非ヌルAnyPtrオブジェクトを返します。成功する前に呼び出された場合はロード()呼び出し以降にアンロード() 、それはnullをAnyPtrを返します。

〜ローダー

virtual  ~Loader()=default

デストラクタはで呼び出されることはありませんローダすなわち、そのサービス提供可能な現在ロードされています

(成功した)呼び出しの間の負荷()アンロード() 。