環境
nvidia/cuda:11.7.1-cudnn8-runtime-ubuntu20.04
問題
LightGBM において,devide='gpu'
と指定すると,Error: No OpenCL Device Found
というエラーが出て,実行できない場合がある123.
PyPL に記載されている通りにインストールしたがうまくいかず,公式の LightGBM GPU Tutorial に記載されている方法では,必要になるパッケージが明らかでない.
解決策
公式の Dockerfile for LightGBM GPU Version with Python を元に,本環境で実行できる Dockerfile を作成した.
必要なモジュールのインストール
公式の Dockerfile で指定されているパッケージに加えて,ocl-icd-opencl-dev
が必要になった.
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
curl \
bzip2 \
ca-certificates \
libglib2.0-0 \
libxext6 \
libsm6 \
libxrender1 \
git \
vim \
mercurial \
subversion \
cmake \
libboost-dev \
libboost-system-dev \
libboost-filesystem-dev \
gcc \
g++ \
ocl-icd-opencl-dev
LightGBM のインストール
デフォルトでは,/usr/local/cuda/lib64/libOpenCL.so
のパスで指定されていたが,libOpenCL.so
が存在せず,エラーを吐いていたため,/usr/local/cuda/lib64/libOpenCL.so.1
に変更した.
また,環境に応じて CUDA のバージョンを書き換える必要がある.
RUN mkdir -p /etc/OpenCL/vendors && \
echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
RUN cd /usr/local/src && mkdir lightgbm && cd lightgbm && \
git clone --recursive --branch stable --depth 1 https://github.com/microsoft/LightGBM && \
cd LightGBM && mkdir build && cd build && \
cmake -DUSE_GPU=1 -DOpenCL_LIBRARY=/usr/local/cuda/lib64/libOpenCL.so.1 -DOpenCL_INCLUDE_DIR=/usr/local/cuda/include/ .. && \
make OPENCL_HEADERS=/usr/local/cuda-11.7/targets/x86_64-linux/include LIBOPENCL=/usr/local/cuda-11.7/targets/x86_64-linux/lib
ENV PATH /usr/local/src/lightgbm/LightGBM:${PATH}
RUN /bin/bash -c "cd /usr/local/src/lightgbm/LightGBM && sh ./build-python.sh install --precompile"
参考資料
- docker-cuda-asdf-py3-lightgbm-pytorch-pyg において実行が確認できた.