개요

sagemaker studio에서 lightgbm을 이제 GPU로 돌릴일들이 생겨나기 시작했다.

이에 따라 방법을 찾아본 뒤 정리해둔다.

TF GPU docker 실행

TF 2.6 Python 3.8 GPU 이미지로 노트북 인스턴스를 실행해준다. 필자는 예시로 4 cpu + 16GB + 1 GPU 자원으로 생성하였다.

LGBM 바이너리 빌드

구동된 인스턴스 노트북에서 아래의 명령어로 LGBM을 GPU 모드로 빌드 및 설치해준다.


!apt-get install -y --no-install-recommends nvidia-opencl-dev opencl-headers !apt-get install -y --no-install-recommends git cmake build-essential libboost-dev libboost-system-dev libboost-filesystem-dev !git clone --recursive https://github.com/microsoft/LightGBM !cd LightGBM && mkdir build && cd build && cmake -DUSE_GPU=1 -DOpenCL_LIBRARY=/usr/local/cuda/lib64/libOpenCL.so -DOpenCL_INCLUDE_DIR=/usr/local/cuda/include/ .. && make -j$(nproc)

OpenCL 관련 처리

opencl 라이브러리 경로를 못찾는 문제로 인해 python LGBM gpu modeling 시 No OpenCL device found 문제가 나는것을 해결하는 방법이다.

!mkdir -p /etc/OpenCL/vendors && echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
!cat /etc/OpenCL/vendors/nvidia.icd

LGBM 파이썬 패키지 설치

아래 명령어로 LGBM 바이너리 및 파이썬 패키지 설치파일로 LGBM 파이썬 라이브러리를 설치해준다.

!apt-get -y install python3-pip

!pip install setuptools numpy scipy scikit-learn -U

!cd LightGBM && cd python-package/ && python setup.py install --precompile

GPU 모델링 테스트

아래와 같이 간단한 모델링을 GPU 모드로 돌렸을 때 아래와 같이 실행이 순조롭게 되면 성공이다.

from lightgbm import LGBMClassifier
from sklearn.datasets import make_moons

model = LGBMClassifier(boosting_type='gbdt', num_leaves=31, max_depth=- 1, learning_rate=0.1, n_estimators=300, device = "gpu")

train, label = make_moons(n_samples=300000, shuffle=True, noise=0.3, random_state=None)

model.fit(train, label)
[LightGBM] [Info] Number of positive: 150000, number of negative: 150000
[LightGBM] [Info] This is the GPU trainer!!
[LightGBM] [Info] Total Bins 510
[LightGBM] [Info] Number of data points in the train set: 300000, number of used features: 2
[LightGBM] [Info] Using GPU Device: Tesla T4, Vendor: NVIDIA Corporation
[LightGBM] [Info] Compiling OpenCL Kernel with 256 bins...
[LightGBM] [Info] GPU programs have been built
[LightGBM] [Info] Size of histogram bin entry: 8
[LightGBM] [Info] 2 dense feature groups (1.14 MB) transferred to GPU in 0.001664 secs. 0 sparse feature groups
[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.500000 -> initscore=0.000000

Reference

  • https://lightgbm.readthedocs.io/en/latest/GPU-Tutorial.html
  • https://github.com/microsoft/LightGBM/issues/586
  • https://www.kaggle.com/code/kirankunapuli/ieee-fraud-lightgbm-with-gpu/notebook