【问题标题】:Is it possible to train an xgboost model in Python and deploy it Run it in C/C++?是否可以在 Python 中训练 xgboost 模型并将其部署在 C/C++ 中运行?
【发布时间】:2018-11-09 22:04:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: xgboost


    【解决方案1】:

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

    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));
    

    【讨论】:

      【解决方案2】:

      treelite 包(research paperdocumentation)支持将基于树的模型(包括 XGBoost)编译为优化的 C 代码,从而比使用原生模型库更快地进行推理。

      【讨论】:

        【解决方案3】:

        您可以考虑使用将模型转储到文本文件中

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-19
          • 1970-01-01
          • 2017-12-15
          • 2019-02-02
          • 1970-01-01
          • 1970-01-01
          • 2018-04-10
          相关资源
          最近更新 更多