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

人工智能-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 CatBoostRegressor

model = 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 xgb

print(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 = 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")

  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.kler.cn/a/310616.html

相关文章:

  • 无人机动力测试台如何快速外接第三方传感器
  • Python数据预处理
  • Java Stream 流常用操作大全
  • 使用docker-compose单点搭建社区版seafile+onlyoffice在线word编辑平台
  • go T 泛型
  • C++ | Leetcode C++题解之第556题下一个更大元素III
  • swc 编译 es6为commonjs
  • 「数组」堆排序 / 大根堆优化(C++)
  • 双端队列double-ended queue
  • c/c++语言中extern的用法(VS编译)
  • 代码结构之结构体
  • 算法面经手撕系列(2)--手撕BatchNormlization
  • 【每日一诗】【诗词创作】【诗】《雨前秋夜》
  • 浅谈Linux中的环回设备
  • C++将32位深图片处理成灰度图
  • 构建自己的文生图工具:Python + Stable Diffusion + CUDA
  • 基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程
  • JAVA-集合相关
  • 功能测试干了三年,快要废了。。。
  • 工号不够用了怎么办? - 华为OD统一考试(E卷)
  • 【代码随想录训练营第42期 续Day58打卡 - 图论Part8 - Dijkstra算法
  • 在 Linux 系统中目录架构说明
  • c语言--力扣简单题目(最后一个单词的长度)讲解
  • 【毕设】基于Java的超市管理系统
  • SQL:DATEDIFF函数
  • Java网络编程:构建高性能的TCP/IP服务