注意
转到结尾 下载完整的示例代码。
ONNX 运行时后端用于 ONNX¶
ONNX 运行时 扩展了 onnx 后端 API,以使用此运行时执行预测。让我们使用 API 计算一个简单逻辑回归模型的预测。
import skl2onnx
import onnxruntime
import onnx
import sklearn
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
import numpy
from onnxruntime import get_device
import numpy as np
import onnxruntime.backend as backend
让我们先创建一个 ONNX 图。
让我们使用 ONNX 后端 API 测试它。
model = onnx.load(name)
rep = backend.prepare(model)
x = np.array(
[[-1.0, -2.0, 5.0, 6.0], [-1.0, -2.0, -3.0, -4.0], [-1.0, -2.0, 7.0, 8.0]],
dtype=np.float32,
)
label, proba = rep.run(x)
print("label={}".format(label))
print("probabilities={}".format(proba))
label=[2 0 2]
probabilities=[{0: 0.0, 1: 0.0, 2: 1.0}, {0: 1.0, 1: 1.9515885113950192e-38, 2: 0.0}, {0: 0.0, 1: 0.0, 2: 1.0}]
设备取决于软件包的编译方式,GPU 或 CPU。
print(get_device())
GPU
后端也可以直接加载模型,而无需使用 onnx。
rep = backend.prepare(name)
x = np.array(
[[-1.0, -2.0, -3.0, -4.0], [-1.0, -2.0, -3.0, -4.0], [-1.0, -2.0, -3.0, -4.0]],
dtype=np.float32,
)
label, proba = rep.run(x)
print("label={}".format(label))
print("probabilities={}".format(proba))
label=[0 0 0]
probabilities=[{0: 1.0, 1: 1.9515885113950192e-38, 2: 0.0}, {0: 1.0, 1: 1.9515885113950192e-38, 2: 0.0}, {0: 1.0, 1: 1.9515885113950192e-38, 2: 0.0}]
后端 API 由其他框架实现,使用相同的 API 更轻松地在多个运行时之间切换。
此示例使用的版本
print("numpy:", numpy.__version__)
print("scikit-learn:", sklearn.__version__)
print("onnx: ", onnx.__version__)
print("onnxruntime: ", onnxruntime.__version__)
print("skl2onnx: ", skl2onnx.__version__)
numpy: 1.26.4
scikit-learn: 1.6.dev0
onnx: 1.17.0
onnxruntime: 1.18.0+cu118
skl2onnx: 1.17.0
脚本的总运行时间:(0 分 17.934 秒)