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训练后指标名称(键格式见“训练后指标”部分),其值是对应的评估器信息,包括评估器类名和评估器参数。

元估计器的自动日志记录是如何工作的?

当一个元估计器(例如 PipelineCrossValidatorTrainValidationSplitOneVsRest)调用 fit() 时,它会在其子估计器上调用 fit()。自动记录不会对这些组成部分的 fit() 调用执行日志记录。

记录了一个名为“estimator_info.json”的工件,其中包含一个描述元估计器层次结构的 hierarchy 条目。该层次结构包括所有嵌套阶段的扩展条目,例如嵌套的管道阶段。

参数搜索

除了记录上述信息外,参数搜索元估计器(CrossValidatorTrainValidationSplit)的自动记录还会记录每个探索参数集的子运行及其指标,以及最佳模型和最佳参数(如果可用)的工件和参数。为了提高可读性,参数搜索估计器中的“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 创建的每个托管运行设置的额外标签。