Skip to content

Commit

Permalink
Update 'Is there GPU or multicore-CPU support?' FAQ
Browse files Browse the repository at this point in the history
  • Loading branch information
tomwhite committed Oct 2, 2019
1 parent 84b9d90 commit f9ff549
Showing 1 changed file with 10 additions and 17 deletions.
27 changes: 10 additions & 17 deletions doc/faq.rst
Original file line number Diff line number Diff line change
Expand Up @@ -95,27 +95,20 @@ issues.
Is there GPU or multicore-CPU support?
--------------------------------------

Not at this time. The bottlenecks in the code are the
(approximate) nearest neighbor search and the optimization
of the low dimensional representation. The first of these
(ANN) is performed by a random projection forest and
nearest-neighbor-descent. Both of those are, at the least,
parellelisable in principle, and could be converted to
support multicore (at the cost of single core performance).
The optimization is performed via a (slightly custom)
stochastic gradient descent. SGD is both parallelisable
and amenable to GPUs. This means that in principle UMAP
could support multicore and use GPUs for optimization.
In practice this would involve GPU expertise and would
potentially hurt single core performance, and so has
been deferred for now. If you have expertise in GPU
programming with Numba and would be interested in
adding GPU support we would welcome your contributions.

There is a UMAP implementation for GPU available in
the NVIDIA RAPIDS cuML library, so if you need GPU
support that is currently the best place to go.

For multicore CPU, the two main bottlenecks in the code are the
(approximate) nearest neighbor search and the optimization of the low
dimensional representation. The first of these has a multicore implementation
in the pynndescent library, which is used by UMAP if it is installed.
Otherwise UMAP uses its own version of nearest neighbor search, which is not
multicore. The second bottleneck, the optimization of the low dimensional
representation is performed via a (slightly custom) stochastic gradient
descent. SGD in UMAP can take advantage of multicore, but only if
`random_state` is set to `None` (as explained in the next question).

Is the output of UMAP reproducible?
-----------------------------------

Expand Down

0 comments on commit f9ff549

Please sign in to comment.