Share via


XGBoost-model trainen op één GPU

Dit notebook laat zien hoe u een XGBoost-regressiemodel traint op één GPU met behulp van serverloze GPU-rekenkracht van Databricks. GPU-versnelling versnelt modeltraining aanzienlijk in vergelijking met training op basis van CPU, met name voor grote gegevenssets.

Belangrijke concepten die worden behandeld:

  • GPU-versnelde training: maakt gebruik van de structuurmethode van hist XGBoost met CUDA-apparaat voor snellere training
  • Modelcontrolepunten: de modelstatus periodiek opslaan in Unity Catalog-volumes voor herstel en incrementele training
  • California Housing-gegevensset: een regressietaak die mediaan huizenprijzen voorspelt

Zie XGBoost GPU-ondersteuning en Unity Catalog-volumes voor meer informatie.

Requirements

Voor dit notebook is een rekencluster met GPU vereist. Serverloze GPU-rekenkracht van Databricks wordt automatisch geselecteerd bij het uitvoeren van cellen.

Vereiste bibliotheken installeren

Installeer XGBoost versie 2.0.3 en scikit-learn voor het laden en evalueren van metrische gegevens over gegevenssets.

%pip install xgboost==2.0.3 # due to this issue: https://github.com/ray-project/xgboost_ray/issues/312
%pip install scikit-learn
dbutils.library.restartPython()

Controleer of XGBoost 2.0.3 juist is geïnstalleerd.

%pip show xgboost

Locatie van controlepunt voor Unity Catalog configureren

Definieer de volumelocatie van de Unity-catalogus waar modelcontrolepunten worden opgeslagen. In het notebook worden queryparameters gebruikt om de naam van de catalogus, het schema, het volume en het model te configureren.

# You must have `USE CATALOG` privileges on the catalog, and you must have `USE SCHEMA` privileges on the schema.
# If necessary, change the catalog and schema name here.
dbutils.widgets.text("uc_catalog", "main")
dbutils.widgets.text("uc_schema", "default")
dbutils.widgets.text("uc_model_name", "custom_transformer")
dbutils.widgets.text("uc_volume", "checkpoints")

UC_CATALOG = dbutils.widgets.get("uc_catalog")
UC_SCHEMA = dbutils.widgets.get("uc_schema")
UC_VOLUME = dbutils.widgets.get("uc_volume")
MODEL_NAME = dbutils.widgets.get("uc_model_name")
CHECKPOINT_PATH = f"/Volumes/{UC_CATALOG}/{UC_SCHEMA}/{UC_VOLUME}/{MODEL_NAME}"
CHECKPOINT_PREFIX = "checkpoint"

print(f"UC_CATALOG: {UC_CATALOG}")
print(f"UC_SCHEMA: {UC_SCHEMA}")
print(f"UC_VOLUME: {UC_VOLUME}")
print(f"CHECKPOINT_PATH: {CHECKPOINT_PATH}")

Maak een callback van controlepunten die de modelstatus elke 50 boostrondes opslaat op het Unity Catalog-volume. Dit maakt herstel mogelijk van fouten en incrementele training.

import os
from xgboost.callback import TrainingCheckPoint

# Create the UC Volume where the checkpoint will be saved if it doesn't exist already
os.makedirs(CHECKPOINT_PATH, exist_ok=True)

# Create a callback to checkpoint to a UC volume
checkpoint_cb = TrainingCheckPoint(
    directory=CHECKPOINT_PATH,
    name=CHECKPOINT_PREFIX,
    iterations=50,       # save every 50 boosting rounds
)

XGBoost-model trainen op één GPU

Laad de gegevensset California Housing, configureer XGBoost voor GPU-training en train een regressiemodel. Het model voorspelt mediaan huiswaarden met behulp van functies zoals locatie, aantal ruimten en bevolkingsdichtheid.

import xgboost as xgb
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.metrics import root_mean_squared_error

# Load California Housing dataset
X, y = fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Convert to DMatrix
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

# GPU training parameters for regression
params = {
    "tree_method": "hist",        # Use GPU histogram
    "device": "cuda",
    "objective": "reg:squarederror",  # Regression objective
    "eval_metric": "rmse",            # Root Mean Squared Error
    "max_depth": 6,
    "learning_rate": 0.1,
}

# Train the model
bst = xgb.train(
    params=params,
    dtrain=dtrain,
    num_boost_round=200,
    evals=[(dtest, "eval"), (dtrain, "train")],
    verbose_eval=10,
    callbacks=[checkpoint_cb]
)

# Predict
y_pred = bst.predict(dtest)

# Evaluate
rmse = root_mean_squared_error(y_test, y_pred)
print(f"✅ RMSE on test set: {rmse:.4f}")

Model laden vanaf controlepunt en evalueren

Laad een eerder opgeslagen controlepunt vanuit de 150e boostronde en evalueer de prestaties. Dit laat zien hoe u de training hervat of tussenliggende modelstaten gebruikt.

# Take sample checkpoint from 150th step
checkpoint = f"{CHECKPOINT_PATH}/{CHECKPOINT_PREFIX}_150.json"

# Load the model from a checkpoint
bst = xgb.Booster()
bst.load_model(checkpoint)

dtest = xgb.DMatrix(X_test)
y_pred = bst.predict(dtest)

# Evaluate
rmse = root_mean_squared_error(y_test, y_pred)
print(f"✅ RMSE on test set: {rmse:.4f}")

Volgende stappen 

Voorbeeld van notebook

XGBoost-model trainen op één GPU

Notebook krijgen