- 使用Python构建的模型(如xgboost或scikit-learn)
- 使用R构建的模型(如xgboost或lightgbm)
tf.contrib
中提供的TFBT,但根据此处,TensorFlow Boosted Trees (TFBT)训练时间比xgboost长得多,并且精度较低。任何帮助或建议将不胜感激...
tf.contrib
中提供的TFBT,但根据此处,TensorFlow Boosted Trees (TFBT)训练时间比xgboost长得多,并且精度较低。Tensorflow 文档 中提到:
任何 C++ 类都可以成为可服务对象,例如
int
、std::map<string, int>
或者在二进制文件中定义的任何类 -- 我们称之为YourServable
。
Tensorflow serving 论文 也提到:
在阅读了一些资料后,我发现实际上为自定义(非TensorFlow)模型提供服务相当复杂。为了获得TensorFlow Serving库中的灵活性,需要承担一定的采用复杂度。这并不是对Google TensorFlow Serving的负面评价,也不是对其文档的负面评论。我简要调查了托管另一个模型平台所需的条件,并希望与社区分享我的发现并获得一些反馈。我绝不是不同模型平台或TensorFlow Serving的专家。我没有尝试在代码中实现任何这些内容。当您实际深入实施时,我相信您会发现我的解释中存在错误。"它在支持的 ML 平台类型方面非常灵活"
有许多模型平台可供使用。XGBoost、LightGBM、SkLearn、pytorch……在本文档中,我只讨论XGBoost。其他模型平台也需要讨论类似的问题。
模型需要存储在某个路径的某个文件中,并且需要加载到TensorFlow/Serving运行时中。
文档中提到了如何创建自己的服务。其中有一个来自代码的哈希表加载器的示例。 我猜你需要为XGBoost编写类似的内容。 XGBoost有一个C++ API,并且在XGBoost在C++中加载模型(Python -> C++预测得分不匹配)中有一些示例。 因此,理论上这至少是可能的。 但是,您需要编写新的代码。您需要加载XGBoost库。您可以在编译时将XGBoost引入,也可以在运行时dlopen其库。 您至少需要fork tensorflow/serving代码并自行维护它。这本身可能意味着您必须无限期地维护自己的fork。
我认为SimpleLoaderSourceAdapter可能足够作为起点,但是servables/tensorflow必须在这里创建自己的适配器。因此,您可能需要为您的新模型编写自己的加载器和源适配器。仅仅拥有可加载的模型是不够的。您的模型还应该由 tensorflow/serving 运行时动态或静态加载。有多种方式将您的模型字节加载到 tensorflow/serving 中。一个简单的方法是将模型已经存储在文件系统中的常规文件中,并通过ModelConfig静态地加载您的模型。在初始化时,ServerCode 遍历这些 ModelConfigList 条目并读取加载那些模型。
ModelConfig 对象有一个 model_platform 字段,截至本文撰写时,仅支持在开源版本中使用 tensorflow。因此,您需要添加一个新的 model_platform(例如 XGBoost),并相应地更改 ModelConfig 的 proto 文件。我们已经讨论了一些设置,以便在tensorflow/serving运行时加载您的模型。我确定还有很多其他事情我错过了,但我认为故事并没有结束。
如何使用您的模型进行预测?
我完全忽略了gRPC服务器。我相信您需要进行更多的设置。 希望HTTP路径会更简单,tensorflow serving具有HttpRestApiHandler,它使用TensorflowPredictor对象调用预测。
合理的期望是,在首次添加XBoost模型平台时,您应该能够编写一个XGBoostPredictor类。这将包含特定于XGBoost的预测函数。与需要编写自定义加载器以从文件中读取XGBoost模型相比,这并没有太大的区别。Google ML平台具备为SKLearn和XGBoost提供服务的能力,除了TensorFlow模型之外。他们的论文还提到:
"说句认真的话,Google不仅在TensorFlow上使用TensorFlow-Serving,而且也用它作为一些专有的非TensorFlow机器学习框架的基础。"
因此,类似的扩展可能已经在TensorFlow serving之上实现了。另一方面,该论文是在2017年撰写的,谁知道自那以后还发生了什么变化。
我知道你的问题与TensorFlow Serving有关,但以防万一你从未听说过它,还有这个叫做Simple TensorFlow Serving的解决方案。他们在他们的网站上说:
Simple TensorFlow Serving是用于机器学习模型的通用且易于使用的服务。
curl
和其他命令行工具我还没有测试过它(我现在正在使用 Tensorflow Serving),但我很快就会尝试一下,因为我想提供一个 XGBoost 模型。