You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何XGBoost.Regressor在CPU与GPU环境下MAE结果差异显著?

问题:XGBoost+Optuna在CPU与GPU环境下MAE指标差异大的原因?

我正在用Optune寻找XGBoost.Regressor的最优配置,在本地CPU环境(显卡不支持机器学习)和Kaggle的GPU环境分别运行代码,相同参数下得到的MAE指标差异极大。已在Kaggle执行!conda update --all -q -y更新所有包,想知道差异原因。

运行代码

def objective(trial, data=data, target=target):

    train_x, test_x, train_y, test_y = train_test_split(data, target, test_size=0.15, random_state=SEED)  #, random_state=1234
    param = {
        'objective': 'reg:squarederror',
        'booster': 'gbtree',
        'eval_metric': 'mae',
        # tree_method':'gpu_hist',  # this parameter means using the GPU when training our model to speedup the training process
        'lambda': trial.suggest_float('lambda', 1e-3, 13.0),  # old value 10.0
        'alpha': trial.suggest_float('alpha', 1e-3, 13.0),    # old value 10.0
        'colsample_bytree': trial.suggest_categorical('colsample_bytree', [0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]),
        'subsample': trial.suggest_categorical('subsample', [0.3, 0.4,  0.5, 0.6, 0.7, 0.8, 1.0]),  # added 0.3
        'learning_rate': trial.suggest_categorical('learning_rate', [0.006, 0.008, 0.01, 0.012 ,0.014, 0.016, 0.018, 0.02]),  # added 0.006
        'n_estimators': 50000,  # old 10000
        'max_depth': trial.suggest_categorical('max_depth', [5, 7, 9, 11, 13, 15, 17, 19]),  # added 19
        'random_state': trial.suggest_categorical('random_state', [SEED]),
        'min_child_weight': trial.suggest_int('min_child_weight', 1, 500),  # old max value=300
        'early_stopping_rounds': 500,  # old 100
    }
    model = xgb.XGBRegressor(**param)

    model.fit(train_x, train_y, eval_set=[(test_x, test_y)], verbose=2000)

    xgb_preds = model.predict(test_x)

    mae = mean_absolute_error(test_y, xgb_preds)

    return mae

试验结果

  • 本地CPU环境最优试验结果:Best is trial 48 with value: 1.1957438226176318.
  • Kaggle GPU环境最优试验结果:Best is trial 43 with value: 1.351620287489423.

可能的原因分析

  • 树构建算法的默认差异:你代码里注释掉了tree_method='gpu_hist',但GPU环境下XGBoost会自动启用GPU加速的树构建算法(gpu_hist),而CPU环境默认用hist或exact。这两种算法在直方图分箱、样本分割的细节实现上有精度差异,会直接影响模型的结构和预测结果。
  • 随机逻辑的硬件差异:虽然指定了random_state,但CPU和GPU的随机数生成器实现逻辑不同。子采样(subsample)、列采样(colsample_bytree)这些带随机操作的步骤,在GPU上生成的随机序列和CPU不一致,导致每轮训练的样本/特征选择不同,最终模型走向不同。
  • 浮点运算精度差异:GPU通常默认用单精度(float32)计算,CPU则多用双精度(float64)。训练过程中大量的浮点运算累计误差会逐步放大,影响模型的权重更新和最终预测值,进而导致MAE差异。
  • 早停机制的触发差异:GPU训练速度远快于CPU,验证集指标的计算时机和精度可能和CPU有细微差别,导致early stopping触发的轮数不同。最终模型的迭代次数不一样,MAE自然会有明显差距。

内容的提问来源于stack exchange,提问作者Linxusr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:37:43