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 serve
sklearn
mlflow models serve my_model
此外,命令行工具可以将模型打包并部署到AWS SageMaker,只要它们支持这种风格即可:mlflow sagemaker
python_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.sklearn
contains save_model
,log_model
和load_model
函数。其次,您可以使用mlflow.models.Model
该类来创建和编写模型。这个类有四个关键功能:
add_flavor
为模型添加味道。每个flavor都有一个字符串名称和一个键值属性字典,其中值可以是任何可以序列化为YAML的对象。save
将模型保存到本地目录。log
使用MLflow Tracking将模型记录为当前运行中的工件。load
从本地目录或先前运行中的工件加载模型。
内置型号口味
MLflow提供了几种可能在您的应用程序中有用的标准风格。具体来说,它的许多部署工具都支持这些风格,因此您可以将这些风格导出自己的模型,以便从所有这些工具中受益:
Python函数(python_function
)
该python_function
模型的味道定义了一个通用的文件系统格式为Python模型和保存和加载模型,并从该格式提供了工具。该格式是自包含的,因为它包含加载和使用模型所需的所有信息。依赖关系直接存储在模型中或通过Conda环境引用。
许多MLflow模型的持久性模块,如mlflow.sklearn
,mlflow.keras
和mlflow.pytorch
,产生与模型python_function
(pyfunc
)的味道。这意味着它们遵循python_function文件系统格式, 并且可以解释为实现指定推理API的通用Python类 。因此,对这些pyfunc
类进行操作的任何工具都可以在包含pyfunc
flavor的任何MLflow模型上运行,无论使用哪个持久性模块或框架来生成模型。这种互操作性非常强大,因为它允许在各种环境中生成任何Python模型。
python_function
模型的约定是具有predict
以下签名的方法或函数:
predict(model_input: pandas.DataFrame) -> [numpy.ndarray | pandas.Series | pandas.DataFrame]
其他MLflow组件期望python_function
模型遵循此约定。
该python_function
模型格式被定义为包含所有需要的数据,代码和结构的目录结构。
该mlflow.pyfunc
模块定义了使用python_function
flavor 保存和加载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_function
flavor的MLflow模型,允许您将它们作为通用Python函数加载以进行推理mlflow.pyfunc.load_pyfunc()
。当您使用h2o
flavor 加载MLflow模型时load_pyfunc()
,将调用h2o.init()方法。因此,h2o(-py)
必须在加载程序的环境中安装正确的版本。您可以通过修改持久H2O模型的YAML配置文件的 条目来自定义给予h2o.init()的参数init
:model.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_model和mlflow_log_model保存或记录模型 。这些函数使用Keras库的内置模型持久性函数将Keras模型序列化为HDF5文件。MLflow由这些函数生成的模型也包含python_function
flavor,允许它们被解释为用于推理的通用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.mleap
save_model()
log_model()
python_function
该mlflow/java
软件包中提供了一个用于加载具有MLeap风格的MLflow模型的配套模块 。
欲了解更多信息,请参见mlflow.spark
,mlflow.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_function
flavor的模型,允许您将它们作为通用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_function
flavor的MLflow模型,允许它们作为通用Python函数加载以进行推理mlflow.pyfunc.load_pyfunc()
。最后,您可以使用该mlflow.sklearn.load_model()
方法加载带有sklearn
scikit-learn模型对象的MLflow模型。
有关更多信息,请参阅mlflow.sklearn
。
Spark MLlib(spark
)
该spark
模型的味道能使出口星火MLlib模型作为MLflow模型。
该mlflow.spark
模块定义save_model()
和 log_model()
方法以MLflow模型格式保存Spark MLlib管道。由这些函数生成的MLflow模型包含python_function
flavor,允许您通过它们将它们作为通用Python函数加载mlflow.pyfunc.load_pyfunc()
。当带有spark
flavor 的模型作为Python函数加载时 load_pyfunc()
, 会为模型推理创建一个新的 SparkContext ; 此外,该功能在评分之前将所有Pandas DataFrame输入转换为Spark DataFrames。虽然这种初始化开销和格式转换延迟对于高性能用例并不理想,但它使您能够轻松地将任何MLlib PipelineModel部署 到MLflow支持的任何生产环境(SageMaker,AzureML等)。
最后,该mlflow.spark.load_model()
方法用于加载具有spark
Spark 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_function
MLflow ONNX模型的表示使用ONNX运行时执行引擎进行评估最后,您可以使用该mlflow.onnx.load_model()
方法以onnx
本机ONNX格式加载MLflow模型。
有关更多信息,请参阅mlflow.onnx
和http://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.pyfunc
API以MLflow模型格式保存此模型的实例。最后,它以格式加载模型 并使用它来评估样本输入。n = 5
python_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-Type
application/json
application/json; format=pandas-split
- JSON序列化的pandas DataFrames的
records
方向。我们不建议使用此格式,因为无法保证保留列顺序。使用Content-Type
请求标头值 指定此格式。application/json; format=pandas-records
- CSV序列化的pandas DataFrames。例如,。使用请求标头值指定此格式。
data = pandas_df.to_csv()
Content-Type
text/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-Type
application/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-Type
application/json
命令
run-local
在Docker容器中本地部署模型。图像和环境应与模型远程运行的方式相同,因此在部署之前测试模型非常有用。- 该
build-and-push-container
CLI命令构建一个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'
或IntegerType:int32
返回可以适合结果的最左边的整数, 如果没有,则引发异常。'long'
或LongType:int64
返回可以适合结果的最左边的长整数,如果没有则引发异常。- 数组类型(IntegerType | LongType):返回一个可以放入所需尺寸的所有整数列。
'float'
或FloatType:float32
如果没有数字列,则返回最左边的数字结果转换 为或引发异常。'double'
或DoubleType:double
如果没有数字列,则返回最左边的数字结果转换 为或引发异常。- ArrayType(FloatType | DoubleType):返回强制转换为请求的所有数字列。类型。如果存在数字列,则会引发异常。
'string'
或StringType:Result是最左边的列转换为字符串。- ArrayType(StringType):返回转换为字符串的所有列。
例
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>))