メインコンテンツまでスキップ

単一 GPU で XGBoost モデルをトレーニングする

このノートブックでは、 Databricksサーバレス GPU コンピュートを使用して単一の GPU でXGBoost回帰モデルをトレーニングする方法を示します。 GPU アクセラレーションにより、特に大規模なデータセットの場合、CPU ベースのトレーニングと比較してモデル トレーニングが大幅に高速化されます。

取り上げる主要な概念:

  • GPU アクセラレーション トレーニング : CUDA デバイスで XGBoost のhistツリー メソッドを使用してトレーニングを高速化します
  • モデルのチェックポイント : モデルの状態を定期的にUnity Catalogボリュームに保存し、回復と増分トレーニングに活用します。
  • カリフォルニアの住宅データセット : 住宅価格の中央値を予測する回帰タスク

詳細については、 XGBoost GPU サポートUnity Catalogボリューム」を参照してください。

要件

このノートブックには、GPU 対応のコンピュート クラスターが必要です。 セルを実行すると、 Databricksサーバレス GPU コンピュートが自動的に選択されます。

必要なライブラリをインストールする

データセットの読み込みとメトリクスの評価のために、 XGBoostバージョン 2.0.3 とscikit-learnをインストールします。

Python
%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()

XGBoost 2.0.3 が正しくインストールされていることを確認します。

Python
%pip show xgboost

Unity Catalogチェックポイントの場所を構成する

モデル チェックポイントが保存されるUnity Catalogボリュームの場所を定義します。 ノートブックはクエリーを使用して、カタログ、スキーマ、ボリューム、およびモデル名を構成します。

Python
# 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}")

50 回のブースティング ラウンドごとにモデルの状態をUnity Catalogボリュームに保存するチェックポイント コールバックを作成します。 これにより、障害からの回復と増分トレーニングが可能になります。

Python
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
)

単一 GPU で XGBoost モデルをトレーニングする

カリフォルニア住宅データセットをロードし、GPU トレーニング用にXGBoostを構成し、回帰モデルをトレーニングします。 このモデルは、場所、部屋数、人口密度などの特徴を使用して、住宅の中央値の価値を予測します。

Python
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}")

チェックポイントからモデルをロードして評価する

150 回目のブースティング ラウンドから以前に保存したチェックポイントをロードし、そのパフォーマンスを評価します。これは、トレーニングを再開する方法、または中間モデル状態を使用する方法を示しています。

Python
# 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}")

次のステップ

サンプルノートブック

単一 GPU で XGBoost モデルをトレーニングする

ノートブックを新しいタブで開く