当前位置: 首页 > news >正文

人工智能-GPU版本机器学习、深度学习模型安装

背景

1、在有Nvidia-GPU的情况下模型使用cuda加速计算,但是很有多模型的GPU和CPU版本安装方式不同,如何安装lgb\cat\xgb.
2、为了让代码有普适性,如何自适应环境当中的设备进行CPU或者GPU的调整?

解决方案

问题一:

  1. 安装 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。

  1. 安装 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。

  1. 判断是否支持 GPU:
    你可以通过检查系统是否支持 CUDA 来判断是否可以使用 GPU。如果支持 GPU,则在参数中保留 GPU 设置;如果不支持 GPU,则切换到 CPU。

  2. 代码实现:
    下面是一个通用的解决方案,自动检测 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")
  1. 要点:
    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


http://www.mrgr.cn/news/25186.html

相关文章:

  • QT之QML学习五:添加自定义Qml组件,以及组件管理
  • 计网简简单单复习一下
  • python程序使用nohup后台执行不能实时输出到定向文件的解决方法
  • 移动订货小程序哪个好 批发订货系统源码哪个好
  • 由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(五)
  • 手把手教你安装pytorch包
  • 多线程和高并发-17题
  • 企业如何“向内求”, 挖出更多净利润?
  • 电脑文件怎么加密?文件加密方法介绍
  • LVDS眼图eys diagram测试
  • 核心系统用PG了,抠脑壳的权限,搞晕了!
  • 数据分布:散点+箱线+小提琴 三图合一
  • 公开数据库汇总及下载3-遗传变异数据库(ClinVar、dbVar、dbSNP、RefSeq)、oncoKB
  • 价值流:从理论框架到实践落地的系统化指南
  • 【Linux】Linux常见指令以及权限理解(下)
  • 路径规划 | 基于A*算法的往返式全覆盖路径规划的改进算法(Matlab)
  • 峟思-振弦式应变计在煤矿井筒中的应用
  • 《2024-2029年全球及中国交通安全移动护栏市场现状分析与发展前景预测研究报告》
  • 股指期货开户条件有什么要求和流程?
  • 【JAVA入门】Day39 - 字符集