是否可以在 Python 中训练一个 xgboost 模型并部署它在 C/C++ 中运行它?



不同语言 API 之间有多少交叉兼容性?

例如,是否可以在 Python 中训练和保存模型并在 C/C++ 或任何其他语言中运行它?

我会自己尝试这个,但我在非Python语言方面的技能非常有限。

您可以将模型转储到文本文件中,如下所示:

model.get_booster().dump_model('xgb_model.txt')

然后,您应该分析文本转储并在C++中重现预测函数。

我已经在一个名为FastForest的小库中实现了这一点,如果您想节省一些时间并希望确保使用快速实现:

https://github.com/guitargeek/XGBoost-FastForest

图书馆的使命是:

  • 简单:部署您的 xgboost 模型应该尽可能轻松
  • 快速:由于用于存储树的高效数组结构数据结构,该库在您的 CPU 和内存上非常容易(在预测中它比 xgboost 快约 3 到 5 倍(
  • 安全:FastForest 对象是不可变的,因此它们是多线程环境中的绝佳选择
  • 可移植:FastForest 除了 C++ 标准库之外没有其他依赖项

这里有一个小的使用示例,加载你之前转储的模型,并假设模型需要 5 个特征:

std::vector<std::string> features{"f0",  "f1",  "f2",  "f3",  "f4"};
FastForest fastForest("xgb_model.txt", features);
std::vector<float> input{0.0, 0.2, 0.4, 0.6, 0.8};
float output = fastForest(input.data());

创建 FastForest 时,必须告诉它要按哪个顺序传递要素,因为文本文件不存储要素的顺序。

另请注意,FastForest 不会为您执行逻辑转换,因此为了重现predict_proba()您需要应用逻辑转换:

float proba = 1./(1. + std::exp(-output));

treelite包(研究论文、文档(支持将基于树的模型(包括 XGBoost(编译为优化的 C 代码,使推理比使用本机模型库快得多。

您可以考虑使用

model.get_booster().dump_model('xgb_model.txt', with_stats=True)

然后,经过一些解析后,您可以轻松地在 C/C++ 中重现.predict()函数。对于其余的,我不知道xgboost到C的本机移植

最新更新