in src/sagemaker_xgboost_container/algorithm_mode/train.py [0:0]
def get_callbacks_watchlist(train_dmatrix, val_dmatrix, model_dir, checkpoint_dir,
early_stopping_data_name, early_stopping_metric, early_stopping_rounds,
save_model_on_termination, is_master, fold=None):
if checkpoint_dir and fold is not None:
checkpoint_dir = os.path.join(checkpoint_dir, f"model-{fold}")
# Set callbacks
xgb_model, iteration = checkpointing.load_checkpoint(checkpoint_dir)
if xgb_model is not None:
if fold is not None:
xgb_model = f"{xgb_model}-{fold}"
logging.info("Checkpoint loaded from %s", xgb_model)
logging.info("Resuming from iteration %s", iteration)
callbacks = []
callbacks.append(xgb.callback.EvaluationMonitor())
if checkpoint_dir:
save_checkpoint = xgb.callback.TrainingCheckPoint(directory=checkpoint_dir,
iterations=iteration,
name=checkpointing.CHECKPOINT_FILENAME)
callbacks.append(save_checkpoint)
if save_model_on_termination == "true":
model_name = f"{MODEL_NAME}-{fold}" if fold is not None else MODEL_NAME
save_intermediate_model = checkpointing.SaveIntermediateModelCallBack(model_dir, model_name, is_master)
callbacks.append(save_intermediate_model)
add_sigterm_handler(model_dir, is_master)
if early_stopping_data_name and early_stopping_metric and early_stopping_rounds:
maximize = early_stopping_metric in XGB_MAXIMIZE_METRICS
early_stop = xgb.callback.EarlyStopping(rounds=early_stopping_rounds,
data_name=early_stopping_data_name,
metric_name=early_stopping_metric,
maximize=maximize,
save_best=True)
callbacks.append(early_stop)
watchlist = [(train_dmatrix, 'train')]
if val_dmatrix is not None:
watchlist.append((val_dmatrix, 'validation'))
return xgb_model, iteration, callbacks, watchlist