0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LightGBM の Python パッケージを GitHub リポジトリからビルドしてインストールする (Ubuntu の場合)

0
Posted at

LightGBM の Python パッケージを GitHub リポジトリからビルドしたいことがあると思います (デバッグプリントを仕込みたい、改造したいなど)。

GitHub リポジトリからの Python パッケージビルド手順は、ドキュメント [下記1] の Build Python-package からリンクがあり、そのリンク先 [下記2] の Install from GitHub にあります。つまり、OS に応じて必要なソフトをインストールした上で、GitHub リポジトリを取得して sh ./build-python.sh install を実行するだけです。

  1. Installation Guide — LightGBM 4.6.0.99 documentation#build-python-package
  2. LightGBM/python-package at master · microsoft/LightGBM

それだけですが、私が Ubuntu 環境で作業したときの手順を、ポイントを含め記します (普段から Ubuntu 上で Python 開発されている場合は特に詰まらない内容かもしれません)。

私の作業環境は以下の Amazon EC2 インスタンスでした。
AMI: Ubuntu Server 24.04 LTS, インスタンスタイプ: m8a.xlarge (x86_64/AMD EPYC)

先にポイント

先にポイントを書くと以下です。

  • Ubuntu 環境では Python, pip と cmake build-essential があれば LightGBM の GitHub リポジトリから Python パッケージがビルドできます。
  • ビルド時には、その場 (リポジトリ直下) で、コマンド python pip がシステム環境の Python, pip (標準的には usr/bin/*) ではなく自分が入れた Python, pip を呼び出すようにしてください。システム環境の Python, pip が呼び出されると、build-python.sh 内で build パッケージを入れて実行する時点でおそらく入れられず失敗します (そもそも Ubuntu システム環境の Python にパッケージを入れるのは避けた方がよいです)。
    • これはエイリアスによる退避では駄目です (スクリプト内でエイリアスは効かないため)。type -a python type -a pipと打って、自分が入れた実行ファイルが (エイリアスではなく) 上位なら大丈夫です。
    • 例えば pyenv で Python を入れていて、グローバルまたはビルド場所にローカルにバージョンを設定していれば問題は起きないです。
    • もし自分の入れた Python, pip を呼び出すコマンドが python3 pip3 だという場合は、build-python.sh 内の L183 (build のインストール) と L374 (build によるビルド) と L386 (lightgbm 自体のインストール) を書き換えれば大丈夫です (行数は現在のリビジョン 80ab6d3 におけるものです)。
  • lightgbmnumpyscipy を要しますが、少なくともリポジトリからのビルド&インストールでは勝手に入りません (実行してみたらすぐわかりますが)。

ビルド&インストール手順

以下のような流れになると思います。

# git 及び C/C++ 系ソフトウェアをビルドツールを取得します (もしなければ)
sudo apt update
sudo apt install -y git cmake build-essential

# LightGBM のソースコードを取得します
git clone --recursive https://github.com/microsoft/LightGBM
cd LightGBM

# ここで type -a python と type -a pip の結果が意図通りか確認します
# もし必要ならば build-python.sh 内を python3 などに編集します
# その上でビルド & Python にインストールします
sh build-python.sh install

# 自分でビルドした LightGBM が入ったことを確認します
python -c 'import lightgbm; print(lightgbm.__version__)'
# -> 4.6.0.99  # PyPI から入れるとたぶん 4.6.0 です

# LightGBM を実際に動かすには最低限これらも必要です (もしなければ)
pip install numpy
pip install scipy

# そうしたら Python から LightGBM が動くことを確認します

# 必要ならば LightGBM のソースコードにデバッグプリントを仕込んだり改造したりします
# そしてまたビルド & Python にインストールします
sh build-python.sh install

(おまけ) デバッグプリント

以下のように「gain がこの値になったというのはどういうことだったんだろう」とかデバッグできます。さらにおまけですが私がこれで学んだことがこちら (はてなブログ) です。

src/treelearner/feature_histogram.hpp
  void FindBestThreshold(double sum_gradient, double sum_hessian,
                         data_size_t num_data,
                         const FeatureConstraint* constraints,
                         double parent_output,
                         SplitInfo* output) {
    output->default_left = true;
    output->gain = kMinScore;
    find_best_threshold_fun_(sum_gradient, sum_hessian + 2 * kEpsilon, num_data,
                             constraints, parent_output, output);
    output->gain *= meta_->penalty;
+    if (output->gain > 56.87) {
+      Log::Info("PARENT_OUTPUT %.6f", parent_output);
+      Log::Info("GRAD %.6f", sum_gradient);
+      Log::Info("HESS %.6f", sum_hessian);
+      Log::Info("GRAD(L) %.6f", output->left_sum_gradient);
+      Log::Info("GRAD(R) %.6f", output->right_sum_gradient);
+      Log::Info("HESS(L) %.6f", output->left_sum_hessian);
+      Log::Info("HESS(R) %.6f", output->right_sum_hessian);
+      Log::Info("GAIN %.6f", output->gain);
+    }
  }

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?