分布式XGBoost模型使用的培訓xgboost.spark

預覽

這個特性是在公共預覽

Python包xgboost > = 1.7包含一個新模塊xgboost.spark。這個模塊包括xgboost PySpark估計xgboost.spark.SparkXGBRegressor,xgboost.spark.SparkXGBClassifier,xgboost.spark.SparkXGBRanker。這些新類支持XGBoost估計納入SparkML管道。API的細節,請參閱XGBoost python火花API文檔

需求

磚運行時12.0毫升以上。

xgboost.spark參數

中定義的估計xgboost.spark模塊支持的大多數XGBoost中使用相同的參數和參數標準。

  • 類構造函數的參數,適合方法,預測方法在很大程度上是相同的xgboost.sklearn模塊。

  • 命名、值和默認值描述的大多是相同的XGBoost參數

  • 有一些不支持的參數(如異常gpu_id,nthread,sample_weight,eval_set),pyspark添加了估計量的特定參數(如featuresCol,labelCol,use_gpu,validationIndicatorCol)。有關詳細信息,請參見XGBoost Python API文檔

分布式訓練

PySpark估計中定義xgboost.spark模塊支持分布式XGBoost訓練使用num_workers參數。使用分布式培訓,創建一個分類或回歸量和集num_workers在分布式並發運行火花任務的數量的訓練。

例如:

xgboost.spark進口SparkXGBClassifier分類器=SparkXGBClassifier(num_workers=4)

請注意

  • 你不能使用mlflow.xgboost.autolog與分布式XGBoost。日誌使用MLflow xgboost火花模型,使用mlflow.spark.log_model (spark_xgb_modelartifact_path)

  • 你不能使用分布式XGBoost集群上啟用了自動定量。新工人節點開始在這個彈性伸縮範式不能接收新的任務和設置仍然閑置。禁用自動定量的說明,看看集群規模和自動定量

啟用優化培訓稀疏特性的數據集

PySpark估計中定義xgboost.spark模塊支持優化訓練數據集的稀疏特性。啟用優化稀疏的特性集,您需要提供一個數據集適合方法包含一個列組成的值類型的特性pyspark.ml.linalg.SparseVector並設置估計參數enable_sparse_data_optim真正的。此外,您需要設置的失蹤參數0.0

例如:

xgboost.spark進口SparkXGBClassifier分類器=SparkXGBClassifier(enable_sparse_data_optim=真正的,失蹤=0.0)分類器適合(dataset_with_sparse_features_col)

GPU培訓

PySpark估計中定義xgboost.spark模塊支持gpu上訓練。設置參數use_gpu真正的讓GPU培訓。

請注意

對於每個火花任務用於XGBoost分布式訓練,隻有一個GPU用於培訓的時候use_gpu參數設置為真正的。磚推薦使用的默認值1火花的集群配置spark.task.resource.gpu.amount。否則,額外的gpu分配給這個火花任務處於空閑狀態。

例如:

xgboost.spark進口SparkXGBClassifier分類器=SparkXGBClassifier(num_workers=2,use_gpu=真正的)

例如筆記本電腦

這個筆記本顯示的使用Python包xgboost.sparkMLlib火花。

PySpark-XGBoost筆記本

在新標簽頁打開筆記本

遷移向導棄用sparkdl.xgboost模塊

  • 取代sparkdl.xgboost進口XgboostRegressorxgboost.spark進口SparkXGBRegressor和替換sparkdl.xgboost進口XgboostClassifierxgboost.spark進口SparkXGBClassifier

  • 改變估計構造函數中的所有參數名稱從camelCase風格snake_case風格。例如,改變XgboostRegressor (featuresCol = XXX)SparkXGBRegressor (features_col = XXX)

  • 的參數use_external_storageexternal_storage_precision已被移除。xgboost.spark估計使用DMatrix數據迭代API來更有效地使用內存。不再需要使用低效的外部存儲模式。對於非常大的數據集,數據磚建議你增加num_workers參數,這使得每個訓練任務將數據分割成較小的、更容易管理的數據分區。

  • 中定義的估計xgboost.spark,設置num_workers = 1執行模型訓練使用星星之火的任務。這種利用指定的數量的CPU核火花集群配置設置spark.task.cpus默認值是1。如果你想使用更多的CPU核訓練模型,您可以增加num_workers或增加spark.task.cpus。你不能設置nthreadn_jobs中定義的參數估計xgboost.spark。這種行為不同於以前的行為估計中定義的棄用sparkdl.xgboost包中。

轉換sparkdl.xgboost模型轉換為xgboost.spark模型

sparkdl.xgboost模型保存在一個不同的格式xgboost.spark模型和有不同的參數設置。使用下麵的效用函數將模型:

defconvert_sparkdl_model_to_xgboost_spark_model(xgboost_spark_estimator_cls,sparkdl_xgboost_model,):”“”:param xgboost_spark_estimator_cls:“xgboost。火花的估計類,如。“xgboost.spark.SparkXGBRegressor”:param sparkdl_xgboost_model:“sparkdl。xgboost”模式實例的實例“sparkdl.xgboost。XgboostRegressorModel` type.:返回“xgboost。火花的模型實例”“”defconvert_param_key(關鍵):xgboost.spark.core進口_inverse_pyspark_param_alias_map如果關鍵= =“baseMarginCol”:返回“base_margin_col”如果關鍵_inverse_pyspark_param_alias_map:返回_inverse_pyspark_param_alias_map(關鍵]如果關鍵(“use_external_storage”,“external_storage_precision”,“nthread”,“n_jobs”,“base_margin_eval_set”]:返回沒有一個返回關鍵xgboost_spark_params_dict={}參數sparkdl_xgboost_model參數個數:如果參數的名字= =“arbitraryParamsDict”:繼續如果sparkdl_xgboost_modelisDefined(參數):xgboost_spark_params_dict(參數的名字]=sparkdl_xgboost_modelgetOrDefault(參數)xgboost_spark_params_dict更新(sparkdl_xgboost_modelgetOrDefault(“arbitraryParamsDict”))xgboost_spark_params_dict={convert_param_key(k):vk,vxgboost_spark_params_dict項目()如果convert_param_key(k)沒有一個}升壓=sparkdl_xgboost_modelget_booster()booster_bytes=升壓save_raw(“json”)booster_config=升壓save_config()估計量=xgboost_spark_estimator_cls(* *xgboost_spark_params_dict)sklearn_model=估計量_convert_to_sklearn_model(booster_bytes,booster_config)返回估計量_copyValues(估計量_create_pyspark_model(sklearn_model))#例子xgboost.spark進口SparkXGBRegressornew_model=convert_sparkdl_model_to_xgboost_spark_model(xgboost_spark_estimator_cls=SparkXGBRegressor,sparkdl_xgboost_model=模型,)

如果你有一個pyspark.ml.PipelineModel模型包含一個sparkdl.xgboost模型作為最後一個階段,可以替代的階段sparkdl.xgboost模型的轉換xgboost.spark模型。

pipeline_model階段(- - - - - -1]=convert_sparkdl_model_to_xgboost_spark_model(xgboost_spark_estimator_cls=SparkXGBRegressor,sparkdl_xgboost_model=pipeline_model階段(- - - - - -1),)