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)[source]
注意
自动记录与以下包版本已知兼容:
3.3.0<=pyspark<=4.0.0。当与该范围之外的包版本一起使用时,自动记录可能无法成功。启用(或禁用)并为 pyspark ml 估计器配置自动记录(autologging)。此方法不是线程安全的。此 API 需要 Spark 3.0 或更高版本。
- When is autologging performed?
当您调用
Estimator.fit时,会执行自动记录(Autologging),但位于pyspark.ml.feature下的估算器(特征处理器)除外。- Logged information
- Parameters
通过
estimator.params获取的参数。如果参数值也是一个Estimator,则包装的估计器中的参数也会被记录,嵌套参数键将为 {estimator_uid}.{param_name}
- Tags
一个估计器类名(例如 “LinearRegression”)。
一个完全限定的估计器类名(例如 “pyspark.ml.regression.LinearRegression”)。
- Post training metrics
当用户在模型训练之后调用评估器 APIs 时,MLflow 尝试捕获 Evaluator.evaluate 的结果,并将它们作为 MLflow 指标记录到与模型关联的 Run 中。所有 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 开始)。
- Limitations
MLflow 无法为从给定预测结果派生的其他对象找到运行信息(例如,对预测结果数据集做一些转换)。
- Artifacts
一个带有
mlflow.sparkflavor 并包含已拟合估计器的 MLflow 模型(由mlflow.spark.log_model()记录)。请注意,由于性能和存储空间的考虑,大型模型可能不会被自动记录,且目前尚不支持对 Pipelines 和超参数调优元估计器(例如 CrossValidator)的自动记录。有关详细信息,请参阅下面的log_models参数。对于 post training metrics API 调用,会记录一个 “metric_info.json” 工件。它是一个 JSON 对象,其键是 MLflow 的 post training metric 名称(有关键的格式,请参见 “Post training metrics” 部分),其值是相应的评估器信息,包括评估器类名和评估器参数。
- How does autologging work for meta estimators?
当一个元估计器(例如 Pipeline、CrossValidator、TrainValidationSplit、OneVsRest)调用
fit()时,它会在其子估计器上内部调用fit()。Autologging 不会对这些组成的fit()调用执行日志记录。记录了一个名为 “estimator_info.json” 的工件,其中包含一个 层次结构 条目,用于描述元估计器的层次结构。该层次结构包含所有嵌套阶段的展开条目,例如嵌套的管道阶段。
- Parameter search
除了记录上述信息外,针对参数搜索元估计器(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”。
- Parameters
log_models – 如果
True,且训练好的模型在允许列表中,则它们会被记录为 MLflow 模型工件。如果False,训练好的模型不会被记录。注意:内置允许列表会排除某些可能很大的模型(例如 ALS 模型)。要指定自定义允许列表,请创建一个包含以换行分隔的完全限定估计器类名列表的文件,并将 “spark.mlflow.pysparkml.autolog.logModelAllowlistFile” Spark 配置设置为您允许列表文件的路径。log_datasets – 如果
True,则将数据集信息记录到 MLflow Tracking。 如果False,则不记录数据集信息。disable – 如果
True,将禁用 scikit-learn 的 autologging 集成。如果False,则启用 pyspark ML 的 autologging 集成。exclusive – 如果
True,自动记录的内容不会记录到用户创建的 fluent 运行。 如果False,自动记录的内容会记录到活动的 fluent 运行,该运行可能是用户创建的。disable_for_unsupported_versions – 如果
True,则为那些未针对此版本的 MLflow 客户端进行测试或与其不兼容的 pyspark 版本禁用 autologging。silent – 如果
True,则在 pyspark ML autologging 期间抑制来自 MLflow 的所有事件日志和警告。如果False,则在 pyspark ML autologging 期间显示所有事件和警告。log_post_training_metrics – 如果
True,将记录训练后指标。默认值为True。有关更多详细信息,请参阅 post training metrics 部分。registered_model_name – 如果提供,每次训练模型时,会将模型注册为具有此名称的注册模型的新版本。如果该注册模型尚不存在,则会创建它。
log_input_examples – 如果
True,会在训练期间收集来自训练数据集的输入示例并与 pyspark ml 模型工件一起记录。 如果False,则不会记录输入示例。log_model_signatures –
如果
True,ModelSignatures在训练期间会与 spark ml pipeline/estimator 工件一起被收集并记录,用于描述模型的输入和输出。 如果False则不会记录签名。警告
当前仅支持标量 Spark 数据类型。如果模型输入/输出包含诸如
pyspark.ml.linalg.Vector之类的非标量 Spark 数据类型,则不会记录签名。log_model_allowlist –
如果提供,它将覆盖 mlflow 中的默认日志模型允许列表。 该设置优先于 Spark 配置 “spark.mlflow.pysparkml.autolog.logModelAllowlistFile”。
- mlflow 中的默认日志模型允许列表
# 分类 pyspark.ml.classification.LinearSVCModel pyspark.ml.classification.DecisionTreeClassificationModel pyspark.ml.classification.GBTClassificationModel pyspark.ml.classification.LogisticRegressionModel pyspark.ml.classification.RandomForestClassificationModel pyspark.ml.classification.NaiveBayesModel # 聚类 pyspark.ml.clustering.BisectingKMeansModel pyspark.ml.clustering.KMeansModel pyspark.ml.clustering.GaussianMixtureModel # 回归 pyspark.ml.regression.AFTSurvivalRegressionModel pyspark.ml.regression.DecisionTreeRegressionModel pyspark.ml.regression.GBTRegressionModel pyspark.ml.regression.GeneralizedLinearRegressionModel pyspark.ml.regression.LinearRegressionModel pyspark.ml.regression.RandomForestRegressionModel # 特征化模型 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 # 复合模型 pyspark.ml.classification.OneVsRestModel # 管道模型 pyspark.ml.pipeline.PipelineModel # 超参数调优 pyspark.ml.tuning.CrossValidatorModel pyspark.ml.tuning.TrainValidationSplitModel # SynapseML 模型 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 – 一个字典,用于在 autologging 创建的每个托管运行上设置额外标签。