LightGBM 支持 GPU 加速训练,但并不支持 GPU 加速推理(即预测)。然而,LightGBM 支持多 GPU 进行训练,但目前不支持在推理过程中利用多 GPU。
使用 GPU 加速训练
LightGBM 可以利用 GPU 加速训练,以下是一个简单的示例,展示如何配置 LightGBM 使用 GPU 进行训练。
import lightgbm as lgb
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
# 加载示例数据
data = load_boston()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)
# 创建数据集
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test)
# 设置参数
params = {
'boosting_type': 'gbdt',
'objective': 'regression',
'metric': 'rmse',
'device': 'gpu',
'gpu_platform_id': 0, # 指定 GPU 平台 ID
'gpu_device_id': 0 # 指定 GPU 设备 ID
}
# 训练模型
gbm = lgb.train(params, train_data, valid_sets=[test_data], num_boost_round=100, early_stopping_rounds=10)
# 预测
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration)
多 GPU 训练
对于多 GPU 训练,可以设置多个 GPU 设备 ID,具体可以参考以下配置:
params = {
'boosting_type': 'gbdt',
'objective': 'regression',
'metric': 'rmse',
'device': 'gpu',
'gpu_platform_id': 0,
'gpu_device_id': '0,1' # 使用 GPU 设备 0 和 1
}
# 训练模型
gbm = lgb.train(params, train_data, valid_sets=[test_data], num_boost_round=100, early_stopping_rounds=10)
注意事项
-
GPU 训练依赖:使用 GPU 训练时,需要安装 LightGBM 的 GPU 版本,这通常需要你在安装 LightGBM 时指定 GPU 支持。
pip install lightgbm --install-option=--gpu
-
CUDA 和 cuDNN:确保你的系统安装了合适版本的 CUDA 和 cuDNN,以支持 GPU 训练。
-
GPU 加速推理:虽然 LightGBM 不支持 GPU 加速推理,但你可以考虑其他工具或库来加速推理过程,例如使用 Rapids AI 库中的 cuML 或者将模型导出为 ONNX 格式并在 ONNX Runtime 中进行推理。
使用 Rapids cuML 进行加速推理
Rapids AI 是一个支持 GPU 加速的数据科学和机器学习库。cuML 是其中的一个库,提供了 GPU 加速的机器学习算法。
ONNX Runtime 推理
将 LightGBM 模型导出为 ONNX 格式,并使用 ONNX Runtime 进行推理。
import lightgbm as lgb
import onnxruntime as rt
import onnxmltools
# 训练模型
gbm = lgb.train(params, train_data, valid_sets=[test_data], num_boost_round=100, early_stopping_rounds=10)
# 导出为 ONNX 模型
onnx_model = onnxmltools.convert_lightgbm(gbm, initial_types=[('input', FloatTensorType([None, X_train.shape[1]]))])
# 保存模型
with open("model.onnx", "wb") as f:
f.write(onnx_model.SerializeToString())
# 使用 ONNX Runtime 进行推理
sess = rt.InferenceSession("model.onnx")
input_name = sess.get_inputs()[0].name
label_name = sess.get_outputs()[0].name
pred_onx = sess.run([label_name], {input_name: X_test.astype(np.float32)})[0]
总结
LightGBM 支持 GPU 加速训练和多 GPU 训练,但推理过程目前不支持 GPU 加速。你可以结合 Rapids cuML 或 ONNX Runtime 等库来实现更快的推理速度。