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 xgboost Pythonu sparkdl.xgboost.XgboostRegressor 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 balíčku xgboost nejsou podporovány: gpu_id, output_margin, validate_features.
  • Parametry sample_weight, eval_seta sample_weight_eval_set se nepodporují. Místo toho použijte parametry weightCol a validationIndicatorCol. Podrobnosti najdete v XGBoostu pro kanál PySpark.
  • Parametry base_margina base_margin_eval_set se nepodporují. Místo toho použijte parametr baseMarginCol . Podrobnosti najdete v XGBoostu pro kanál PySpark.
  • missing Parametr má jinou sémantiku než balíčekxgboost. V balíčku xgboost se nulové hodnoty v řídké matici SciPy považují za chybějící hodnoty bez ohledu na hodnotu missing. U estimátorů PySpark v balíčku sparkdl nejsou nulové hodnoty v ří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ížit spotřebu 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 na 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.

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 tento problém vyřešit, nastavte sparkConf clusteru pro spark.executorEnv.NCCL_SOCKET_IFNAME na eth. Tím se v podstatě nastaví proměnná NCCL_SOCKET_IFNAMEeth 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ískání poznámkového bloku