Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este notebook demonstra como treinar um modelo de regressão XGBoost numa GPU única utilizando computação serverless da Databricks. A aceleração por GPU acelera significativamente o treino do modelo em comparação com o treino baseado em CPU, especialmente para grandes conjuntos de dados.
Conceitos-chave abordados:
-
Treino acelerado por GPU: Utiliza o método de árvore do
histXGBoost com dispositivo CUDA para treino mais rápido - Checkpoint do modelo: Guarda periodicamente o estado do modelo nos volumes do Unity Catalog para recuperação e treino incremental
- Conjunto de dados de habitação da Califórnia: Uma tarefa de regressão que prevê os valores medianos das casas
Para mais informações, consulte XGBoost GPU Support e volumes do Unity Catalog.
Requisitos
Este portátil requer um cluster de computação com GPU. O processamento de GPU sem servidor do Databricks é automaticamente selecionado durante a execução das células.
Instalar as bibliotecas necessárias
Instale o XGBoost versão 2.0.3 e o scikit-learn para carregar e avaliar métricas de conjuntos de dados.
%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()
Verifica se o XGBoost 2.0.3 está instalado corretamente.
%pip show xgboost
Configurar a localização do ponto de verificação do Unity Catalog
Defina a localização do volume do Unity Catalog onde os checkpoints do modelo serão guardados. O caderno utiliza parâmetros de consulta para configurar o catálogo, esquema, volume e nome do modelo.
# 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}")
Crie um callback de checkpoint que guarde o estado do modelo a cada 50 rondas de aumento no volume do Unity Catalog. Isto permite a recuperação de falhas e treino incremental.
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
)
Treinar o modelo XGBoost numa única GPU
Carregue o conjunto de dados California Housing, configure o XGBoost para treino de GPU e treine um modelo de regressão. O modelo prevê valores medianos das casas usando características como localização, número de divisões e densidade populacional.
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}")
Carregar o modelo a partir do checkpoint e proceder à avaliação.
Carregue um ponto de controlo previamente salvo da 150.ª ronda de impulso e avalie o seu desempenho. Isto demonstra como retomar o treino ou usar estados intermédios do modelo.
# 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}")
Passos seguintes
- Documentação de suporte para GPU XGBoost
- Boas práticas para computação em GPU Serverless
- Resolução de problemas em computação de GPU sem servidor
- Treinamento distribuído com várias GPUs e vários nós
- Volumes do catálogo Unity