人工智能-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 CatBoostRegressormodel = 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 xgbprint(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 = Trueexcept:print("LightGBM: No GPU support, using CPU.")try:if xgb.rabit.get_num_procs() > 0:print("XGBoost: GPU available.")gpu_available = Trueexcept:print("XGBoost: No GPU support, using CPU.")try:if CatBoostRegressor(task_type='GPU').get_param('task_type') == 'GPU':print("CatBoost: GPU available.")gpu_available = Trueexcept: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