Le flux. Ce qui suit est la solution dans mon environnement, mais ce problème semble se produire lorsqu'une version différente d'OpenCL est installée, il est donc recommandé d'essayer d'abord la méthode décrite dans l'URL ci-dessus.
De plus, cet article n'explique pas comment utiliser LightGBM. Qiita a déjà Un excellent commentaire sur LightGBM, veuillez donc vous y référer.
J'ai installé CUDA selon la méthode officielle.
Tout d'abord, essayez d'installer LightGBM en utilisant la méthode du lien ci-dessus.
# http://yutori-datascience.hatenablog.com/entry/2017/07/07/162509 tel quel
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 ..
Ainsi, la compilation de LightGBM elle-même est terminée ici. Alors, vérifiez le fonctionnement
~/tmp/LightGBM/examples/binary_classification
../../lightgbm config=train.conf data=binary.train valid=binary.test device=gpu
Après l'exécution, si Journal comme celui-ci est sorti, il réussit.
Jusqu'à présent, tout s'est bien passé, mais quand j'ai essayé de compiler un module Python,
cd python-package/
python setup.py install --gpu
J'ai rencontré une situation où la compilation s'est arrêtée avec l'erreur suivante
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
À la suite de divers googles, j'ai trouvé une personne signalant un problème similaire sur le forum officiel de github.
À la suite de la discussion, il semble que ce soit parce que deux types de pilotes OpenCL sont installés (normal Version 2.0 et version 1.2 faite par Nvidia). Cependant, il semble que le paramètre de LD_LIBRARY_PATH
soit différent de la version liée à ** LightGBM, et une erreur se produit car le pilote Nvidia est chargé en premier **.
Cela peut être résolu des manières suivantes:
** Désinstaller avec pip **
pip uninstall lightgbm
** Ou désinstaller manuellement ** (Ce qui suit n'est qu'un exemple)
# 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
Au fait, je pense que cmake
est différent selon votre environnement, veuillez donc le réécrire comme il convient. Il est également important ici que la dernière ligne se compile sans l'option ** --gpu ** (car la mauvaise version d'OpenCL est liée).
S'il semble être installé sans aucun problème, vérifiez le fonctionnement avec Python. Par exemple, essayez d'emprunter le code de test de ce commentaire.
# https://analyticsai.wordpress.com/2017/04/04/lightgbm/Emprunter plus
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)))
Si le journal suivant est généré ici, l'installation est réussie.
[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
....
Veuillez consulter cet article pour une comparaison du temps d'apprentissage lors de l'utilisation du GPU et du CPU.
Happy Machine Learning!
Recommended Posts