Sdílet prostřednictvím


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.sparkmodulu 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žíval xgboost.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_seta sample_weight_eval_set nejsou podporovány. Místo toho použijte parametry weightCol a validationIndicatorCol. Podrobnosti najdete v XGBoostu pro kanál PySpark.
  • Parametry base_margina base_margin_eval_set nejsou podporovány. Místo toho použijte parametr baseMarginCol . 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 hodnotu missing. U estimátorů PySpark v sparkdl balíčku nejsou nulové hodnoty ve řídkém vektoru Sparku považovány za chybějící hodnoty, pokud nenastavíte missing=0. Pokud máte zhuštěnou trénovací datovou sadu (chybí většina hodnot funkcí), doporučuje Databricks nastavit missing=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 Truehodnotu .

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 ethhodnotu . 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.

Poznámkový blok PySpark-XGBoost

Získat poznámkový blok