Der Fluss. Das Folgende ist die Lösung in meiner Umgebung, aber dieses Problem scheint aufzutreten, wenn eine andere Version von OpenCL installiert ist. Es wird daher empfohlen, zuerst die in der obigen URL beschriebene Methode auszuprobieren.
In diesem Artikel wird auch nicht erläutert, wie LightGBM verwendet wird. Qiita hat bereits Ein großartiger Kommentar zu LightGBM. Bitte beziehen Sie sich dort darauf.
Ich habe CUDA nach der offiziellen Methode installiert.
Versuchen Sie zunächst, LightGBM mithilfe der im obigen Link beschriebenen Methode zu installieren.
# http://yutori-datascience.hatenablog.com/entry/2017/07/07/162509 wie es ist
sudo apt-get update
sudo apt-get install --no-install-recommends nvidia-375
sudo apt-get install --no-install-recommends nvidia-opencl-icd-375 nvidia-opencl-dev opencl-headers
sudo init 6
sudo apt-get install --no-install-recommends git cmake build-essential libboost-dev libboost-system-dev libboost-filesystem-dev
cd ~/tmp/
git clone --recursive https://github.com/Microsoft/LightGBM
cd LightGBM
mkdir build ; cd build
cmake -DUSE_GPU=1 ..
make -j$(nproc)
cd ..
Damit ist die Kompilierung von LightGBM selbst hier abgeschlossen. Überprüfen Sie also den Betrieb
~/tmp/LightGBM/examples/binary_classification
../../lightgbm config=train.conf data=binary.train valid=binary.test device=gpu
Wenn nach der Ausführung So protokollieren ausgegeben wird, ist dies erfolgreich.
Bisher lief alles gut, aber als ich versuchte, ein Python-Modul zu kompilieren,
cd python-package/
python setup.py install --gpu
Ich bin auf eine Situation gestoßen, in der die Kompilierung mit dem folgenden Fehler gestoppt wurde
OSError: /usr/local/lib/python3.5/dist-packages/lightgbm/lib_lightgbm.so: symbol clCreateCommandQueueWithProperties, version OPENCL_2.0 not defined in file libOpenCL.so.1 with link time reference
Aufgrund verschiedener Googles fand ich eine Person, die ein ähnliches Problem im offiziellen Forum von github meldete.
Nach der Diskussion dort scheint dies daran zu liegen, dass zwei Arten von OpenCL-Treiber installiert sind (normal) Version 2.0 und Version 1.2 von Nvidia). Es scheint jedoch, dass sich die Einstellung von "LD_LIBRARY_PATH" von der mit ** LightGBM verknüpften Version unterscheidet und ein Fehler auftritt, weil der Nvidia-Treiber zuerst geladen wird **.
Dies kann auf folgende Arten gelöst werden:
** Mit pip deinstallieren **
pip uninstall lightgbm
** Oder manuell deinstallieren ** (Das Folgende ist nur ein Beispiel)
# remove manually installed LightGBM
rm -rf /home/so1/.pyenv/versions/anaconda3-4.3.0/lib/python3.6/site-packages/lightgbm
rm -rf /home/so1/.pyenv/versions/anaconda3-4.3.0/lightgbm
# also remove downloaded LightGBM source, just in case
rm -rf ~/tmp/LightGBM
git clone --recursive https://github.com/Microsoft/LightGBM
cd ./LightGBM
mkdir build; cd build
sudo cmake -DUSE_GPU=1 -DOpenCL_LIBRARY=/usr/local/cuda-8.0/lib64/libOpenCL.so -DOpenCL_INCLUDE_DIR=/usr/local/cuda-8.0/include/ ..
sudo make -j$(nproc)
cd ../python-package/
python setup.py install --precompile
Übrigens denke ich, dass "cmake" je nach Umgebung unterschiedlich ist. Schreiben Sie es daher bitte entsprechend um. Wichtig ist hier auch, dass die letzte Zeile ohne die Option ** --gpu ** kompiliert wird (da die falsche Version von OpenCL verknüpft ist).
Wenn es ohne Probleme installiert zu sein scheint, überprüfen Sie den Vorgang mit Python. Versuchen Sie beispielsweise, den Testcode aus [diesem Kommentar] auszuleihen (https://analyticsai.wordpress.com/2017/04/04/lightgbm/).
# https://analyticsai.wordpress.com/2017/04/04/lightgbm/Mehr ausleihen
import numpy as np
from sklearn import datasets, metrics, cross_validation
from lightgbm.sklearn import LGBMRegressor
import os
diabetes = datasets.load_diabetes()
x = diabetes.data
y = diabetes.target
clf = LGBMRegressor(max_depth=50,
num_leaves=21,
n_estimators=3000,
min_child_weight=1,
learning_rate=0.001,
nthread=24,
subsample=0.80,
colsample_bytree=0.80,
seed=42)
x_t, x_test, y_t, y_test = cross_validation.train_test_split(x, y, test_size=0.2)
clf.fit(x_t, y_t, eval_set=[(x_test, y_test)])
print("Mean Square Error: ", metrics.mean_squared_error(y_test, clf.predict(x_test)))
Wenn hier das folgende Protokoll ausgegeben wird, ist die Installation erfolgreich.
[1] valid_0's multi_logloss: 1.83493
[2] valid_0's multi_logloss: 1.73867
[3] valid_0's multi_logloss: 1.6495
[4] valid_0's multi_logloss: 1.56938
[5] valid_0's multi_logloss: 1.49485
[6] valid_0's multi_logloss: 1.42784
[7] valid_0's multi_logloss: 1.36532
....
Einen Vergleich der Lernzeit bei Verwendung von GPU und CPU finden Sie in diesem Artikel.
Happy Machine Learning!
Recommended Posts