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 训练后指标名称(请参阅“训练后指标”部分了解键的格式),其值是相应的评估器信息,包括评估器类名和评估器参数。
- 元估计器的自动日志记录是如何工作的?
当一个元估计器(例如 Pipeline、CrossValidator、TrainValidationSplit、OneVsRest)调用
fit()时,它会在内部调用其子估计器的fit()。自动日志记录**不会**对这些构成fit()的调用执行日志记录。将记录一个“estimator_info.json”伪器,其中包含一个描述元估计器层次结构的 hierarchy 条目。该层次结构包括对所有嵌套阶段的展开条目,例如嵌套的 Pipeline 阶段。
- 参数搜索
除了记录上述信息外,参数搜索元估计器(CrossValidator 和 TrainValidationSplit)的自动日志记录还会为每个探索的参数集记录子运行(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 – 要为自动日志记录创建的每个托管运行设置的额外标签的字典。