ThunderSVM: A Fast SVM Library on GPUs and CPUs
github.com
github.com
> An SVM model is a representation of the examples as points in space, mapped so that the examples of the separate categories are divided by a clear gap that is as wide as possible. New examples are then mapped into that same space and predicted to belong to a category based on which side of the gap they fall.
One advantage of SVM's is that they don't use all data points to decide on the separation plane, just the closest points to the gap (the support vectors), making it more invariant.
Another advantage is that they can efficiently perform a non linear classification using the kernel trick, implicitly mapping their inputs into high dimensional feature spaces (here kernel means a distance function between two data points).
https://en.wikipedia.org/wiki/Support_vector_machine
https://en.wikipedia.org/wiki/Positive-definite_kernel
I recommend Andrew Ng's ML course for learning about SVM's.
[1] https://blog.statsbot.co/support-vector-machines-tutorial-c1...
Please allow me to explain my reasoning:
I'm of those with no clue about the meaning of SVM, and I came to the comments section looking for an answer to the question "what the ... is SVM anyway?".
Even though I know the way to Google (https://duckduckgo.com, right?), I'm happy someone asked this question and another answered it and as a consequence saved me (and hopefully others) a couple of clicks and taught me something that I might have otherwise been too lazy to investigate myself.
Should I want to be picky, I'd even suggest that having the question answered in the comment section is environmentally more efficient than your suggestion that we should all open a new tab and do the same research.
Save a tree, answer the not-so-obvious questions "for the masses".
Scikit learn espouses a non-GPU approach. Perhaps the performance gains by using GPUs aren't that significant. Has anyone tried SVMs (or for that matter other non-DL classifiers) + GPUs?
LightGBM also has GPU support for learning decision trees.
Random forests are the opposite: branching on conditional tests is very expensive. It's been several years since I last wrote raw CUDA and OpenCL, but if memory serves, back then the docs essentially said that every if...else amounted to running both branches on all the data and then deciding what to keep, effectively halving performance. So a decision tree just a few levels deep would slow you down by an order of magnitude.
- Supported Operating Systems: Linux, Windows and MacOS
- CUDA 7.5 or above | cmake 2.8 or above | gcc 4.8 or above
s/GPU/nVIDIA/Is it just me or does anyone else get annoyed when a library claiming to run on GPUs uses proprietary CUDA, making it nvidia-only?
It would seem strange to claim that a library "runs on CPUs" but only supports Intel CPUs.
> It would seem strange to claim that a library "runs on CPUs" but only supports Intel CPUs.
Most things would "run on CPUs" but often not run on ARM CPUs.
The key distinction is that it runs on some GPUs rather than (just) some CPUs, so it seems reasonable that they say that.
If an open-source library chose to rely on a proprietary C compiler with special language features (e.g. the Borland C compiler) that targeted only Intel x86 CPUs, I would argue we would not generally claim this software "runs on CPUs". The software "runs on Intel x86 CPUs" seems more appropriate.
Similarly, especially in the machine learning field, it seems to be more and more common that "GPU" really means "CUDA-required GPU". In a world where AMD and Intel GPUs are also common (perhaps more common?), to me it makes sense to be up-front about this.
I'm not criticizing the authors' choice to use CUDA here. I'm just saying it would be nice if we stop pretending CUDA is synonymous with GPU programming, especially in cases where OpenCL would be a very appropriate choice (e.g. open-source software).
They could have been more precise but there's nothing wrong or particularly misleading about what they said, and what they said conveyed the most important aspect.
> would argue we would not generally claim this software "runs on CPUs"
"This software does not run on CPUs" sounds wrong for this scenario.