GPU 加速 #

GPU 加速原理 #

LightGBM 支持 GPU 加速训练,可以显著提升训练速度:

text
┌─────────────────────────────────────────────────────────────┐
│                    GPU 加速原理                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  CPU 训练:                                                   │
│  - 串行计算直方图                                           │
│  - 单线程处理特征                                           │
│                                                             │
│  GPU 训练:                                                   │
│  - 并行计算直方图                                           │
│  - 数千核心同时处理                                         │
│  - 批量处理特征                                             │
│                                                             │
│  加速效果:                                                   │
│  - 小数据集: 2-5x                                           │
│  - 中等数据集: 5-20x                                        │
│  - 大数据集: 10-50x                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

GPU 环境配置 #

安装 GPU 版本 #

bash
pip install lightgbm --install-option=--gpu

验证 GPU 支持 #

python
import lightgbm as lgb

print(f"LightGBM 版本: {lgb.__version__}")

params = {'device': 'gpu', 'verbose': -1}
try:
    data = lgb.Dataset([[1, 2], [3, 4]], label=[0, 1])
    lgb.train(params, data, num_boost_round=1)
    print("GPU 支持正常")
except Exception as e:
    print(f"GPU 不支持: {e}")

GPU 参数配置 #

基本配置 #

python
params = {
    'objective': 'binary',
    'metric': 'auc',
    'device': 'gpu',
    'gpu_platform_id': 0,
    'gpu_device_id': 0,
    'verbose': -1
}

参数说明 #

参数 说明 默认值
device 设备类型 cpu
gpu_platform_id GPU 平台 ID 0
gpu_device_id GPU 设备 ID 0
gpu_use_dp 是否使用双精度 False
num_gpu GPU 数量 1

性能对比 #

python
import lightgbm as lgb
import numpy as np
import time
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=100000, n_features=100, random_state=42)

print("CPU 训练:")
params_cpu = {
    'objective': 'binary',
    'metric': 'auc',
    'device': 'cpu',
    'num_threads': 4,
    'verbose': -1
}

train_data = lgb.Dataset(X, label=y)
start = time.time()
model_cpu = lgb.train(params_cpu, train_data, num_boost_round=100)
cpu_time = time.time() - start
print(f"训练时间: {cpu_time:.2f}s")

print("\nGPU 训练:")
params_gpu = {
    'objective': 'binary',
    'metric': 'auc',
    'device': 'gpu',
    'verbose': -1
}

start = time.time()
model_gpu = lgb.train(params_gpu, train_data, num_boost_round=100)
gpu_time = time.time() - start
print(f"训练时间: {gpu_time:.2f}s")

print(f"\n加速比: {cpu_time / gpu_time:.2f}x")

最佳实践 #

  1. 数据量要求:GPU 适合大数据集,小数据集可能更慢
  2. max_bin 设置:GPU 版本建议设置较小的 max_bin
  3. 内存管理:注意 GPU 内存限制
  4. 精度控制:根据需要选择单精度或双精度

下一步 #

现在你已经掌握了 LightGBM 的 GPU 加速,接下来学习 二分类问题,开始实战案例学习!

最后更新:2026-04-04