FFSVM stands for "Really Fast Support Vector Machine"
[![crates.io-badge]][crates.io-url] [![docs.rs-badge]][docs.rs-url] ![license-badge] [![rust-version-badge]][rust-version-url] [![rust-build-badge]][rust-build-url]
In One Sentence
You trained an SVM using libSVM, now you want the highest possible performance during (real-time) classification, like games or VR.
Highlights
- loads almost all libSVM types (C-SVC, ฮฝ-SVC, ฮต-SVR, ฮฝ-SVR) and kernels (linear, poly, RBF and sigmoid)
- produces practically same classification results as libSVM
- optimized for SIMD and can be mixed seamlessly with Rayon
- written in 100% safe Rust
- allocation-free during classification for dense SVMs
- 2.5x - 14x faster than libSVM for dense SVMs
- extremely low classification times for small models (e.g., 128 SV, 16 dense attributes, linear ~ 500ns)
- successfully used in Unity and VR projects (Windows & Android)
Usage
Train with libSVM (e.g., using the tool svm-train), then classify with ffsvm-rust.
From Rust:
// Replace SAMPLE_MODEL with a &str to your model.
let svm = DenseSVM::tryfrom(SAMPLEMODEL)?;
let mut fv = FeatureVector::from(&svm); let features = fv.features();
features[0] = 0.55838; features[1] = -0.157895; features[2] = 0.581292; features[3] = -0.221184;
svm.predict_value(&mut fv)?;
assert_eq!(fv.label(), Label::Class(42));
Status
- December 14, 2024: After 7+ years, finally ported to stable.๐๐๐
- March 10, 2023: Reactivated for latest Rust nightly.
- June 7, 2019: Gave up on 'no
unsafe', but gained runtime SIMD selection. - March 10, 2019: As soon as we can move away from nightly we'll go beta.
- Aug 5, 2018: Still in alpha, but finally on crates.io.
- May 27, 2018: We're in alpha. Successfully used internally on Windows, Mac, Android and Linux
- December 16, 2017: We're in pre-alpha. It will probably not even work on your machine.
Performance

All performance numbers reported for the DenseSVM. We also have support for SparseSVMs, which are slower for "mostly dense" models, and faster for "mostly sparse" models (and generally on the performance level of libSVM).
Tips
- Compile your project with
target-cpu=nativefor a massive speed boost (e.g., check our.cargo/config.tomlhow
- For an x-fold performance increase, create a number of
Problemstructures, and process them with Rayon'spariter.
FAQ
[crates.io-badge]: https://img.shields.io/crates/v/ffsvm.svg [crates.io-url]: https://crates.io/crates/ffsvm [license-badge]: https://img.shields.io/badge/license-MIT-blue.svg [docs.rs-badge]: https://docs.rs/ffsvm/badge.svg [docs.rs-url]: https://docs.rs/ffsvm/ [rust-version-badge]: https://img.shields.io/badge/rust-1.83%2B-blue.svg?maxAge=3600 [rust-version-url]: https://github.com/ralfbiedert/ffsvm [rust-build-badge]: https://github.com/ralfbiedert/ffsvm/actions/workflows/rust.yml/badge.svg [rust-build-url]: https://github.com/ralfbiedert/ffsvm/actions/workflows/rust.yml