我已经阅读了basic和advanced张量流服务教程,但我仍然不清楚如何在tensorflow服务中为以下内容提供支持:
考虑使用tf.contrib
中提供的TFBT,但根据this,与{x}相比,TensorFlow Boosted Trees (TFBT)需要更长时间才能进行训练,并且观察到它的精确度更低。
任何帮助或建议都将不胜感激......
答案 0 :(得分:2)
Tensorflow documentation提到:
任何C ++类都可以是可服务的,例如
int
,std::map<string, int>
或您的二进制文件中定义的任何类-我们将其称为YourServable
。
Tensorflow服务paper也提到了
“它在ML平台类型方面非常灵活 支持”
经过一番阅读,我发现在实践中服务自定义(非ternsorflow)模型非常复杂。张量流服务库的灵活性带来了采用上的复杂性。这根本不是对Google tensorflow的服务,也不是对其文档的负面评价。我正在简要研究托管另一个模型平台所需的资源,我想分享我的发现并从社区中获得一些反馈。我绝不是不同模型平台或tensorflow服务方面的专家。我没有尝试在代码中实现任何这些。我敢肯定,一旦您深入研究实现,就会在我的解释中发现错误。
一个人可能要使用许多模型平台。 XGBoost,LightGBM,SkLearn,pytorch .....在本文档中,我将仅访问XGBoost。其他模型平台也需要讨论类似的问题。
模型需要存在于某个文件的某个路径中,并且需要加载到tensorflow / serving运行时中。
docs提到了如何创建自己的可服务对象。有一个code中的哈希表加载器示例。 我想您需要为XGBoost写类似的东西。 XGBoost具有c ++ api,xgboost load model in c++ (python -> c++ prediction scores mismatch)中有一些示例。 因此,至少在理论上这是可能的。 但是,您需要为此编写新代码。您需要为此加载XGBoost库。您要么需要在编译时带XGBoost,要么在运行时dlopen它的库。 您至少需要派生tensorflow / serving代码并自行维护。这本身可能意味着无限期地维护您的叉子。
我认为SimpleLoaderSourceAdapter可能足以作为启动器,但是可服务对象/张量流必须创建自己的here。 因此,您可能需要为新模型编写自己的装载程序和源适配器。
仅具有可加载模型是不够的。您的模型还应该通过tensorflow / serving运行时动态或静态加载。有various ways可以将模型字节放入tensorflow / serving。一种简单的方法是将文件系统中的模型保存在常规文件中,然后通过ModelConfig静态加载模型。在初始化时,ServerCode iterates over these ModelConfigList entries and reads loads就是那些模型。
ModelConfig对象具有一个model_platform字段,在开放源代码版本中,截至本文撰写时only tensorflow is supported。因此,您需要添加一个名为XGBoost的新model_platform并相应地更改ModelConfig的原型文件。
Tensorflow服务的“创建新的可服务对象” documentation具有直接调用ConnectSourceToTarget
函数的示例代码。但是,我不确定在您的应用程序中编写此代码的最佳位置是什么,或者如前所述,尝试在tensorflow服务中尝试使用现有的静态配置加载功能到底有多可取。
我们已经讨论了一些在tensorflow / serving运行时加载模型的设置。我确定我还有很多其他事情想念,但我认为故事并没有完成。
您将如何使用模型进行预测?
我完全了解gRPC服务器。我敢肯定,还有很多设置需要您执行。 希望HTTP路径会更简单,tensorflow的HttpRestApiHandler使用了TensorflowPredictor对象来调用预报。
一个人应该期望在第一次添加XBoost模型平台时编写一个XGBoostPredictor类。这将包含特定于XGBoost的预测函数。与编写自定义加载器以从文件读取XGBoost模型的需要相比,这并没有太大不同。
我想您还需要以某种方式扩展HttpRestApiHandler,以在模型为XBoost模型时调用XGBoostPredictor。并且还以某种方式增加了区分TensorFlowPredictor或XBoostPreditor的能力。对我来说,一个明显的方法尚不清楚。我将非常有兴趣学习更好的方法。 Tensorflow服务还有Life of a TensorFlow Serving inference request个文档,可能会有所帮助。
在此讨论中,我们没有讨论过集成到张量流服务的debuggability或batch processing功能中。当然,这些还需要深入理解和其他工作才能与非张量流模型集成。
我认为,如果任何人都有一个通过tensorflow / serving服务非tensorflow模型的开源示例,那将是非常有价值的。我同意他们论文中的说法,即张量流服务非常灵活。非tensorflow特定的基类,用于加载,版本 管理,批处理非常通用且灵活。但是,采用这种极大的灵活性也会带来采用新的ML平台的复杂性。
作为起点,需要仔细理解serveables/tensorflow的示例,并期望以类似的复杂度托管另一个模型平台。
除了实现的复杂性,我将非常谨慎地维护要编写的新软件。明智的做法是,让组织中的所有库无限期拥有您的fork,或者与上游社区合作以扩展tensorflow服务。上游已经存在一些先前的问题:1694,768,637。
Google ML平台has the ability to serve SKLearn and XGBoost模型以及TensorFlow模型。他们的paper还说:
“说真的,Google使用TensorFlow- Serving某些专有 非TensorFlow机器学习框架以及TensorFlow。 “
因此,在张量流服务之上可能已经实现了类似的扩展。另一方面,该论文写于2017年,谁知道此后发生了什么变化。
答案 1 :(得分:1)
https://quickstart.pipeline.ai是python,tensorflow,c,xgboost等所有ml和ai模型的通用平台。
答案 2 :(得分:0)
我知道您的问题与 tensorflow 服务有关,但以防万一您从未听说过,还有一个称为 simple-tensorflow-serving 的解决方案。他们在site上说:
Simple TensorFlow Serving 是适用于机器学习模型的通用且易于使用的服务。
curl
和其他命令行工具我还没有机会测试它(我现在正在使用 Tensorflow Serving),但我可能很快就会尝试一下,因为我想为 XGBoost 模型提供服务。