Distribuované trénování modelů XGBoost pomocí sparkdl.xgboost
Důležité
Tato funkce je ve verzi Public Preview.
Poznámka:
sparkdl.xgboost
je zastaralá od Databricks Runtime 12.0 ML a odebere se v Databricks Runtime 13.0 ML a novějším. Informace o migraci úloh do xgboost.spark
modulu Sparkdl.xgboost najdete v průvodci migrací.
Databricks Runtime ML zahrnuje estimátory PySpark založené na balíčku sparkdl.xgboost.XgboostRegressor
Pythonu xgboost
a sparkdl.xgboost.XgboostClassifier
. Na základě těchto estimátorů můžete vytvořit kanál ML. Další informace najdete v tématu XGBoost pro kanál PySpark.
Databricks důrazně doporučuje, aby sparkdl.xgboost
uživatelé používali Databricks Runtime 11.3 LTS ML nebo novější. Předchozí verze databricks Runtime jsou ovlivněny chybami ve starších verzích sparkdl.xgboost
.
Poznámka:
- Modul
sparkdl.xgboost
je zastaralý, protože Databricks Runtime 12.0 ML. Databricks doporučuje migrovat kód tak, aby místo toho používalxgboost.spark
modul. Prohlédnou si průvodce migrací. - Následující parametry z
xgboost
balíčku nejsou podporovány:gpu_id
,output_margin
,validate_features
. - Parametry
sample_weight
,eval_set
asample_weight_eval_set
nejsou podporovány. Místo toho použijte parametryweightCol
avalidationIndicatorCol
. Podrobnosti najdete v XGBoostu pro kanál PySpark. - Parametry
base_margin
abase_margin_eval_set
nejsou podporovány. Místo toho použijte parametrbaseMarginCol
. Podrobnosti najdete v XGBoostu pro kanál PySpark. missing
Parametr má jinou sémantiku než balíčekxgboost
.xgboost
V balíčku jsou nulové hodnoty v řídké matici SciPy považovány za chybějící hodnoty bez ohledu na hodnotumissing
. U estimátorů PySpark vsparkdl
balíčku nejsou nulové hodnoty ve řídkém vektoru Sparku považovány za chybějící hodnoty, pokud nenastavítemissing=0
. Pokud máte zhuštěnou trénovací datovou sadu (chybí většina hodnot funkcí), doporučuje Databricks nastavitmissing=0
snížení spotřeby paměti a dosáhnout lepšího výkonu.
Distribuované trénování
Databricks Runtime ML podporuje distribuované trénování XGBoost pomocí parametru num_workers
. Pokud chcete použít distribuované trénování, vytvořte klasifikátor nebo regresor a nastavte num_workers
hodnotu menší nebo rovnou celkovému počtu slotů úloh Sparku ve vašem clusteru. Pokud chcete použít všechny sloty úloh Sparku, nastavte num_workers=sc.defaultParallelism
.
Příklad:
classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)
Omezení distribuovaného trénování
- Nelze použít
mlflow.xgboost.autolog
s distribuovaným XGBoostem. - Nelze použít
baseMarginCol
s distribuovaným XGBoostem. - Distribuovaný XGBoost nelze použít v clusteru s povoleným automatickým škálováním. Pokyny k zakázání automatického škálování najdete v tématu Povolení automatického škálování .
Trénování GPU
Poznámka:
Databricks Runtime 11.3 LTS ML zahrnuje XGBoost 1.6.1, který nepodporuje clustery GPU s výpočetní schopností 5.2 a nižší.
Databricks Runtime 9.1 LTS ML a vyšší podporují clustery GPU pro trénování XGBoost. Pokud chcete použít cluster GPU, nastavte use_gpu
na True
hodnotu .
Příklad:
classifier = XgboostClassifier(num_workers=N, use_gpu=True)
regressor = XgboostRegressor(num_workers=N, use_gpu=True)
Řešení problému
Pokud během trénování s více uzly narazíte na NCCL failure: remote process exited or there was a network error
zprávu, obvykle to značí problém se síťovými komunikacemi mezi grafickými procesory. K tomuto problému dochází, když NCCL (NVIDIA Collective Communications Library) nemůže pro komunikaci s GPU používat určitá síťová rozhraní.
Pokud chcete problém vyřešit, nastavte sparkConf clusteru na spark.executorEnv.NCCL_SOCKET_IFNAME
eth
hodnotu . Tím se v podstatě nastaví proměnná NCCL_SOCKET_IFNAME
eth
prostředí pro všechny pracovní procesy v uzlu.
Příklad poznámkového bloku
Tento poznámkový blok ukazuje použití balíčku sparkdl.xgboost
Pythonu se sparkem MLlib. Balíček sparkdl.xgboost
je zastaralý, protože Databricks Runtime 12.0 ML.