分布式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文檔。
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=真正的)
遷移向導棄用sparkdl.xgboost
模塊
取代
從sparkdl.xgboost進口XgboostRegressor
與從xgboost.spark進口SparkXGBRegressor
和替換從sparkdl.xgboost進口XgboostClassifier
與從xgboost.spark進口SparkXGBClassifier
。改變估計構造函數中的所有參數名稱從camelCase風格snake_case風格。例如,改變
XgboostRegressor (featuresCol = XXX)
來SparkXGBRegressor (features_col = XXX)
。的參數
use_external_storage
和external_storage_precision
已被移除。xgboost.spark
估計使用DMatrix數據迭代API來更有效地使用內存。不再需要使用低效的外部存儲模式。對於非常大的數據集,數據磚建議你增加num_workers
參數,這使得每個訓練任務將數據分割成較小的、更容易管理的數據分區。中定義的估計
xgboost.spark
,設置num_workers = 1
執行模型訓練使用星星之火的任務。這種利用指定的數量的CPU核火花集群配置設置spark.task.cpus
默認值是1。如果你想使用更多的CPU核訓練模型,您可以增加num_workers
或增加spark.task.cpus
。你不能設置nthread
或n_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_model。isDefined(參數):xgboost_spark_params_dict(參數。的名字]=sparkdl_xgboost_model。getOrDefault(參數)xgboost_spark_params_dict。更新(sparkdl_xgboost_model。getOrDefault(“arbitraryParamsDict”))xgboost_spark_params_dict={convert_param_key(k):v為k,v在xgboost_spark_params_dict。項目()如果convert_param_key(k)是不沒有一個}升壓=sparkdl_xgboost_model。get_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),)