mlflow.pyspark.ml
- mlflow.pyspark.ml.autolog(log_models=True, log_datasets=True, disable=False, exclusive=False, disable_for_unsupported_versions=False, silent=False, log_post_training_metrics=True, registered_model_name=None, log_input_examples=False, log_model_signatures=True, log_model_allowlist=None, extra_tags=None)[源代码]
备注
Autologging 已知与以下包版本兼容:
3.1.2
<=pyspark
<=3.5.3
。当与该范围之外的包版本一起使用时,Autologging 可能无法成功。启用(或禁用)并配置 pyspark ml 估计器的自动日志记录。此方法不是线程安全的。此 API 需要 Spark 3.0 或更高版本。
- 何时执行自动日志记录?
当你调用
Estimator.fit
时会执行自动日志记录,除了pyspark.ml.feature
下的估计器(特征提取器)。- 记录的信息
- 参数
通过
estimator.params
获得的参数。如果一个参数值也是一个Estimator
,那么被包装的估计器中的参数也将被记录,嵌套的参数键将是 {estimator_uid}.{param_name}
- 标签
一个估计器类名(例如“LinearRegression”)。
一个完全限定的估计器类名(例如 “pyspark.ml.regression.LinearRegression”)。
- 训练后指标
当用户在模型训练后调用评估器API时,MLflow 尝试捕获 Evaluator.evaluate 结果,并将它们记录为与模型关联的运行中的 MLflow 指标。所有 pyspark ML 评估器都受支持。
对于训练后指标的自动记录,指标键的格式为:”{metric_name}[-{call_index}]_{dataset_name}”
指标名称是由 Evaluator.getMetricName() 返回的名称。
如果对同一个 pyspark ML 评估器指标进行了多次调用,每个后续调用都会在指标键中添加一个“call_index”(从 2 开始)。
MLflow 使用预测输入数据集变量名作为指标键中的“dataset_name”。“预测输入数据集变量”指的是作为 model.transform 调用的 dataset 参数使用的变量。注意:MLflow 捕获最外层调用帧中的“预测输入数据集”实例,并获取最外层调用帧中的变量名。如果“预测输入数据集”实例是一个没有定义变量名的中间表达式,则数据集名称设置为“unknown_dataset”。如果多个“预测输入数据集”实例具有相同的变量名,则后续的实例将在检查的数据集名称后附加一个索引(从2开始)。
- 限制
MLflow 无法找到从给定预测结果派生的其他对象的运行信息(例如,通过对预测结果数据集进行某些转换)。
- 工件
一个包含拟合估计器的 MLflow 模型,具有
mlflow.spark
风格(通过mlflow.spark.log_model()
记录)。请注意,出于性能和存储空间的考虑,大型模型可能不会自动记录,并且尚未支持 Pipelines 和超参数调优元估计器(例如 CrossValidator)的自动记录。有关详细信息,请参见下面的log_models
参数。对于训练后指标API调用,会记录一个“metric_info.json”工件。这是一个JSON对象,其键是MLflow训练后指标名称(键格式见“训练后指标”部分),其值是对应的评估器信息,包括评估器类名和评估器参数。
- 元估计器的自动日志记录是如何工作的?
当一个元估计器(例如 Pipeline、CrossValidator、TrainValidationSplit、OneVsRest)调用
fit()
时,它会在其子估计器上调用fit()
。自动记录不会对这些组成部分的fit()
调用执行日志记录。记录了一个名为“estimator_info.json”的工件,其中包含一个描述元估计器层次结构的 hierarchy 条目。该层次结构包括所有嵌套阶段的扩展条目,例如嵌套的管道阶段。
- 参数搜索
除了记录上述信息外,参数搜索元估计器(CrossValidator 和 TrainValidationSplit)的自动记录还会记录每个探索参数集的子运行及其指标,以及最佳模型和最佳参数(如果可用)的工件和参数。为了提高可读性,参数搜索估计器中的“estimatorParamMaps”参数将被记录在“estimator_info”工件中,参见以下描述。在“estimator_info.json”工件中,除了“hierarchy”外,还记录了另外两项:“tuning_parameter_map_list”:包含调优中使用的所有参数映射的列表,以及“tuned_estimator_parameter_map”:调优估计器的参数映射。记录一个“best_parameters.json”工件,包含搜索出的最佳参数。记录一个“search_results.csv”工件,包含搜索结果,它是一个包含两列的表格:“params”和“metric”。
- 参数:
log_models – 如果
True
,如果训练的模型在允许列表中,它们将被记录为 MLflow 模型工件。如果False
,训练的模型不会被记录。注意:内置的允许列表排除了一些模型(例如 ALS 模型),这些模型可能很大。要指定自定义允许列表,请创建一个包含完全限定估计器类名的换行符分隔列表的文件,并将 “spark.mlflow.pysparkml.autolog.logModelAllowlistFile” Spark 配置设置为您的允许列表文件的路径。log_datasets – 如果
True
,数据集信息将被记录到 MLflow 跟踪中。如果False
,数据集信息将不会被记录。disable – 如果
True
,禁用 scikit-learn 自动记录集成。如果False
,启用 pyspark ML 自动记录集成。exclusive – 如果
True
,自动记录的内容不会记录到用户创建的 fluent 运行中。如果False
,自动记录的内容会记录到活动的 fluent 运行中,这可能是用户创建的。disable_for_unsupported_versions – 如果
True
,则对未在此 MLflow 客户端版本中测试或不兼容的 pyspark 版本禁用自动日志记录。silent – 如果
True
,在 pyspark ML 自动记录期间抑制来自 MLflow 的所有事件日志和警告。如果False
,在 pyspark ML 自动记录期间显示所有事件和警告。log_post_training_metrics – 如果
True
,训练后的指标会被记录。默认为True
。更多详情请参见 训练后指标 部分。registered_model_name – 如果提供,每次训练模型时,它都会被注册为具有此名称的已注册模型的新的模型版本。如果该注册模型尚不存在,则会创建它。
log_input_examples – 如果
True
,训练数据集中的输入示例将与pyspark ml模型工件一起在训练期间收集并记录。如果False
,则不记录输入示例。log_model_signatures – 如果
True
,在训练期间会收集并记录描述模型输入和输出的模型签名
以及 Spark ML 管道/估计器工件。如果False
,则不会记录签名。 .. 警告:log_model_allowlist – 如果提供,它将覆盖 mlflow 中的默认日志模型允许列表。这优先于 spark 配置中的 “spark.mlflow.pysparkml.autolog.logModelAllowlistFile”。 mlflow 中的默认日志模型允许列表 .. literalinclude:: ../../../mlflow/pyspark/ml/log_model_allowlist.txt :language: text
extra_tags – 一个字典,包含要为 autologging 创建的每个托管运行设置的额外标签。