人工智能-GPU版本机器学习、深度学习模型安装
背景
1、在有Nvidia-GPU的情况下模型使用cuda加速计算,但是很有多模型的GPU和CPU版本安装方式不同,如何安装lgb\cat\xgb.
2、为了让代码有普适性,如何自适应环境当中的设备进行CPU或者GPU的调整?
解决方案
问题一:
- 安装 GPU 版本的 LightGBM
LightGBM 默认不会安装 GPU 支持版,需要手动编译以启用 GPU。以下是在 Linux 和 Windows 上编译 GPU 版本 LightGBM 的方法:
Linux (Ubuntu 20.04/18.04) 上安装 GPU 版本 LightGBM:
安装依赖:
sudo apt-get update
sudo apt-get install -y cmake gcc g++ libboost-dev libboost-system-dev libboost-filesystem-dev
克隆 LightGBM 仓库:
git clone --recursive https://github.com/microsoft/LightGBM
cd LightGBM
编译 LightGBM(启用 GPU 支持):
mkdir build
cd build
cmake -DUSE_GPU=1 ..
make -j4
针对catboost和xgboost,直接支持GPU安装。
2. 安装 GPU 版本的 CatBoost
CatBoost 安装相对简单,默认支持 GPU 加速。
在 Linux 或 Windows 上安装 GPU 版本 CatBoost:
直接通过 pip 安装最新版本的 CatBoost,它会自动检测 GPU 并启用 GPU 加速(如果 CUDA 安装正确):
pip install catboost
验证 GPU 支持:
from catboost import CatBoostRegressor
model = CatBoostRegressor(task_type="GPU")
print(model.get_param("task_type"))
如果 task_type=“GPU”,说明 GPU 正常启用。
注意:确保已经安装了 CUDA Toolkit,并且你的系统支持 NVIDIA GPU。
- 安装 GPU 版本的 XGBoost
XGBoost 支持通过 pip 安装 GPU 版本,前提是你已经正确安装了 CUDA。
在 Linux 或 Windows 上安装 GPU 版本 XGBoost:
直接通过 pip 安装 GPU 版本 XGBoost:
pip install xgboost --user
验证 GPU 支持:
import xgboost as xgb
print(xgb.rabit.get_num_procs()) # 检查是否能调用GPU
问题二:
为了根据当前环境自动判断是否使用 GPU,可以通过检测系统是否支持 GPU 加速,然后动态修改参数设置。你可以使用 LightGBM 和 XGBoost 的 API 来检测 GPU 支持情况,并根据结果在代码中自动选择 GPU 或 CPU。
-
判断是否支持 GPU:
你可以通过检查系统是否支持 CUDA 来判断是否可以使用 GPU。如果支持 GPU,则在参数中保留 GPU 设置;如果不支持 GPU,则切换到 CPU。 -
代码实现:
下面是一个通用的解决方案,自动检测 GPU 并根据检测结果修改 LightGBM、CatBoost 和 XGBoost 参数:
import lightgbm as lgb
import xgboost as xgb
from catboost import CatBoostRegressor
import os
# 检查 GPU 可用性
def check_gpu():
gpu_available = False
# 检查是否有CUDA支持
try:
if lgb.basic._Config().get_device_type() == 'gpu':
print("LightGBM: GPU available.")
gpu_available = True
except:
print("LightGBM: No GPU support, using CPU.")
try:
if xgb.rabit.get_num_procs() > 0:
print("XGBoost: GPU available.")
gpu_available = True
except:
print("XGBoost: No GPU support, using CPU.")
try:
if CatBoostRegressor(task_type='GPU').get_param('task_type') == 'GPU':
print("CatBoost: GPU available.")
gpu_available = True
except:
print("CatBoost: No GPU support, using CPU.")
return gpu_available
# 设置参数,根据GPU可用性切换
gpu_available = check_gpu()
# LightGBM 参数
lgb_params = {
"boosting_type": "gbdt",
"objective": "regression",
"metric": "rmse",
'random_state': 2024,
"max_depth": 12,
"learning_rate": 0.1,
"n_estimators": 2048,
"colsample_bytree": 0.8,
"colsample_bynode": 0.8,
"verbose": -1,
"reg_alpha": 0.1,
"reg_lambda": 10,
"extra_trees": True,
'num_leaves': 64,
"max_bin": 225,
}
if gpu_available:
lgb_params['device'] = 'gpu'
lgb_params['gpu_use_dp'] = True # 开启GPU双精度
else:
lgb_params['device'] = 'cpu' # 使用CPU
# CatBoost 参数
cat_params = {
'eval_metric': "RMSE",
'bagging_temperature': 0.25,
'iterations': 2000,
'learning_rate': 0.04,
'max_depth': 8,
'l2_leaf_reg': 1.25,
'min_data_in_leaf': 15,
'random_strength': 0.25,
'verbose': 0
}
if gpu_available:
cat_params['task_type'] = 'GPU'
else:
cat_params['task_type'] = 'CPU'
# XGBoost 参数
xgb_params = {
'random_state': 2025,
'n_estimators': 2000,
'learning_rate': 0.0098,
'max_depth': 10,
'reg_alpha': 0.08,
'reg_lambda': 0.77,
'subsample': 0.95,
'colsample_bytree': 0.62,
'min_child_weight': 3
}
if gpu_available:
xgb_params['tree_method'] = 'gpu_hist'
else:
xgb_params['tree_method'] = 'hist'
# 打印选择的设备类型
print("Using GPU" if gpu_available else "Using CPU")
- 要点:
check_gpu() 函数会检测系统中是否支持 GPU。如果 LightGBM、XGBoost 或 CatBoost 支持 GPU,则自动启用 GPU,否则将使用 CPU。
参数动态调整:根据检测结果,设置相应的参数以启用 GPU 或 CPU 计算。
错误处理:即使没有 GPU 环境,程序也会继续运行,而不会因为 GPU 不可用而报错。
参考资料
安装lgb-gpu版本教程
https://lightgbm.readthedocs.io/en/stable/Installation-Guide.html#id17
https://blog.csdn.net/carefree2005/article/details/134811640