3 stable releases

1.0.2 Jul 19, 2023
1.0.1 Jun 30, 2023
1.0.0 Jun 24, 2023

#291 in Machine learning

MIT license

9MB
171K SLoC

C++ 102K SLoC // 0.1% comments FORTRAN Legacy 23K SLoC // 0.4% comments Python 16K SLoC // 0.2% comments R 12K SLoC // 0.2% comments CUDA 10K SLoC // 0.1% comments C 4K SLoC // 0.4% comments Shell 2K SLoC // 0.2% comments Rust 1K SLoC // 0.0% comments SWIG 399 SLoC // 0.3% comments PowerShell 366 SLoC // 0.1% comments Visual Studio Project 349 SLoC JavaScript 261 SLoC // 0.1% comments XSL 115 SLoC Visual Studio Solution 32 SLoC Bazel 28 SLoC Batch 27 SLoC Forge Config 13 SLoC Bitbake 8 SLoC

lightgbm3 — Rust bindings for LightGBM

Crates.io Docs.rs build

lightgbm3 is based on lightgbm (which is unsupported by now), but it is not back-compatible with it.

Installation

cargo add lightgbm3

Since lightgbm3 compiles LightGBM from source, you also need to install development libraries:

for Linux:

apt install -y cmake clang libclang-dev libc++-dev gcc-multilib

for Mac:

brew install cmake
brew install libomp # only required if you compile with "openmp" feature

for Windows

  1. Install CMake and VS Build Tools.
  2. Install LLVM and set LIBCLANG_PATH environment variable (i.e. C:\Program Files\LLVM\bin)

Please see below for details.

Usage

Training:

use lightgbm3::{Dataset, Booster};
use serde_json::json;

let features = vec![vec![1.0, 0.1, 0.2],
                    vec![0.7, 0.4, 0.5],
                    vec![0.9, 0.8, 0.5],
                    vec![0.2, 0.2, 0.8],
                    vec![0.1, 0.7, 1.0]];
let labels = vec![0.0, 0.0, 0.0, 1.0, 1.0];
let dataset = Dataset::from_vec_of_vec(features, labels, true).unwrap();
let params = json!{
   {
        "num_iterations": 10,
        "objective": "binary",
        "metric": "auc",
    }
};
let bst = Booster::train(dataset, &params).unwrap();
bst.save_file("path/to/model.lgb").unwrap();

Inference:

use lightgbm3::{Dataset, Booster};

let bst = Booster::from_file("path/to/model.lgb").unwrap();
let features = vec![1.0, 2.0, -5.0];
let n_features = features.len();
let y_pred = bst.predict_with_params(&features, n_features as i32, true, "num_threads=1").unwrap()[0];

Look in the ./examples/ folder for more details:

Features

lightgbm3 supports the following features:

  • polars for polars support
  • openmp for MPI support
  • gpu for GPU support
  • cuda for experimental CUDA support

Benchmarks

cargo bench

Add --features=openmp, --features=gpu and --features=cuda appropriately.

Development

git clone --recursive https://github.com/Mottl/lightgbm3-rs.git

Thanks

Great respect to vaaaaanquish for the LightGBM Rust package, which unfortunately no longer supported.

Much reference was made to implementation and documentation. Thanks.

Dependencies

~1.4–8MB
~157K SLoC