Aracılığıyla paylaş


XGBoost modelini tek bir GPU'da eğitin

Bu not defteri, Databricks sunucusuz GPU işlemi kullanarak tek bir GPU üzerinde XGBoost regresyon modelini eğitmeyi gösterir. GPU hızlandırma, özellikle büyük veri kümeleri için CPU tabanlı eğitime kıyasla model eğitimini önemli ölçüde hızlandırır.

Ele alınan temel kavramlar:

  • GPU hızlandırmalı eğitim: Daha hızlı eğitim için CUDA cihazıyla XGBoost'un hist ağaç yöntemini kullanır
  • Model denetim noktası oluşturma: Kurtarma ve artımlı eğitim için model durumunu düzenli aralıklarla Unity Kataloğu birimlerine kaydeder
  • California Konut veri kümesi: Ortanca ev değerlerini tahmin eden bir regresyon görevi

Daha fazla bilgi için Bkz. XGBoost GPU Desteği ve Unity Kataloğu hacimleri.

Gereksinimler

Bu not defteri GPU özellikli bir işlem kümesi gerektirir. Hücreler çalıştırılırken Databricks sunucusuz GPU hesaplama işlemi otomatik olarak seçilir.

Gerekli kitaplıkları yükleme

Veri kümesi yükleme ve değerlendirme ölçümleri için XGBoost sürüm 2.0.3 ve scikit-learn'ü yükleyin.

%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'in doğru yüklendiğini doğrulayın.

%pip show xgboost

Unity Kataloğu denetim noktası konumunu yapılandırma

Model denetim noktalarının kaydedileceği Unity Kataloğu birim konumunu tanımlayın. Not defteri, katalog, şema, birim ve model adını yapılandırmak için sorgu parametrelerini kullanır.

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

Unity Kataloğu birimine her 50 yükseltme turunda model durumunu kaydeden bir denetim noktası geri çağırması oluşturun. Bu, hatalardan kurtarma ve artımlı eğitim başlatılmasını sağlar.

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 modelini tek bir GPU'da eğitin

California Konut veri kümesini yükleyin, GPU eğitimi için XGBoost'ı yapılandırın ve bir regresyon modeli eğitin. Model konum, oda sayısı ve nüfus yoğunluğu gibi özellikleri kullanarak ortanca ev değerlerini tahmin eder.

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

Modeli kontrol noktasından yükleme ve değerlendirme

Daha önce kaydedilmiş bir denetim noktasını 150. yükseltme turundan yükleyin ve performansını değerlendirin. Bu, eğitimi sürdürmeyi veya ara model durumlarını kullanmayı gösterir.

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

Sonraki Adımlar

Örnek defter

XGBoost modelini tek bir GPU'da eğitin

Dizüstü bilgisayar al