/falkon

Large-scale, multi-GPU capable, kernel solver

Primary LanguagePythonMIT LicenseMIT

Falkon

Python implementation of the Falkon algorithm for large-scale, approximate kernel ridge regression.

The code is optimized for scalability to large datasets with tens of millions of points and beyond. Full kernel matrices are never computed explicitly so that you will not run out of memory on larger problems.

Preconditioned conjugate gradient optimization ensures that only few iterations are necessary to obtain good results.

The basic algorithm is a Nyström approximation to kernel ridge regression, which needs only three hyperparameters:

  1. The number of centers M - this controls the quality of the approximation: a higher number of centers will produce more accurate results at the expense of more computation time, and higher memory requirements.
  2. The penalty term, which controls the amount of regularization.
  3. The kernel function. A good default is always the Gaussian (RBF) kernel (falkon.kernels.GaussianKernel).

For more information about the algorithm and the optimized solver, you can download our paper: Kernel methods through the roof: handling billions of points efficiently

Documentation

The API is sklearn-like, so that Falkon should be easy to integrate in your existing code. Several worked-through examples are provided in the docs, and for more advanced usage, extensive documentation is available at https://falkonml.github.io/falkon/.

If you find a bug, please open a new issue on GitHub!

Installation

Dependencies:

  • Please install PyTorch first.
  • cmake and a C++ compiler are also needed for KeOps acceleration (optional but strongly recommended).

To install from source, you can run

pip install --no-build-isolation git+https://github.com/FalkonML/falkon.git

We alternatively provide pre-built pip wheels for the following combinations of PyTorch and CUDA:

Linux cu117 cu118 cu121
torch 2.0.0
torch 2.1.0
torch 2.2.0

For other combinations, and previous versions of Falkon, please check here for a list of supported wheels.

To install a wheel for a specific PyTorch + CUDA combination, you can run

# e.g., torch 2.2.0 + CUDA 12.1
pip install falkon -f https://falkon.dibris.unige.it/torch-2.2.0_cu121.html

Similarly for CPU-only packages

# e.g., torch 2.1.0 + cpu
pip install falkon -f https://falkon.dibris.unige.it/torch-2.1.0_cpu.html

More detailed installation instructions are available in the documentation.

Gradient-based Hyperparameter Optimization

New! We added a new module for automatic hyperparameter optimization. The falkon.hopt module contains the implementation of several objective functions which can be minimized with respect to Falkon's hyperparameters (notably the penalty, the kernel parameters and the centers themselves).

For more details check out our paper: Efficient Hyperparameter Tuning for Large Scale Kernel Ridge Regression, and the automatic hyperparameter tuning notebook.

References

If you find this library useful for your work, please cite the following publications:

@inproceedings{falkonlibrary2020,
    title = {Kernel methods through the roof: handling billions of points efficiently},
    author = {Meanti, Giacomo and Carratino, Luigi and Rosasco, Lorenzo and Rudi, Alessandro},
    year = {2020},
    booktitle = {Advances in Neural Information Processing Systems 32}
}
@inproceedings{falkonhopt2022,
    title = {Efficient Hyperparameter Tuning for Large Scale Kernel Ridge Regression},
    author = {Meanti, Giacomo and Carratino, Luigi and De Vito, Ernesto and Rosasco, Lorenzo},
    year = {2022},
    booktitle = {Proceedings of The 25th International Conference on Artificial Intelligence and Statistics}
}