bab*_*alu 5 python serving tensorflow tensorflow-serving
我已经阅读了基本和高级tensorflow-serving 教程,但我仍然不清楚如何在 tensorflow-serving 中为以下内容建立支持:
考虑使用 TFBT 可用tf.contrib,但根据this,TensorFlow Boosted Trees (TFBT)需要更长的时间以培训相比xgboost,并指出它有精度差。
任何帮助或建议将不胜感激...
Tensorflow文档提到:
\n\n\n任何 C++ 类都可以是可服务的,例如
\nint,std::map<string, int>\也可以是二进制文件中定义的任何类 - 让我们称之为YourServable。
Tensorflow 服务论文还提到
\n\n\n“它在支持的机器学习平台类型方面非常灵活\n”
\n
经过一番阅读后,我发现在实践中服务自定义(非 ternsorflow)模型非常复杂。张量流服务库的灵活性带来了采用的复杂性。这根本不是对 Google Tensorflow 服务的不满,也不是对其文档的负面评论。我正在简要调查托管另一个模型平台需要什么,我想分享我的发现并从社区获得一些反馈。我绝不是不同模型平台或张量流服务方面的专家。我还没有尝试在代码中实现这些。我确信,一旦您真正深入实施,就会在我的解释中发现错误。
\n人们可能想要使用许多模型平台。XGBoost、LightGBM、SkLearn、pytorch\xe2\x80\xa6.. 在本文档中我将仅访问 XGBoost。对于其他模型平台也需要讨论一系列类似的问题。
\n模型需要存在于某个路径的某个文件中,并且需要加载到tensorflow/serving运行时。
\n该文档提到了如何创建您自己的服务。代码中有一个哈希表加载器的示例。\n我猜您需要为 XGBoost 编写类似的内容。XGBoost 有一个 c++ api,并且在 c++ 中的 xgboost 负载模型中有一些示例(python -> c++ 预测分数不匹配)。\n所以至少在理论上这是可能的。\n但是您需要为此编写新代码。您需要为此加载 XGBoost 库。您要么需要在编译时引入 XGBoost,要么在运行时打开其库。\n您至少需要 fork 张量流/服务代码并自行维护。这本身可能意味着基本上无限期地维护你的分叉。
\n我认为SimpleLoaderSourceAdapter作为启动器可能就足够了,但是 servables/tensorflow 必须在这里创建自己的。\n因此,您可能需要为新模型编写自己的加载器和源适配器。
\n拥有可加载的模型是不够的。您的模型还应该由tensorflow/serving运行时动态或静态加载。有多种方法可以将模型字节放入张量流/服务中。一种简单的方法是将文件系统中的模型放在常规文件中,并通过 ModelConfig 静态加载模型。在初始化时,ServerCode迭代这些 ModelConfigList 条目并读取负载这些模型。
\nModelConfig 对象有一个model_platform字段,在撰写本文时仅支持张量流 开源版本因此,您需要添加一个新的 model_platform(例如 XGBoost)并相应地更改 ModelConfig 的 proto 文件。
\nTensorflow 服务的“创建新的 Servable”文档包含直接调用该函数的示例代码ConnectSourceToTarget。但是,我不确定在应用程序中编写此代码的最佳位置,或者尝试使用张量流服务中现有的静态配置加载功能(如前所述)的效果如何。
我们已经讨论了将模型加载到 Tensorflow/serving 运行时中的一些设置。我确信我还错过了很多其他事情,但我认为故事还没有结束。
\n您将如何使用您的模型进行预测?
\n我完全掩盖了 gRPC 服务器。我确信您还需要进行更多设置。 \n希望 HTTP 路径会更简单,tensorflow 服务具有此HttpRestApiHandler ,它使用TensorflowPredictor对象来调用预测。
\n第一次添加 XBoost 模型平台时,人们应该期望编写 XGBoostPredictor 类,这是合理的。这将包含 XGBoost 特定的预测函数。与需要编写自定义加载程序以从文件读取 XGBoost 模型相比,这并没有太大不同。
\n我想当模型是 XBoost 模型时,您还需要以某种方式扩展 HttpRestApiHandler 来调用 XGBoostPredictor。并且还以某种方式添加了区分 TensorFlowPredictor 或 XBoostPeditor 的能力。我不清楚一种明显的方法。我非常有兴趣学习更好的方法。Tensorflow 服务还具有TensorFlow Serving 推理请求的生命周期 文档,可能会有所帮助。
\n在本次讨论中,我们没有讨论集成到可调试性 或批处理中 功能。当然,这些还需要深入的理解和额外的工作才能与非张量流模型集成。
\n我认为如果有人有一个通过tensorflow/serving 服务非tensorflow 模型的开源示例,那将非常有价值。我同意他们论文中的说法,即张量流服务非常灵活。用于加载、版本\n管理、批处理的非张量流特定基类非常通用且灵活。然而,这种极端的灵活性也带来了采用新的机器学习平台的复杂性成本。
\n作为起点,我们需要仔细理解Serables/tensorflow的示例的示例,并期望托管另一个模型平台具有类似的复杂性。
\n撇开实现的复杂性不谈,我对维护您将要编写的新软件会非常谨慎。谨慎的做法是期望无限期地拥有组织中所有库的分支,或者与上游社区合作以扩展张量流服务。上游已经有一些先前的问题:1694、768、637。
\n除了 TensorFlow 模型之外,Google ML 平台还能够服务 SKLearn 和 XGBoost模型。他们的论文 还说:
\n\n\n“说实话,Google 将 TensorFlow-Serving 用于一些专有的\n非 TensorFlow 机器学习框架以及 TensorFlow。”
\n
因此,类似的扩展可能已经在张量流服务之上实现了。另一方面,这篇论文是 2017 年写的,谁知道此后还发生了什么变化。
\n| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |