التدريب الموزع لنماذج XGBoost باستخدام xgboost.spark
تحتوي حزمة Python xgboost>=1.7 على وحدة نمطية xgboost.spark
جديدة . تتضمن هذه الوحدة النمطية مقدرات xgboost.spark.SparkXGBRegressor
xgboost PySpark و xgboost.spark.SparkXGBClassifier
و.xgboost.spark.SparkXGBRanker
تدعم هذه الفئات الجديدة تضمين مقدرات XGBoost في SparkML Pipelines. للحصول على تفاصيل واجهة برمجة التطبيقات، راجع مستند واجهة برمجة تطبيقات XGBoost python spark.
المتطلبات
Databricks Runtime 12.0 ML وما فوق.
xgboost.spark
المعلمات
تدعم المقدرات المعرفة في xgboost.spark
الوحدة معظم المعلمات والوسيطات نفسها المستخدمة في XGBoost القياسي.
- معلمات الدالة الإنشائية
fit
للفئة والأسلوب والأسلوبpredict
مطابقة إلى حد كبير لتلك الموجودة في الوحدة النمطيةxgboost.sklearn
. - التسمية والقيم والإعدادات الافتراضية متطابقة في الغالب مع تلك الموضحة في معلمات XGBoost.
- الاستثناءات هي بعض المعلمات غير المدعومة (مثل ، ، ، )، والمعلمات
pyspark
المحددة للمقدر التي تمت إضافتها (مثلfeaturesCol
، ،labelCol
،use_gpu
).validationIndicatorCol
eval_set
sample_weight
nthread
gpu_id
للحصول على التفاصيل، راجع وثائق واجهة برمجة تطبيقات XGBoost Python Spark.
التدريب الموزع
تدعم مقدرات PySpark المحددة في الوحدة النمطية xgboost.spark
تدريب XGBoost الموزع باستخدام المعلمة num_workers
. لاستخدام التدريب الموزع، قم بإنشاء مصنف أو تراجع وتعيينه num_workers
إلى عدد مهام Spark قيد التشغيل المتزامنة أثناء التدريب الموزع. لاستخدام جميع فتحات مهام Spark، قم بتعيين num_workers=sc.defaultParallelism
.
على سبيل المثال:
from xgboost.spark import SparkXGBClassifier
classifier = SparkXGBClassifier(num_workers=sc.defaultParallelism)
إشعار
- لا يمكنك استخدام
mlflow.xgboost.autolog
مع XGBoost الموزعة. لتسجيل نموذج xgboost Spark باستخدام MLflow، استخدمmlflow.spark.log_model(spark_xgb_model, artifact_path)
. - لا يمكنك استخدام XGBoost الموزعة على نظام مجموعة تم تمكين التحجيم التلقائي له. لا يمكن أن تتلقى العقد العاملة الجديدة التي تبدأ في نموذج التحجيم المرن هذا مجموعات جديدة من المهام وتظل الخامة. للحصول على إرشادات لتعطيل التحجيم التلقائي، راجع تمكين التحجيم التلقائي.
تمكين التحسين للتدريب على مجموعة بيانات الميزات المتفرقة
PySpark Estimators المحددة في xgboost.spark
تحسين دعم الوحدة للتدريب على مجموعات البيانات مع ميزات متفرقة.
لتمكين تحسين مجموعات الميزات المتفرقة، تحتاج إلى توفير مجموعة بيانات للأسلوب fit
الذي يحتوي على عمود ميزات يتكون من قيم من النوع pyspark.ml.linalg.SparseVector
وتعيين معلمة enable_sparse_data_optim
المقدر إلى True
. بالإضافة إلى ذلك، تحتاج إلى تعيين المعلمة missing
إلى 0.0
.
على سبيل المثال:
from xgboost.spark import SparkXGBClassifier
classifier = SparkXGBClassifier(enable_sparse_data_optim=True, missing=0.0)
classifier.fit(dataset_with_sparse_features_col)
تدريب وحدة معالجة الرسومات
تدعم مقدرات PySpark المحددة في xgboost.spark
الوحدة التدريب على وحدات معالجة الرسومات. قم بتعيين المعلمة use_gpu
إلى True
لتمكين تدريب GPU.
إشعار
لكل مهمة Spark مستخدمة في التدريب الموزع XGBoost، يتم استخدام وحدة معالجة الرسومات واحدة فقط في التدريب عند تعيين الوسيطة use_gpu
إلى True
. توصي Databricks باستخدام القيمة الافتراضية 1
لتكوين spark.task.resource.gpu.amount
نظام مجموعة Spark . وإلا، فإن وحدات معالجة الرسومات الإضافية المخصصة لمهمة Spark هذه الخامة.
على سبيل المثال:
from xgboost.spark import SparkXGBClassifier
classifier = SparkXGBClassifier(num_workers=sc.defaultParallelism, use_gpu=True)
مثال لدفتر الملاحظات
يعرض دفتر الملاحظات هذا استخدام حزمة xgboost.spark
Python مع Spark MLlib.
دفتر ملاحظات PySpark-XGBoost
دليل الترحيل للوحدة النمطية المهملة sparkdl.xgboost
- استبدل
from sparkdl.xgboost import XgboostRegressor
بfrom xgboost.spark import SparkXGBRegressor
واستبدلfrom sparkdl.xgboost import XgboostClassifier
بfrom xgboost.spark import SparkXGBClassifier
. - تغيير كافة أسماء المعلمات في الدالة الإنشائية المقدر من نمط camelCase إلى نمط snake_case. على سبيل المثال، قم بتغيير
XgboostRegressor(featuresCol=XXX)
إلىSparkXGBRegressor(features_col=XXX)
. - المعلمات
use_external_storage
وتمتexternal_storage_precision
إزالتها.xgboost.spark
تستخدم أدوات التقدير واجهة برمجة تطبيقات تكرار بيانات DMatrix لاستخدام الذاكرة بشكل أكثر كفاءة. لم تعد هناك حاجة لاستخدام وضع التخزين الخارجي غير الفعال. بالنسبة لمجموعات البيانات الكبيرة للغاية، توصي Databricks بزيادة المعلمةnum_workers
، ما يجعل كل مهمة تدريب تقسم البيانات إلى أقسام بيانات أصغر وأكثر قابلية للإدارة. ضع في اعتبارك الإعدادnum_workers = sc.defaultParallelism
، الذي يعينnum_workers
إلى العدد الإجمالي لفتحات مهام Spark في نظام المجموعة. - بالنسبة إلى المقدرات المحددة في
xgboost.spark
، ينفذ الإعدادnum_workers=1
تدريب النموذج باستخدام مهمة Spark واحدة. يستخدم هذا عدد مراكز وحدة المعالجة المركزية المحددة بواسطة إعدادspark.task.cpus
تكوين نظام مجموعة Spark ، وهو 1 افتراضيا. لاستخدام المزيد من الذاكرات الأساسية لوحدة المعالجة المركزية لتدريب النموذج، قم بزيادةnum_workers
أوspark.task.cpus
. لا يمكنك تعيين المعلمةnthread
أوn_jobs
للمقدرات المعرفة فيxgboost.spark
. يختلف هذا السلوك عن السلوك السابق للمقدرات المعرفة في الحزمة المهملةsparkdl.xgboost
.
تحويل sparkdl.xgboost
النموذج إلى xgboost.spark
نموذج
sparkdl.xgboost
يتم حفظ النماذج بتنسيق مختلف عن xgboost.spark
النماذج و يكون لها إعدادات معلمة مختلفة. استخدم دالة الأداة المساعدة التالية لتحويل النموذج:
def convert_sparkdl_model_to_xgboost_spark_model(
xgboost_spark_estimator_cls,
sparkdl_xgboost_model,
):
"""
:param xgboost_spark_estimator_cls:
`xgboost.spark` estimator class, e.g. `xgboost.spark.SparkXGBRegressor`
:param sparkdl_xgboost_model:
`sparkdl.xgboost` model instance e.g. the instance of
`sparkdl.xgboost.XgboostRegressorModel` type.
:return
A `xgboost.spark` model instance
"""
def convert_param_key(key):
from xgboost.spark.core import _inverse_pyspark_param_alias_map
if key == "baseMarginCol":
return "base_margin_col"
if key in _inverse_pyspark_param_alias_map:
return _inverse_pyspark_param_alias_map[key]
if key in ['use_external_storage', 'external_storage_precision', 'nthread', 'n_jobs', 'base_margin_eval_set']:
return None
return key
xgboost_spark_params_dict = {}
for param in sparkdl_xgboost_model.params:
if param.name == "arbitraryParamsDict":
continue
if sparkdl_xgboost_model.isDefined(param):
xgboost_spark_params_dict[param.name] = sparkdl_xgboost_model.getOrDefault(param)
xgboost_spark_params_dict.update(sparkdl_xgboost_model.getOrDefault("arbitraryParamsDict"))
xgboost_spark_params_dict = {
convert_param_key(k): v
for k, v in xgboost_spark_params_dict.items()
if convert_param_key(k) is not None
}
booster = sparkdl_xgboost_model.get_booster()
booster_bytes = booster.save_raw("json")
booster_config = booster.save_config()
estimator = xgboost_spark_estimator_cls(**xgboost_spark_params_dict)
sklearn_model = estimator._convert_to_sklearn_model(booster_bytes, booster_config)
return estimator._copyValues(estimator._create_pyspark_model(sklearn_model))
# Example
from xgboost.spark import SparkXGBRegressor
new_model = convert_sparkdl_model_to_xgboost_spark_model(
xgboost_spark_estimator_cls=SparkXGBRegressor,
sparkdl_xgboost_model=model,
)
إذا كان لديك pyspark.ml.PipelineModel
نموذج يحتوي على sparkdl.xgboost
نموذج كمرحلة أخيرة، يمكنك استبدال مرحلة sparkdl.xgboost
النموذج بالنموذج المحول xgboost.spark
.
pipeline_model.stages[-1] = convert_sparkdl_model_to_xgboost_spark_model(
xgboost_spark_estimator_cls=SparkXGBRegressor,
sparkdl_xgboost_model=pipeline_model.stages[-1],
)
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ