mlflow model

MLflow模型

MLflow模型是用于打包机器学习模型的标准格式,可用于各种下游工具 - 例如,通过REST API实时提供服务或在Apache Spark上进行批量推理。该格式定义了一种约定,允许您以不同的“风格”保存模型,这些“风味”可以被不同的下游工具理解。

存储格式

每个MLflow模型都是一个包含任意文件MLmodel 的目录,以及目录根目录中的一个文件,该文件可以定义可以查看模型的多种风格

Flavors是使MLflow模型功能强大的关键概念:它们是部署工具可用于理解模型的约定,这使得编写可与任何ML库中的模型一起使用的工具成为可能,而无需将每个工具与每个库集成。MLflow定义了所有内置部署工具支持的几种“标准”风格,例如描述如何将模型作为Python函数运行的“Python函数”风格。但是,库也可以定义和使用其他类型。例如,MLflow的mlflow.sklearn库允许将模型加载为scikit-learn Pipeline对象,以便在知道scikit-learn的代码中使用,或者作为通用Python函数用于仅需要应用模型的工具(例如,工具)用于将模型部署到Amazon SageMaker)。mlflow sagemaker

特定模型支持的所有风格都MLmodel以YAML格式在其文件中定义。例如,mlflow.sklearn输出模型如下:

# Directory written by mlflow.sklearn.save_model(model, "my_model")
my_model/
├── MLmodel
└── model.pkl

它的MLmodel文件描述了两种风格:

time_created: 2018-05-25T17:28:53.35

flavors:
  sklearn:
    sklearn_version: 0.19.1
    pickled_model: model.pkl
  python_function:
    loader_module: mlflow.sklearn

该模型然后可以与任何支持工具中使用任一sklearn或 python_function模型的味道。例如,该命令可以为具有flavor 的模型提供服务:mlflow models servesklearn

mlflow models serve my_model

此外,命令行工具可以将模型打包并部署到AWS SageMaker,只要它们支持这种风格即可:mlflow sagemakerpython_function

mlflow sagemaker deploy -m my_model [other options]

MLmodel格式的字段

除了从口味场列出了模型的口味,在MLmodel YAML格式可以包含以下字段:

TIME_CREATED

创建模型的日期和时间,采用UTC ISO 8601格式。

run_id

如果使用MLflow Tracking保存模型,则创建模型的运行的ID 。

API模型

您可以通过多种方式保存和加载MLflow模型。首先,MLflow包括与几个公共库的集成。例如,scikit-learn模型的mlflow.sklearncontains save_modellog_modelload_model函数。其次,您可以使用mlflow.models.Model该类来创建和编写模型。这个类有四个关键功能:

  • add_flavor为模型添加味道。每个flavor都有一个字符串名称和一个键值属性字典,其中值可以是任何可以序列化为YAML的对象。
  • save 将模型保存到本地目录。
  • log 使用MLflow Tracking将模型记录为当前运行中的工件。
  • load 从本地目录或先前运行中的工件加载模型。

内置型号口味

MLflow提供了几种可能在您的应用程序中有用的标准风格。具体来说,它的许多部署工具都支持这些风格,因此您可以将这些风格导出自己的模型,以便从所有这些工具中受益:

Python函数(python_function

python_function模型的味道定义了一个通用的文件系统格式为Python模型和保存和加载模型,并从该格式提供了工具。该格式是自包含的,因为它包含加载和使用模型所需的所有信息。依赖关系直接存储在模型中或通过Conda环境引用。

许多MLflow模型的持久性模块,如mlflow.sklearnmlflow.kerasmlflow.pytorch,产生与模型python_functionpyfunc)的味道。这意味着它们遵循python_function文件系统格式, 并且可以解释为实现指定推理API的通用Python类 。因此,对这些pyfunc 类进行操作的任何工具都可以在包含pyfuncflavor的任何MLflow模型上运行,无论使用哪个持久性模块或框架来生成模型。这种互操作性非常强大,因为它允许在各种环境中生成任何Python模型。

python_function模型的约定是具有predict以下签名的方法或函数:

predict(model_input: pandas.DataFrame) -> [numpy.ndarray | pandas.Series | pandas.DataFrame]

其他MLflow组件期望python_function模型遵循此约定。

python_function 模型格式被定义为包含所有需要的数据,代码和结构的目录结构。

mlflow.pyfunc模块定义了使用python_functionflavor 保存和加载MLflow模型的功能 。该模块还包括用于创建自定义Python模型的实用程序。有关更多信息,请参阅自定义Python模型文档 和mlflow.pyfunc文档。

R函数(crate

crate模型风味定义表示aribtrary R预测功能Mlflow模型的通用模型格式。期望预测函数将数据帧作为输入并产生具有预测作为输出的数据帧,向量或列表。

这种味道需要安装R才能使用。

H 2 O(h2o

h2o模型味道启用日志记录和装载H2O模型。

mlflow.h2o模块定义save_model()和 log_model()在MLflow型号格式保存H2O模型的方法。这些方法生成带有python_functionflavor的MLflow模型,允许您将它们作为通用Python函数加载以进行推理mlflow.pyfunc.load_pyfunc()。当您使用h2oflavor 加载MLflow模型时load_pyfunc(),将调用h2o.init()方法。因此,h2o(-py)必须在加载程序的环境中安装正确的版本。您可以通过修改持久H2O模型的YAML配置文件的 条目来自定义给予h2o.init()的参数initmodel.h2o/h2o.yaml

最后,您可以使用该mlflow.h2o.load_model()方法加载MLflow模型,其 h2o风味为H2O模型对象。

有关更多信息,请参阅mlflow.h2o

硬(keras

keras模型味道启用日志记录和装载Keras模型。它在Python和R客户端都可用。该mlflow.keras模块定义save_model()log_model()功能可用于在Python中以MLflow模型格式保存Keras模型。同样,在R中,您可以使用mlflow_save_modelmlflow_log_model保存或记录模型 。这些函数使用Keras库的内置模型持久性函数将Keras模型序列化为HDF5文件。MLflow由这些函数生成的模型也包含python_functionflavor,允许它们被解释为用于推理的通用Python函数mlflow.pyfunc.load_pyfunc()。最后,您可以mlflow.keras.load_model()在Python或mlflow_load_model中使用该函数 R中的函数加载MLflow模型,其keras风味为 Keras Model对象

有关更多信息,请参阅mlflow.keras

MLeap(mleap

mleap模型风味支持使用节省的Spark车型在MLflow格式 MLeap持久性机制。MLeap是Spark模型的推理优化格式和执行引擎,它不依赖于 SparkContext 来评估输入。

您可以mleap通过指定or 方法的 sample_input参数(推荐)以MLflow格式保存Spark模型。该模块还定义和 在MLflow格式保存MLeap模型的方法,但这些方法不包括在他们生产的车型的味道。mlflow.spark.save_model()mlflow.spark.log_model()mlflow.mleapsave_model()log_model()python_function

mlflow/java软件包中提供了一个用于加载具有MLeap风格的MLflow模型的配套模块 。

欲了解更多信息,请参见mlflow.sparkmlflow.mleap和 MLeap文档

PyTorch(pytorch

pytorch模型味道启用日志记录和装载PyTorch模型。

mlflow.pytorch模块定义了用于保存和加载MLflow模型的实用程序 pytorch。您可以使用mlflow.pytorch.save_model()mlflow.pytorch.log_model()方法以MLflow格式保存PyTorch模型; 这两个函数都使用torch.save()方法来序列化PyTorch模型。此外,您可以使用该mlflow.pytorch.load_model() 方法加载MLflow模型,其pytorch味道为PyTorch模型对象。最后,由by产生mlflow.pytorch.save_model()mlflow.pytorch.log_model()包含python_functionflavor的模型,允许您将它们作为通用Python函数加载以进行推理mlflow.pyfunc.load_pyfunc()

有关更多信息,请参阅mlflow.pytorch

Scikit-learn(sklearn

sklearn模型的味道提供了一个易于使用的界面,用于保存和加载scikit学习模式。该mlflow.sklearn模块定义 save_model()和 log_model()功能,以MLflow格式保存scikit-learn模型,使用Python的pickle模块(Pickle)或CloudPickle进行模型序列化。这些函数生成具有python_functionflavor的MLflow模型,允许它们作为通用Python函数加载以进行推理mlflow.pyfunc.load_pyfunc()。最后,您可以使用该mlflow.sklearn.load_model()方法加载带有sklearnscikit-learn模型对象的MLflow模型。

有关更多信息,请参阅mlflow.sklearn

Spark MLlib(spark

spark模型的味道能使出口星火MLlib模型作为MLflow模型。

mlflow.spark模块定义save_model()和 log_model()方法以MLflow模型格式保存Spark MLlib管道。由这些函数生成的MLflow模型包含python_functionflavor,允许您通过它们将它们作为通用Python函数加载mlflow.pyfunc.load_pyfunc()。当带有sparkflavor 的模型作为Python函数加载时 load_pyfunc(), 会为模型推理创建一个新的 SparkContext ; 此外,该功能在评分之前将所有Pandas DataFrame输入转换为Spark DataFrames。虽然这种初始化开销和格式转换延迟对于高性能用例并不理想,但它使您能够轻松地将任何MLlib PipelineModel部署 到MLflow支持的任何生产环境(SageMaker,AzureML等)。

最后,该mlflow.spark.load_model()方法用于加载具有sparkSpark MLlib管道风味的MLflow模型。

有关更多信息,请参阅mlflow.spark

TensorFlow(tensorflow

tensorflow模型味道允许系列化TensorFlow模型 SavedModel格式 将在MLflow格式通过登录mlflow.tensorflow.save_model()和 mlflow.tensorflow.log_model()方法。这些方法还python_function 为它们生成的MLflow模型添加了风格,允许将模型解释为通用Python函数以进行推理mlflow.pyfunc.load_pyfunc()。最后,您可以使用该mlflow.tensorflow.load_model()方法加载MLflow模型,其tensorflow 味道为TensorFlow图。

有关更多信息,请参阅mlflow.tensorflow

ONNX(onnx

onnx模型能够风味的记录ONNX车型在通过MLflow格式mlflow.onnx.save_model()mlflow.onnx.log_model()方法。这些方法还python_function为它们生成的MLflow模型添加了风格,允许将模型解释为通用Python函数以进行推理mlflow.pyfunc.load_pyfunc()python_functionMLflow ONNX模型的表示使用ONNX运行时执行引擎进行评估最后,您可以使用该mlflow.onnx.load_model()方法以onnx本机ONNX格式加载MLflow模型。

有关更多信息,请参阅mlflow.onnxhttp://onnx.ai/

模型定制

虽然MLflow的内置模型持久性实用程序可以方便地以MLflow模型格式打包来自各种流行ML库的模型,但它们并未涵盖所有用例。例如,您可能希望使用ML库内置版本未明确支持的ML库中的模型。或者,您可能希望打包自定义推理代码和数据以创建MLflow模型。幸运的是,MLflow提供了两种可用于完成这些任务的解决方案:自定义Python模型自定义风格

自定义Python模型

mlflow.pyfunc模块提供save_model()与 log_model()实用程序与创建MLflow模型 python_function包含用户指定的代码和风味工件(文件)的依赖关系。这些工件依赖项可能包括由任何Python ML库生成的序列化模型。

由于这些自定义模型包含python_function风格,因此可以将它们部署到MLflow支持的任何生产环境中,例如SageMaker,AzureML或本地REST端点。

以下示例演示了如何使用该mlflow.pyfunc模块创建自定义Python模型。有关使用MLflow python_function实用程序进行模型自定义的其他信息 ,请参阅 python_function自定义模型文档

示例:创建自定义“添加n”模型

此示例为自定义模型定义一个类,该类将指定的数值添加n到Pandas DataFrame输入的所有列。然后,它使用mlflow.pyfuncAPI以MLflow模型格式保存此模型的实例。最后,它以格式加载模型 并使用它来评估样本输入。n = 5python_function

import mlflow.pyfunc

# Define the model class
class AddN(mlflow.pyfunc.PythonModel):

    def __init__(self, n):
        self.n = n

    def predict(self, context, model_input):
        return model_input.apply(lambda column: column + self.n)

# Construct and save the model
model_path = "add_n_model"
add5_model = AddN(n=5)
mlflow.pyfunc.save_model(path=model_path, python_model=add5_model)

# Load the model in `python_function` format
loaded_model = mlflow.pyfunc.load_pyfunc(model_path)

# Evaluate the model
import pandas as pd
model_input = pd.DataFrame([range(10)])
model_output = loaded_model.predict(model_input)
assert model_output.equals(pd.DataFrame([range(5, 15)]))
示例:以MLflow格式保存XGBoost模型

此示例首先使用XGBoost库训练并保存渐变提升树模型。接下来,它定义了一个围绕XGBoost模型的包装类,它符合MLflow的python_function 推理API。然后,它使用包装类和保存的XGBoost模型来构造MLflow模型,该模型使用渐变提升树执行推理。最后,它以python_function格式加载MLflow模型并使用它来评估测试数据。

# Load training and test datasets
import xgboost as xgb
from sklearn import datasets
from sklearn.model_selection import train_test_split

iris = datasets.load_iris()
x = iris.data[:, 2:]
y = iris.target
x_train, x_test, y_train, _ = train_test_split(x, y, test_size=0.2, random_state=42)
dtrain = xgb.DMatrix(x_train, label=y_train)

# Train and save an XGBoost model
xgb_model = xgb.train(params={'max_depth': 10}, dtrain=dtrain, num_boost_round=10)
xgb_model_path = "xgb_model.pth"
xgb_model.save_model(xgb_model_path)

# Create an `artifacts` dictionary that assigns a unique name to the saved XGBoost model file.
# This dictionary will be passed to `mlflow.pyfunc.save_model`, which will copy the model file
# into the new MLflow Model's directory.
artifacts = {
    "xgb_model": xgb_model_path
}

# Define the model class
import mlflow.pyfunc
class XGBWrapper(mlflow.pyfunc.PythonModel):

    def load_context(self, context):
        import xgboost as xgb
        self.xgb_model = xgb.Booster()
        self.xgb_model.load_model(context.artifacts["xgb_model"])

    def predict(self, context, model_input):
        input_matrix = xgb.DMatrix(model_input.values)
        return self.xgb_model.predict(input_matrix)

# Create a Conda environment for the new MLflow Model that contains the XGBoost library
# as a dependency, as well as the required CloudPickle library
import cloudpickle
conda_env = {
    'channels': ['defaults'],
    'dependencies': [
      'xgboost={}'.format(xgb.__version__),
      'cloudpickle={}'.format(cloudpickle.__version__),
    ],
    'name': 'xgb_env'
}

# Save the MLflow Model
mlflow_pyfunc_model_path = "xgb_mlflow_pyfunc"
mlflow.pyfunc.save_model(
        path=mlflow_pyfunc_model_path, python_model=XGBWrapper(), artifacts=artifacts,
        conda_env=conda_env)

# Load the model in `python_function` format
loaded_model = mlflow.pyfunc.load_pyfunc(mlflow_pyfunc_model_path)

# Evaluate the model
import pandas as pd
test_predictions = loaded_model.predict(pd.DataFrame(x_test))
print(test_predictions)

自定义口味

您还可以通过编写自定义风格来创建自定义MLflow模型。

Model API存储格式部分所述,MLflow模型由包含MLmodel配置文件的文件目录定义。此MLmodel 文件描述了各种模型属性,包括可以解释模型的风格。该MLmodel文件包含每个flavor名称的条目; 每个条目都是YAML格式的特定于风味的属性集合。

要创建支持自定义模型的新样式,可以定义要包含在MLmodel配置文件中的特定于flavor的属性集,以及可以解释模型目录内容和flavor的属性的代码。

作为一个例子,让我们检查一下mlflow.pytorch与MLflow pytorch风味相对应的模块 。在该mlflow.pytorch.save_model()方法中,PyTorch模型保存到指定的输出目录。此外,mlflow.pytorch.save_model()利用 mlflow.models.Model.add_flavor()mlflow.models.Model.save()函数来生成MLmodel包含pytorch风味的配置。生成的配置具有多个特定于特定于风格的属性,例如pytorch_version,表示用于训练模型的PyTorch库的版本。为了解释由其生成的模型目录 save_model(),该mlflow.pytorch模块还定义了一个load_model()方法。 从指定的模型目录中mlflow.pytorch.load_model()读取MLmodel配置并使用该配置属性pytorch 从其序列化表示中加载和返回PyTorch模型的flavor。

内置部署工具

MLflow提供了在本地计算机和多个生产环境中部署MLflow模型的工具。并非所有部署方法都适用于所有型号的风格。

部署MLflow模型

MLflow可以在本地部署模型作为本地REST API端点或直接对文件进行评分。此外,MLflow可以将模型打包为具有REST API端点的自包含Docker镜像。该映像可用于将模型安全地部署到各种环境,如Kubernetes。

您可以在本地部署MLflow模型,也可以使用CLI接口生成Docker映像 mlflow.models

REST API服务器接受以下数据格式作为/invocations路径的POST输入:

  • JSON序列化的pandas DataFrames的split方向。例如, 。这种格式被指定使用 的请求头值或。data = pandas_df.to_json(orient='split')Content-Typeapplication/jsonapplication/json; format=pandas-split
  • JSON序列化的pandas DataFrames的records方向。我们不建议使用此格式,因为无法保证保留列顺序。使用Content-Type请求标头值 指定此格式。application/json; format=pandas-records
  • CSV序列化的pandas DataFrames。例如,。使用请求标头值指定此格式。data = pandas_df.to_csv()Content-Typetext/csv

示例请求:

# split-oriented
curl http://127.0.0.1:5000/invocations -H 'Content-Type: application/json' -d '{
 "columns": ["a", "b", "c"],
 "data": [[1, 2, 3], [4, 5, 6]]
}'

# record-oriented (fine for vector rows, loses ordering for JSON records)
curl http://127.0.0.1:5000/invocations -H 'Content-Type: application/json; format=pandas-records' -d '[[1, 2, 3], [4, 5, 6]]'

有关序列化pandas DataFrames的更多信息,请参阅 pandas.DataFrame.to_json

predict命令接受相同的输入格式。格式指定为命令行参数。

命令
  • serve 将模型部署为本地REST API服务器。
  • build_docker 打包服务的REST API端点

    模型作为码头图像。

  • predict 使用该模型生成本地CSV或JSON文件的预测。

有关详细信息,请参阅:

mlflow models --help
mlflow models serve --help
mlflow models predict --help
mlflow models build-docker --help

python_function在Microsoft Azure ML上部署模型

mlflow.azureml模块可以将python_function模型打包到Azure ML容器映像中。这些映像可以部署到Azure Kubernetes服务(AKS)和Azure容器实例(ACI)平台,以实现实时服务。生成的Azure ML ContainerImage包含一个Web服务器,它接受以下数据格式作为输入:

  • JSON序列化的pandas DataFrames的split方向。例如,。使用请求标头值指定此格式。data = pandas_df.to_json(orient='split')Content-Typeapplication/json
  • build_image向现有Azure ML工作区注册MLflow模型,并构建Azure ML容器映像以部署到AKS和ACI。在Azure的ML SDK要求才能使用此功能。Azure ML SDK需要Python 3.它不能与早期版本的Python一起安装。

使用Python API的示例工作流程

import mlflow.azureml

from azureml.core import Workspace
from azureml.core.webservice import AciWebservice, Webservice


# Create or load an existing Azure ML workspace. You can also load an existing workspace using
# Workspace.get(name="<workspace_name>")
workspace_name = "<Name of your Azure ML workspace>"
subscription_id = "<Your Azure subscription ID>"
resource_group = "<Name of the Azure resource group in which to create Azure ML resources>"
location = "<Name of the Azure location (region) in which to create Azure ML resources>"
azure_workspace = Workspace.create(name=workspace_name,
                                   subscription_id=subscription_id,
                                   resource_group=resource_group,
                                   location=location,
                                   create_resource_group=True,
                                   exist_okay=True)

# Build an Azure ML container image for deployment
azure_image, azure_model = mlflow.azureml.build_image(model_uri="<path-to-model>",
                                                      workspace=azure_workspace,
                                                      description="Wine regression model 1",
                                                      synchronous=True)
# If your image build failed, you can access build logs at the following URI:
print("Access the following URI for build logs: {}".format(azure_image.image_build_log_uri))

# Deploy the container image to ACI
webservice_deployment_config = AciWebservice.deploy_configuration()
webservice = Webservice.deploy_from_image(
                    image=azure_image, workspace=azure_workspace, name="<deployment-name>")
webservice.wait_for_deployment()

# After the image deployment completes, requests can be posted via HTTP to the new ACI
# webservice's scoring URI. The following example posts a sample input from the wine dataset
# used in the MLflow ElasticNet example:
# https://github.com/mlflow/mlflow/tree/master/examples/sklearn_elasticnet_wine
print("Scoring URI is: %s", webservice.scoring_uri)

import requests
import json

# `sample_input` is a JSON-serialized pandas DataFrame with the `split` orientation
sample_input = {
    "columns": [
        "alcohol",
        "chlorides",
        "citric acid",
        "density",
        "fixed acidity",
        "free sulfur dioxide",
        "pH",
        "residual sugar",
        "sulphates",
        "total sulfur dioxide",
        "volatile acidity"
    ],
    "data": [
        [8.8, 0.045, 0.36, 1.001, 7, 45, 3, 20.7, 0.45, 170, 0.27]
    ]
}
response = requests.post(
              url=webservice.scoring_uri, data=json.dumps(sample_input),
              headers={"Content-type": "application/json"})
response_json = json.loads(response.text)
print(response_json)

使用MLflow CLI的示例工作流程

mlflow azureml build-image -w <workspace-name> -m <model-path> -d "Wine regression model 1"

az ml service create aci -n <deployment-name> --image-id <image-name>:<image-version>

# After the image deployment completes, requests can be posted via HTTP to the new ACI
# webservice's scoring URI. The following example posts a sample input from the wine dataset
# used in the MLflow ElasticNet example:
# https://github.com/mlflow/mlflow/tree/master/examples/sklearn_elasticnet_wine

scoring_uri=$(az ml service show --name <deployment-name> -v | jq -r ".scoringUri")

# `sample_input` is a JSON-serialized pandas DataFrame with the `split` orientation
sample_input='
{
 "columns": [
 "alcohol",
 "chlorides",
 "citric acid",
 "density",
 "fixed acidity",
 "free sulfur dioxide",
 "pH",
 "residual sugar",
 "sulphates",
 "total sulfur dioxide",
 "volatile acidity"
 ],
 "data": [
 [8.8, 0.045, 0.36, 1.001, 7, 45, 3, 20.7, 0.45, 170, 0.27]
 ]
}'

echo $sample_input | curl -s -X POST $scoring_uri\
-H 'Cache-Control: no-cache'\
-H 'Content-Type: application/json'\
-d @-

有关详细信息,请参阅:

mlflow azureml --help
mlflow azureml build-image --help

python_function在Amazon SageMaker上部署模型

mlflow.sagemaker模块可以python_function在具有SageMaker兼容环境的Docker容器中本地部署模型,并在SageMaker上远程部署模型。要远程部署到SageMaker,您需要设置环境和用户帐户。要将自定义模型导出到SageMaker,您需要在Amazon ECR上提供与MLflow兼容的Docker镜像。MLflow提供默认的Docker镜像定义; 但是,由您来构建映像并将其上载到ECR。MLflow包括build_and_push_container执行此步骤的效用函数。构建和上传后,您可以将MLflow容器用于所有MLflow模型。使用该mlflow.sagemaker 模块部署的模型Web服务器接受以下数据格式作为输入,具体取决于部署风格:

  • python_function:对于此部署风格,端点接受本地模型部署文档中描述的相同格式。
  • mleap:对于此部署风格,端点仅接受split方向上的 JSON序列化pandas DataFrame 。例如, 。使用 请求标头值指定此格式。data = pandas_df.to_json(orient='split')Content-Typeapplication/json
命令
  • run-local在Docker容器中本地部署模型。图像和环境应与模型远程运行的方式相同,因此在部署之前测试模型非常有用。
  • build-and-push-containerCLI命令构建一个MLfLow多克尔图像并上传到ECR。调用者必须设置正确的权限。图像是在本地构建的,并且需要Docker存在于执行此步骤的计算机上。
  • deploy在Amazon SageMaker上部署模型。MLflow将Python Function模型上传到S3并启动为该模型提供服务的Amazon SageMaker端点。

使用MLflow CLI的示例工作流程

mlflow sagemaker build-and-push-container  - build the container (only needs to be called once)
mlflow sagemaker run-local -m <path-to-model>  - test the model locally
mlflow sagemaker deploy <parameters> - deploy the model remotely

有关详细信息,请参阅:

mlflow sagemaker --help
mlflow sagemaker build-and-push-container --help
mlflow sagemaker run-local --help
mlflow sagemaker deploy --help

python_function模型导出为Apache Spark UDF

您可以将python_function模型输出为Apache Spark UDF,可以将其上载到Spark群集并用于对模型进行评分。

pyfunc_udf = mlflow.pyfunc.spark_udf(<path-to-model>)
df = spark_df.withColumn("prediction", pyfunc_udf(<features>))

生成的UDF基于Spark的Pandas UDF,目前仅限于为每个观察生成单个值或相同类型的值数组。默认情况下,我们将第一个数字列作为double返回。您可以通过提供result_type 参数来控制返回的结果。支持以下值:

  • 'int'IntegerTypeint32返回可以适合结果的最左边的整数, 如果没有,则引发异常。
  • 'long'LongTypeint64 返回可以适合结果的最左边的长整数,如果没有则引发异常。
  • 数组类型IntegerType | LongType):返回一个可以放入所需尺寸的所有整数列。
  • 'float'FloatTypefloat32如果没有数字列,则返回最左边的数字结果转换 为或引发异常。
  • 'double'DoubleTypedouble如果没有数字列,则返回最左边的数字结果转换 为或引发异常。
  • ArrayTypeFloatType | DoubleType):返回强制转换为请求的所有数字列。类型。如果存在数字列,则会引发异常。
  • 'string'StringType:Result是最左边的列转换为字符串。
  • ArrayTypeStringType):返回转换为字符串的所有列。

from pyspark.sql.types import ArrayType, FloatType
pyfunc_udf = mlflow.pyfunc.spark_udf(<path-to-model>, result_type=ArrayType(FloatType()))
# The prediction column will contain all the numeric columns returned by the model as floats
df = spark_df.withColumn("prediction", pyfunc_udf(<features>))

转载于:https://my.oschina.net/u/269325/blog/3078309

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值