A blazing-fast, Rust-accelerated machine learning library for Python — drop-in compatible with scikit-learn.
Thermite: an exothermic reaction that burns at 2500°C. Your ML training should be just as fast.
scikit-learn is the most widely-used ML library in the world (40M+ monthly downloads), but its internals are built on NumPy/SciPy/Cython — fast for 2010, but bottlenecked by 2026 standards.
Thermite rewrites the compute-heavy core natively in Rust using Rayon multithreading and matrixmultiply optimizations. We expose the exact same Python API you already know.
No new syntax. No migration guide. Just import thermite instead of import sklearn.
- Polars Integration: Feed
polarsDataFrames into Thermite's Rust core (converts viadf.to_numpy()thennp.ascontiguousarray). - GPU Acceleration (wgpu): WebGPU hardware acceleration backend
thermite-gpu. Dispatch compute shaders for massive ensemble aggregations and matrix multiplications instantly by simply addingdevice='gpu'. - True Parallelism (No GIL): Unlike Scikit-Learn which relies on heavy multiprocess pickling via
joblib, Thermite releases the Python GIL during heavy computation.GridSearchCVandRandomizedSearchCVeffortlessly scale across all your cores. - Native Categorical & Sparse Support: Decision Trees handle categorical features natively (bypassing One-Hot Encoding overhead).
LinearRegressionandKMeansnatively ingest and optimizescipy.sparsematrices. - Enterprise Capabilities Built-in: Includes
save_checkpointfor distributed resumable training andgenerate_model_card=Truefor automated documentation and audit generation. - Drop-In Compatibility Trap: If you import a function that Thermite hasn't natively ported yet, it will automatically fall back and import it from
sklearnseamlessly.
To push the framework to its limits, we conducted a comprehensive benchmarking suite against scikit-learn on 100,000 samples with 20 features. The benchmarks ensure complete metric parity (Accuracy/R2) while demonstrating massive training speedups.
| Model | SK Train (s) | TH Train (s) | Train Speedup |
|---|---|---|---|
| LinearRegression | 0.015 | 0.003 | 4.65x |
| LogisticRegression | 0.012 | 0.008 | 1.63x |
| RandomForestClassifier | 7.532 | 2.368 | 3.18x |
| GradientBoostingRegressor | 28.437 | 11.798 | 2.41x |
| KMeans | 0.017 | 0.007 | 2.41x |
| MiniBatchKMeans | 0.013 | 0.005 | 2.64x |
Note: HistGradientBoosting matches the speed per tree of Cython-optimized Scikit-learn (Thermite forces 100 full trees, taking 0.75s, ~7.5ms per iteration). Test environment: M2 Apple Silicon.
pip install thermite-ml# The API is 100% identical to scikit-learn
from thermite.ensemble import RandomForestClassifier
from thermite.model_selection import train_test_split
from thermite.preprocessing import StandardScaler
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# Opt-in to Hardware Acceleration with `device='gpu'`
# Automatically generate a markdown Model Card for audits
clf = RandomForestClassifier(n_estimators=100, n_jobs=-1, device='gpu')
clf.fit(X_train, y_train, generate_model_card=True)
print(f"Accuracy: {clf.score(X_test, y_test):.4f}")
# Save state directly to disk without pickling overhead
clf.save_checkpoint("model_checkpoint.bin")Traditional scikit-learn forces you to convert polars DataFrames to pandas or numpy, triggering a memory copy. Thermite accepts Polars DataFrames and converts them internally via df.to_numpy() then np.ascontiguousarray() — a single copy that's transparent to the user.
import polars as pl
from thermite.linear_model import LogisticRegression
from thermite.polars_compat import make_polars_pipeline
df = pl.read_csv("100GB_dataset.csv")
# Train directly on the Polars DataFrame (converted internally)
model = make_polars_pipeline(LogisticRegression())
model.fit(df.select(pl.exclude("target")), df["target"])Status: Active development (v0.2.0). 342/342 tests passing. See STATUS.md for details. See ROADMAP.md for the strategic plan.
Thermite's goal is not to clone sklearn — it's to win on specific axes where Rust provides a structural advantage:
| Advantage | Why It Beats sklearn |
|---|---|
| Sparse data | 10-18x faster on sparse LogisticRegression — sprs + ndarray beats scipy + Cython |
| Polars integration | sklearn requires pandas → numpy copy; Thermite converts via df.to_numpy() internally — same single copy, transparent to user |
| True parallelism | Rayon in Rust vs joblib process-spawn; no GIL, no pickling overhead |
| Cross-platform GPU | wgpu (Metal/Vulkan/DX12) without CUDA dependency |
| WASM deployment | Planned: compile trained models to run in-browser |
| bincode serialization | Cross-version safe, faster than pickle, no security issues |
See ROADMAP.md for the full four-phase plan.
Legend: [OK] Real | [PARTIAL] Partial/limited | [STUB] Stub (needs work) | [MISSING] Missing
| Category | Algorithms | Status |
|---|---|---|
| Linear Models | LinearRegression, Ridge, Lasso, LogisticRegression, SGDClassifier, SGDRegressor |
[OK] Real |
| Trees | DecisionTreeClassifier, DecisionTreeRegressor |
[OK] Real |
| Ensembles | RandomForest*, GradientBoosting* — real. HistGradientBoosting* — [PARTIAL] partial (binned GBM, no histogram splits). IsolationForest — [STUB] stub (always inliers) |
[PARTIAL] Mixed |
| SVM | SVC (libsvm FFI, RBF/Poly kernels) |
[OK] Real |
| Clustering | KMeans, MiniBatchKMeans, DBSCAN — [OK] real. SpectralClustering, AffinityPropagation — [STUB] stubs |
[PARTIAL] Mixed |
| Decomposition | PCA, TruncatedSVD |
[OK] Real |
| Neighbors | KNeighbors* — [OK] real (uses brute force). LocalOutlierFactor — [STUB] stub (always inliers). KDTree built but not queried |
[PARTIAL] Mixed |
| Naive Bayes | GaussianNB |
[OK] Real |
| Neural Network | MLPClassifier (Adam optimizer, binary classification) |
[PARTIAL] Partial |
| Preprocessing | StandardScaler, MinMaxScaler, LabelEncoder, OneHotEncoder — [OK] real. RobustScaler, QuantileTransformer, Normalizer — [MISSING] missing |
[OK] Partial |
| Metrics | accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, log_loss, mse, r2_score, mape, pairwise_distances |
[OK] Real |
| Text | CountVectorizer, TfidfVectorizer, Word2Vec |
[OK] Real |
| Impute | IterativeImputer |
[OK] Real |
| Feature Selection | RFE, SequentialFeatureSelector |
[PARTIAL] Partial |
| Model Selection | train_test_split, KFold, StratifiedKFold, TimeSeriesSplit, GroupKFold — [OK] real. GridSearchCV, cross_val_score — in Python only |
[PARTIAL] Partial |
| Hyperband | SuccessiveHalvingSearchCV |
[PARTIAL] Partial |
| Causal | TLearner |
[OK] Real |
| Federated | ParameterServer |
[OK] Real |
| AutoML | BayesianOptimizer |
[PARTIAL] Partial |
| Time Series | AutoRegressive |
[PARTIAL] Partial |
| Manifold | TSNE (O(n²), no Barnes-Hut), Isomap, LLE, UMAP (basic) |
[PARTIAL] Partial |
| Mixture | GaussianMixture (EM algorithm) |
[OK] Real |
| Survival | SurvivalForest (log-rank split, Nelson-Aalen) |
[OK] Real |
| Cross Decomposition | PLSRegression, CCA (NIPALS, power-iteration) |
[OK] Real |
| Graph | Node2Vec (2nd-order walks, Skip-gram) |
[OK] Real |
| Recommender | ALS (alternating least squares) |
[OK] Real |
pip install thermite-ml- Rust-Native & Zero-Copy: While similar projects like
Intel(R) Extension for Scikit-learntry to accelerate operations by monkey-patching Cython with daal4py, Thermite is rewritten ground-up in Rust. We achieve zero-copy data transmission for Deep Learning frameworks (PyTorch/JAX viaDLPack). Polars DataFrames are accepted and converted viato_numpy(). - GPU Native without Heavy Dependencies: Unlike
RAPIDS cuMLwhich requires a massive CUDA toolkit installation and strict version matching, Thermite utilizeswgputo compile compute shaders on-the-fly, allowing it to seamlessly run GPU-accelerated code across Apple Metal, Vulkan, and DirectX 12 hardware without gigabytes of CUDA bloat. - Distributed Computing Preparedness: Thermite's Rust estimators derive
Serdeenabling high-speedbincodeserialization out-of-the-box. This natively plugs into distributed execution engines likeRayandDaskwithout the heavy overhead of Python's standardpickle. - Federated Learning Ready: Utilize the built-in
ParameterServerclass to securely aggregate model gradients (like SGD) from distributed client nodes. - Rust AutoML: Instead of looping cross-validation in Python, Thermite provides a fast native
BayesianOptimizer. - Advanced Data Imputation:
IterativeImputerhandles missing values dynamically via Ridge regression.