ONNX 您所在的位置:网站首页 bootstrap内容 ONNX

ONNX

2023-05-30 11:19| 来源: 网络整理| 查看: 265

Spark 上的 ONNX 推理 项目 05/23/2023

在此示例中,我们将训练 LightGBM 模型,将模型转换为 ONNX 格式,并使用转换后的模型推断 Spark 上的一些测试数据。

Python 依赖项:

onnxmltools==1.7.0 lightgbm==3.2.1 先决条件 将笔记本附加到湖屋。 在左侧,选择“ 添加” 以添加现有 lakehouse 或创建 lakehouse。 可能需要通过以下方式安装 onnxmltools !pip install onnxmltools==1.7.0

加载培训数据

from pyspark.sql import SparkSession # Bootstrap Spark Session spark = SparkSession.builder.getOrCreate() from synapse.ml.core.platform import * df = ( spark.read.format("csv") .option("header", True) .option("inferSchema", True) .load( "wasbs://[email protected]/company_bankruptcy_prediction_data.csv" ) ) display(df)

使用 LightGBM 训练模型

from pyspark.ml.feature import VectorAssembler from synapse.ml.lightgbm import LightGBMClassifier feature_cols = df.columns[1:] featurizer = VectorAssembler(inputCols=feature_cols, outputCol="features") train_data = featurizer.transform(df)["Bankrupt?", "features"] model = ( LightGBMClassifier(featuresCol="features", labelCol="Bankrupt?") .setEarlyStoppingRound(300) .setLambdaL1(0.5) .setNumIterations(1000) .setNumThreads(-1) .setMaxDeltaStep(0.5) .setNumLeaves(31) .setMaxDepth(-1) .setBaggingFraction(0.7) .setFeatureFraction(0.7) .setBaggingFreq(2) .setObjective("binary") .setIsUnbalance(True) .setMinSumHessianInLeaf(20) .setMinGainToSplit(0.01) ) model = model.fit(train_data)

将训练的模型导出到 LightGBM 助推器,将其转换为 ONNX 格式。

import lightgbm as lgb from lightgbm import Booster, LGBMClassifier def convertModel(lgbm_model: LGBMClassifier or Booster, input_size: int) -> bytes: from onnxmltools.convert import convert_lightgbm from onnxconverter_common.data_types import FloatTensorType initial_types = [("input", FloatTensorType([-1, input_size]))] onnx_model = convert_lightgbm( lgbm_model, initial_types=initial_types, target_opset=9 ) return onnx_model.SerializeToString() booster_model_str = model.getLightGBMBooster().modelStr().get() booster = lgb.Booster(model_str=booster_model_str) model_payload_ml = convertModel(booster, len(feature_cols))

将 ONNX 有效负载加载到 中 ONNXModel,并检查模型的输入和输出。

from synapse.ml.onnx import ONNXModel onnx_ml = ONNXModel().setModelPayload(model_payload_ml) print("Model inputs:" + str(onnx_ml.getModelInputs())) print("Model outputs:" + str(onnx_ml.getModelOutputs()))

将模型输入映射到输入数据帧的列名 (FeedDict) ,并将输出数据帧的列名映射到模型输出 (FetchDict) 。

onnx_ml = ( onnx_ml.setDeviceType("CPU") .setFeedDict({"input": "features"}) .setFetchDict({"probability": "probabilities", "prediction": "label"}) .setMiniBatchSize(5000) )

创建一些测试数据并通过 ONNX 模型转换数据。

from pyspark.ml.feature import VectorAssembler import pandas as pd import numpy as np n = 1000 * 1000 m = 95 test = np.random.rand(n, m) testPdf = pd.DataFrame(test) cols = list(map(str, testPdf.columns)) testDf = spark.createDataFrame(testPdf) testDf = testDf.union(testDf).repartition(200) testDf = ( VectorAssembler() .setInputCols(cols) .setOutputCol("features") .transform(testDf) .drop(*cols) .cache() ) display(onnx_ml.transform(testDf)) 后续步骤 如何使用内核 SHAP 解释表格分类模型 如何使用 SynapseML 进行多变量异常检测 如何使用 SynapseML 构建搜索引擎


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有