Hummingbird是一个用于将经过训练的传统 ML 模型编译为张量计算的库

介绍

Hummingbird是一个用于将经过训练的传统 ML 模型编译为张量计算的库。Hummingbird允许用户无缝地利用神经网络框架(例如PyTorch)来加速传统的 ML 模型。感谢Hummingbird,用户可以受益于:(1)神经网络框架中实现的所有当前和未来的优化;(2)本机硬件加速;(3) 拥有支持传统模型和神经网络模型的独特平台;并且无需重新设计模型即可拥有所有这些 (4)。

目前,您可以使用Hummingbird将经过训练的传统 ML 模型转换为PyTorchTorchScriptONNXTVM)。Hummingbird 支持各种 ML 模型和特征器。这些模型包括scikit-learn决策树和随机森林,以及LightGBMXGBoost分类器/回归器。对其他神经网络后端和模型的支持已列入我们的路线图

Hummingbird 还遵循 Sklearn API 提供了方便的统一“推理”API。这允许将 Sklearn 模型与 Hummingbird 生成的模型交换,而无需更改推理代码。通过将模型转换为 PyTorch 和 TorchScript,还可以使用TorchServe为它们提供服务。

蜂鸟的工作原理

Hummingbird 的工作原理是重新配置算法运算符,以便我们可以执行更适合矢量化和 GPU 执行的常规计算。每个运营商都略有不同,我们采用了多种策略。此示例解释了 Hummingbird 将决策树转换为涉及 GEMM(通用矩阵乘法)的张量的策略之一,其中我们使用矩阵乘法实现树的遍历。(GEMM 是我们目前支持的三种树转换策略之一。)


简单决策树

在此示例中,决策树有四个决策节点(橙色)和五个叶节点(蓝色)。该树采用具有五个元素的特征向量作为输入。例如,假设我们要计算此观察的输出:

步骤 1:input tensor 与捕获输入特征和内部节点之间关系的张量A(从上面的决策树模型计算得出)相乘。然后将其与设置为每个内部节点(橙色)的值的张量进行比较,以创建表示从输入到节点的路径的B张量。input path在本例中,树模型有 4 个条件,输入向量为 5,因此张量的形状A为 5x4,张量 B 为 1x4。

步骤2:input path量将与C捕获内部节点是否是该内部节点的父节点的张量相乘,如果是,则它是否在左子树或右子树中(左= 1,右= -1,否则= 0),然后与捕获从叶节点到树根的路径中其父节点的左子节点的计数的张量检查等于,以创建表示从节点到输出的路径的张量输出路径D。在这种情况下,该树模型有 5 个输出和 4 个条件,因此,张量的形状C为 4x5,张量D为 1x5。

步骤 3:output pathE捕获叶节点之间映射的张量相乘以推断最终预测。在这种情况下,树模型有 5 个输出,因此张量的形状E为 5x1。

现在 Hummingbird 已经使用 GEMM 策略编译了一个基于树的模型!有关更多详细信息,请参阅我们论文的图 3 。

感谢Chien Vu在他的博客中为此示例提供了图形和描述!

安装

Hummingbird 在 Linux、Windows 和 MacOS 机器上的 Python 3.8、3.9 和 3.10 上进行了测试。建议使用虚拟环境(请参阅:python3 venv doc在 VS Code 中使用 Python 环境。)

蜂鸟需要 PyTorch >= 1.6.0。请访问此处获取有关如何根据您的平台和硬件安装 PyTorch 的说明。

安装 PyTorch 后,您可以使用以下命令从 pip 获取 Hummingbird:

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>python -m pip install hummingbird-ml
</code></span></span></span></span>

如果您需要可选依赖项 lightgbm 和 xgboost,您可以使用:

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>python -m pip install hummingbird-ml[extra]
</code></span></span></span></span>

另请参阅常见问题的故障排除。

例子

请参阅笔记本部分以获取演示使用和加速的示例。

总的来说,Hummingbird 语法非常直观且简约。要在 DNN 框架上运行传统的 ML 模型,您只需将import hummingbird.ml并添加convert(model, 'dnn_framework')到代码中。下面是使用scikit-learn 随机森林模型和PyTorch作为目标框架的示例。

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from hummingbird.ml import convert, load

# Create some random data for binary classification
num_classes = 2
X = np.random.rand(100000, 28)
y = np.random.randint(num_classes, size=100000)

# Create and train a model (scikit-learn RandomForestClassifier in this case)
skl_model = RandomForestClassifier(n_estimators=10, max_depth=10)
skl_model.fit(X, y)

# Use Hummingbird to convert the model to PyTorch
model = convert(skl_model, 'pytorch')

# Run predictions on CPU
model.predict(X)

# Run predictions on GPU
model.to('cuda')
model.predict(X)

# Save the model
model.save('hb_model')

# Load the model back
model = load('hb_model')

文档

API 文档在这里

您还可以在我们的博客文章中阅读有关蜂鸟的信息。

有关 Hummingbird 的愿景和技术细节的更多详细信息,请查看我们的论文:

贡献

我们欢迎贡献!请参阅贡献指南。

另请参阅我们计划的功能路线图。

猜你喜欢

转载自blog.csdn.net/sinat_37574187/article/details/131860994
ML
今日推荐