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)[源代码]

注意

自动日志记录已知与以下包版本兼容:3.3.0 <= pyspark <= 4.0.1。当使用此范围之外的包版本时,自动日志记录可能不会成功。

启用(或禁用)并配置 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 的结果,并将它们记录为与模型关联的运行(Run)的 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.spark 类型的 MLflow 模型,其中包含一个已拟合的估计器(由 mlflow.spark.log_model() 记录)。请注意,出于性能和存储空间考虑,大型模型可能不会被自动记录,并且尚未支持 Pipelines 和超参数调优元估计器(例如 CrossValidator)的自动日志记录。有关详细信息,请参阅下面的 log_models 参数。

  • 对于训练后指标 API 调用,将记录一个“metric_info.json”伪器。这是一个 JSON 对象,其键是 MLflow 训练后指标名称(请参阅“训练后指标”部分了解键的格式),其值是相应的评估器信息,包括评估器类名和评估器参数。

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

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

将记录一个“estimator_info.json”伪器,其中包含一个描述元估计器层次结构的 hierarchy 条目。该层次结构包括对所有嵌套阶段的展开条目,例如嵌套的 Pipeline 阶段。

参数搜索

除了记录上述信息外,参数搜索元估计器(CrossValidatorTrainValidationSplit)的自动日志记录还会为每个探索的参数集记录子运行(child runs)及其指标,以及最佳模型和最佳参数(如果可用)的伪器和参数。为了提高可读性,“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 Tracking。如果为 False,则不记录数据集信息。

  • disable – 如果为 True,则禁用 PySpark ML 自动日志记录集成。如果为 False,则启用 pyspark ML 自动日志记录集成。

  • exclusive – 如果为 True,则自动记录的内容不会记录到用户创建的流畅运行中。如果为 False,则自动记录的内容将记录到活动的流畅运行中,该运行可能是用户创建的。

  • disable_for_unsupported_versions – 如果为 True,则禁用与此 MLflow 客户端版本未经过测试或不兼容的 pyspark 版本的自动日志记录。

  • silent – 如果为 True,则在 pyspark ML 自动日志记录期间抑制 MLflow 的所有事件日志和警告。如果为 False,则在 pyspark ML 自动日志记录期间显示所有事件和警告。

  • log_post_training_metrics – 如果为 True,则记录训练后指标。默认为 True。有关更多详细信息,请参阅训练后指标部分。

  • registered_model_name – If given, each time a model is trained, it is registered as a new model version of the registered model with this name. The registered model is created if it does not already exist.

  • log_input_examples – 如果为 True,则收集训练数据集的输入示例,并在训练期间与 pyspark ml 模型伪器一起记录。如果为 False,则不记录输入示例。

  • log_model_signatures

    如果为 True,则收集描述模型输入和输出的 ModelSignatures,并在训练期间与 spark ml Pipeline/估计器伪器一起记录。如果为 False,则不记录签名。

    警告

    目前,仅支持标量 Spark 数据类型。如果模型输入/输出包含非标量 Spark 数据类型,如 pyspark.ml.linalg.Vector,则不记录签名。

  • log_model_allowlist

    如果提供了,它将覆盖 MLflow 中的默认日志模型允许列表。这优先于“spark.mlflow.pysparkml.autolog.logModelAllowlistFile”的 Spark 配置。

    MLflow 中的默认日志模型允许列表
    # classification
    pyspark.ml.classification.LinearSVCModel
    pyspark.ml.classification.DecisionTreeClassificationModel
    pyspark.ml.classification.GBTClassificationModel
    pyspark.ml.classification.LogisticRegressionModel
    pyspark.ml.classification.RandomForestClassificationModel
    pyspark.ml.classification.NaiveBayesModel
    
    # clustering
    pyspark.ml.clustering.BisectingKMeansModel
    pyspark.ml.clustering.KMeansModel
    pyspark.ml.clustering.GaussianMixtureModel
    
    # Regression
    pyspark.ml.regression.AFTSurvivalRegressionModel
    pyspark.ml.regression.DecisionTreeRegressionModel
    pyspark.ml.regression.GBTRegressionModel
    pyspark.ml.regression.GeneralizedLinearRegressionModel
    pyspark.ml.regression.LinearRegressionModel
    pyspark.ml.regression.RandomForestRegressionModel
    
    # Featurizer model
    pyspark.ml.feature.BucketedRandomProjectionLSHModel
    pyspark.ml.feature.ChiSqSelectorModel
    pyspark.ml.feature.CountVectorizerModel
    pyspark.ml.feature.IDFModel
    pyspark.ml.feature.ImputerModel
    pyspark.ml.feature.MaxAbsScalerModel
    pyspark.ml.feature.MinHashLSHModel
    pyspark.ml.feature.MinMaxScalerModel
    pyspark.ml.feature.OneHotEncoderModel
    pyspark.ml.feature.RobustScalerModel
    pyspark.ml.feature.RFormulaModel
    pyspark.ml.feature.StandardScalerModel
    pyspark.ml.feature.StringIndexerModel
    pyspark.ml.feature.VarianceThresholdSelectorModel
    pyspark.ml.feature.VectorIndexerModel
    pyspark.ml.feature.UnivariateFeatureSelectorModel
    
    # composite model
    pyspark.ml.classification.OneVsRestModel
    
    # pipeline model
    pyspark.ml.pipeline.PipelineModel
    
    # Hyper-parameter tuning
    pyspark.ml.tuning.CrossValidatorModel
    pyspark.ml.tuning.TrainValidationSplitModel
    
    # SynapeML models
    synapse.ml.cognitive.*
    synapse.ml.exploratory.*
    synapse.ml.featurize.*
    synapse.ml.geospatial.*
    synapse.ml.image.*
    synapse.ml.io.*
    synapse.ml.isolationforest.*
    synapse.ml.lightgbm.*
    synapse.ml.nn.*
    synapse.ml.opencv.*
    synapse.ml.stages.*
    synapse.ml.vw.*
    

  • extra_tags – 要为自动日志记录创建的每个托管运行设置的额外标签的字典。