서론
LightGBM 학습 시 GPU를 사용해 학습하는 방법에 대해 알아보고자 한다. LightGBM Parameter에 'device_type'으로 gpu 혹은 cuda를 명시하면 되지만 설정하지 않고 gpu나 cuda를 사용하려 하면 error가 나온다. 따라하기만 하면 되지만 자료가 많이 없고 오래된 자료가 많아 나의 경험이 다른 사람들에게 도움이 되었으면 해서 글을 짧게 남겨본다.
Linux(Ubuntu)에서 GPU 사용 방법
!git clone --recursive https://github.com/Microsoft/LightGBM
!cd LightGBM && mkdir build && cd build
!cmake -DUSE_GPU=1 ..
!make -j4
!pip uninstall lightgbm
!cd ../python-package/ && python setup.py install
Google Colab기준으로 위 코드를 실행하면 gpu사용이 가능하다.
공식문서와는 약간 다른데 공식문서의 Tutorial대로 하면 colab에서는 작동하지 않는다. 공식문서 Tutorial 링크는 아래에 남겨놓는다.
https://lightgbm.readthedocs.io/en/latest/GPU-Tutorial.html
Window에서 GPU 사용 방법
이 글을 쓰게 된 이유이다. Rinux나 Ubuntu에서는 명령어만 입력하면 편하게 설정할 수 있지만 Window에서는 프로그램들을 일일이 설치해야 하고 환경변수도 등록해주어야 하고 공식문서의 Tutorial이 outdated되어 있기에 설정하는데 어려움을 겪었다. 공식문서의 링크는 https://lightgbm.readthedocs.io/en/latest/GPU-Windows.html이다.
환경변수 등록 방법
환경변수를 등록할 일이 많으니 혹시 환경변수 등록하는 방법을 모르는 사람들을 위해 환경변수 등록하는 법에 대해 먼저 간략하게 설명하겠다.
제어판-> 시스템으로 들어가면 시스템 환경변수 편집이 있다. 이를 클릭한다.
시스템 환경변수 편집을 클릭하면 Figure2의 1번사진과 같은 창이 표시된다. 이 창의 환경변수 버튼을 클릭한다.
그 다음으로 나오는 창(Figure2의 2번사진)의 시스템변수(S)에서 Path를 찾아 클릭 후 편집을 눌러준다.
편집버튼 클릭 시 나오는 창에서 순서대로 '새로 만들기' 버튼 클릭 -> '경로 입력' -> '확인' 버튼 클릭을 하면 환경변수 설정이 끝난다.
MinGW 설치
GPU를 사용하기 위해서는 먼저 MinGW를 설치해야 한다. 공식문서에는 installer를 사용하라고 나와있으나 installer를 사용하면 다운로드가 불가하다 나오고 올해 4월부터 이러한 오류가 있는 것을 알 수 있다.
따라서 Prebuilt된 파일을 사용하면 되는데 https://sourceforge.net/projects/mingw-w64/files/ 다음 링크에서 x86_64-posix-seh를 다운받으면 된다. 공식문서에서도 sourceforge에서 프로그램을 다운받으라 하니 바이러스 걱정 말고 위 링크에서 다운받으면 된다.
위 링크에서 파일을 다운받은 후 압축을 푼다.
그 후 압축해제된 파일에서 mingw64 폴더를 C:\Program Files에 옮겨준다. 그리고 나서 C:\Program Files\mingw64\bin를 환경변수에 등록해준다. 명령 프롬포트에 gcc -v를 입력함으로써 MinGW가 맞게 설치되었나 확인할 수 있다. 만약 명령어를 인식할 수 없다면 환경변수가 올바르게 등록되지 않았을 확률이 높다.
Boost 설치
그 후 Boost를 설치 해야 한다. Boost는 설치 시 Visual c++ 14.xx 이상 버전을 요구하므로 만약 Visual c++이 설치되어 있지 않다면 https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170에서 설치하도록 하자.
Visual C++ 준비가 되었다면 https://sourceforge.net/projects/boost/files/boost/1.63.0/ 이 링크에서 boost를 다운로드 하면 된다. 이 글에서는 1.6.3 버전을 사용한다. C:\Program Files에 boost라는 이름의 폴더를 만든 후 다운받은 파일을 압축해제 후 boost폴더에 옮긴다. 그 후 명령프롬포트를 실행 후 아래의 코드를 순서대로 입력한다.
cd C:\boost\boost_1_63_0\tools\build
bootstrap.bat gcc # cd C:\boost\boost_1_63_0\tools\build 폴더에 b2.exe라는 프로그램이 생긴다.
b2 install --prefix="C:\boost\boost-build" toolset=gcc # boost-build라는 폴더에 bin, share폴더가 생긴다
cd C:\boost\boost_1_63_0
bootstrap.bat gcc
b2 install --prefix="C:\boost\boost-build" toolset=gcc # boost-build라는 폴더에 lib, include폴더가 생긴다
# 아래 코드의 -j N에서 N은 본인 CPU의 코어수
b2 install --build_dir="C:\boost\boost-build" --prefix="C:\boost\boost-build" toolset=gcc --with=filesystem,system threading=multi --layout=system release -j 6
위 코드 실행 후 명령프롬포트 마지막줄에 error가 몇개 뜨는데 무시해도 된다. 모두 설치되었다면 boost-build폴더에 폴더가 총 4개 있어야 한다.
설치가 다 되었다면 C:\boost\boost-build\bin와 C:\boost\boost-build\include\boost를 환경변수에 추가한다.
만약 b2 명령어를 명령프롬포트에서 인식할 수 없는 명령어라고 나온다면 b2.exe가 생기지 않았거나 visual c++ 14이상 버전이 없기때문에 생기는 문제이다.
LightGBM 다운로드
그리고 나서 깃을 이용해 LightGBM 라이브러리를 C드라이브에 다운받아야 한다. 깃이 없는 사람은 https://git-scm.com/download/win여기서 다운받고 설치하면 된다.
라이브러리 다운은 아래의 명령어들을 명령 프롬포트 혹은 깃배쉬에 순서대로 입력하면 된다.
cd C:/
mkdir github_repos
cd github_repos
git clone --recursive https://github.com/microsoft/LightGBM
Cmake 설치
마지막으로 https://cmake.org/download/에서 Windows x64 Installer를 다운로드 한다.
설치를 한후 cmake (cmake-gui)를 실행시키면 Figure4와 같이 빈화면일 수도 있고 Name Value에 빨간색 값들이 있을 수도 있는데 어떤 경우든 우선 'Where is the source code'에 C:\github_repos\LightGBM를 경로로 설정하고 'Where to build the binaries'에 LightGBM폴더에 build폴더를 만들어 C:\github_repos\LightGBM\build를 경로로 설정하자.
그리고 나서 빈화면인 경우는 Tools->Configure를 통해 generator를 MinGW Makefiles로 하고 설정하도록 하자.
generator를 설정하고 나면 Name Value에 빨간줄들이 생기는데 그 중 USE_GPU를 찾아 선택한 후 Configure, Generate를 순서대로 누르면 차례대로 Configureing done, Generating done이 하단 출력창에 출력된다.
만약 여기서 오류가 생긴다면 Boost가 제대로 설정되지 않았거나 generator가 잘못됐을 가능성이 있어 File-> Delete Cash후 generator를 Tools에서 다시 configure하거나 Boost-build폴더에 폴더 4개가 생긴게 맞는지, 환경변수 설정을 맞게 했는지를 보면 된다.
이렇게 하면 LightGBM에서 GPU를 사용할 수 있다!
'AI' 카테고리의 다른 글
Decision Tree부터 Random Forest, LightGBM까지(Ensemble Learning) (0) | 2022.10.12 |
---|---|
LightGBM: A Highly Efficient Gradient BoostingDecision Tree (0) | 2022.10.11 |
모델 학습 시 데이터를 shuffle해야 하는 이유(배치 학습) (0) | 2022.10.04 |
캐글 타이타닉 생존자 예측 실습(Logistic Regression) (0) | 2022.09.28 |
Attention Is All You Need 리뷰 (0) | 2022.09.22 |