此页面由 Cloud Translation API 翻译。
Switch to English

张量流:: 服务:: 装载机

这是一个抽象类。

#include <loader.h>

管理可服务对象生命周期(包括加载和卸载)的对象的标准化抽象。

摘要

可服务对象是服务于算法或数据的任意对象,这些算法或数据通常(但不一定)使用机器学习的模型。

可服务对象的加载程序代表可服务版本流的一个实例,所有版本共享一个通用名称(例如“ my_servable”)并增加版本号,通常代表从新训练数据中学到的更新模型参数。

装载程序应以卸载状态启动,这意味着尚未做任何准备工作即可进行操作。尚未加载的典型实例仅包含指向可以从其加载数据的位置(例如,文件系统路径或网络位置)的指针。实例的构造和销毁应该相当便宜。昂贵的初始化操作应在Load()中完成

子类可以选择存储指向其起源的Source的指针,以访问给定可服务流中多个可服务对象之间共享的状态。

实施需要确保它们公开的方法是线程安全的,或与客户仔细记录和/或协调其线程安全属性以确保正确性。服务对象不必担心Load() / Unload()的并发执行,因为调用方将确保不会发生这种情况。

遗产

直接已知子类: tensorflow :: serving :: ResourceUnsafeLoader

构造函数和析构函数

~Loader ()
析构函数永远不会在当前可加载的可加载程序的加载程序上调用,即

公共职能

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
估算可食用资源将使用的资源。
Load ()
virtual Status
在使用servable()返回的servable之前,获取需要加载的所有数据。
LoadWithMetadata (const Metadata & metadata)
virtual Status
与以上方法类似,但将元数据作为参数,可以由加载程序实现适当使用。
Unload ()=0
virtual void
释放在Load()期间分配的所有资源(也许除了可服务对象之间共享的资源之外,其他可活动对象仍然需要这些资源)。
servable ()=0
virtual AnyPtr
返回基础可服务对象的不透明接口。

结构

tensorflow ::服务::加载程序::元数据

元数据由ServableId组成。

公共职能

估计资源

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

估算可食用资源将使用的资源。

重要说明:此方法的实现必须遵守以下要求,这使服务系统能够正确推断可以安全地加载哪些可服务对象:

  1. 估算值必须代表实际值的上限。
  2. 在加载之前,估计可以包括未绑定到任何特定设备实例的资源,例如两个GPU之一上的RAM。
  3. 加载后,对于具有多个实例的任何设备(例如,两个GPU),估计必须指定每个资源绑定到的实例。
  4. 估计值必须单调递增,即不能随时间增加。随着时间的流逝可能减少的原因 退货
    servable加载后将消耗的资源的估算值。如果该servable已被加载,则返回实际资源使用量的估计值。

加载

virtual Status Load()

在使用servable()返回的servable之前,获取需要加载的所有数据。

所使用的资源不得超过EstimateResources()报告的估算值

如果实现Load() ,则不必重写LoadWithMetadata()

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

与上述方法类似,但将元数据作为参数,可以由加载程序实现适当使用。

如果要覆盖LoadWithMetadata() ,因为可以适当地使用元数据,则可以跳过覆盖Load()

卸下

virtual void Unload()=0

释放在Load()期间分配的所有资源(也许除了可服务对象之间共享的资源之外,其他可活动对象仍然需要这些资源)。

加载程序不需要返回“新”状态(即,在Unload()之后不能调用Load () )。

可服务的

virtual AnyPtr servable()=0

返回基础可服务对象的不透明接口。

调用者应该知道接口的确切类型,以便实际使用它。例如:

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对象。如果在成功的Load()调用之前或Unload()之后调用,它将返回null的AnyPtr。

〜装载机

virtual  ~Loader()=default

析构函数将永远不会在当前可服务的加载上调用,即

(成功)调用Load()Unload()之间