scikit-learn/scikit-learn
Nearest neighbors with trees perf decreased by debugging stats
Chiusa
#13.330 aperta il 28 feb 2019
Needs BenchmarksPerformancehelp wantedmodule:neighbors
Metriche repository
- Star
- (66.084 stelle)
- Metriche merge PR
- (Merge medio 10g) (90 PR mergiate in 30 g)
Descrizione
Description
For ball_tree and kd_tree algorithms, some stats about the tree queries highly decrease the parallelization performances increase.
Those stats are:
n_trims: queried points outside node radiusn_leaves: leaves reached while queryingn_splits: non-leaves queried nodesn_calls: num of computed distances
Those stats only seem useful for debugging, do not look like part of the official API (no documentation) and only 2 (personal) git repos use the method (get_tree_stats) to get them.
Deactivating them highly improves performances of associated algorithms.
Benchmark
Test of kneighbors function with default parameters and:
- samples dimension: 100
- fit: 10k samples
- kneighbors: 10k samples
(also tested openMP prange parallism but it does not improve perf)
=============
=== brute ===
=============
Joblib (loky) :
- n_jobs = 1 (MKL mono threaded) -> 2.6s
- n_jobs = 1 (MKL multi threaded, 40 threads) -> 1.9s
- n_jobs = 4 -> 4.0s
- n_jobs = 10 -> 3.5s
- n_jobs = 40 -> 3.5s
=================
=== ball_tree ===
=================
Joblib (loky) :
- n_jobs = 1 -> 10.9s
- n_jobs = 4 -> 7.7s
- n_jobs = 10 -> 6.8s
- n_jobs = 40 -> 3.8s
Joblib (loky) no stats:
- n_jobs = 1 -> 12.0s
- n_jobs = 4 -> 3.2s
- n_jobs = 10 -> 1.4s
- n_jobs = 40 -> 0.6s
OpenMP no stats:
- n_jobs = 4 -> 3.2s
- n_jobs = 10 -> 1.4s
===============
=== kd_tree ===
===============
Joblib (loky) :
- n_jobs = 1 -> 19.1s
- n_jobs = 4 -> 9.0s
- n_jobs = 10 -> 10.9s
- n_jobs = 40 -> 8.5s
Joblib (loky) no stats:
- n_jobs = 1 -> 19.0s
- n_jobs = 4 -> 5.1s
- n_jobs = 10 -> 2.2s
- n_jobs = 40 -> 1.0s
OpenMP no stats:
- n_jobs = 4 -> 5.1s
- n_jobs = 10 -> 2.2s