Skip to content

Dynamic sketching to accelerate Canonical Polyadic Decomposition via multiplicative weight update-based rate selection

License

Notifications You must be signed in to change notification settings

kaggour/CPD-MWU

Repository files navigation

Welcome to CPD-MWU (Canonical Polyadic Decomposition-Multiplicate Weight Updates).

CPD-MWU is a distributed algorithm for performing canonical polyadic decomposition of large dense tensors by slicing the tensor along its largest mode and then operating on those slices in parallel.

CPD-MWU uses dynamic sketching to reduce the runtime of CPD, and for ill-conditioned tensors has the added benefit of reducing the relative decomposition error, as well.

This code has two dependencies to be aware of:

1) Numpy is used to represent tensors, matrices and for performing various operations on them. Your numpy instance may depend on another server-specific library such as BLAS or ATLAS, or both. Whatever you are using, you need to make sure that your numpy instance is using single-threaded instances of them. When the tensor slices get large enough ATLAS, for example, will automatically attempt to use multiple threads to perform matrix operations. This clashes with Spark, which limits the number of CPU's a single executor can use, and will cause the code to fail.

2) TensorLy is a nice package of Python routines for dealing with tensors.  I use one or two functions from this package, so you need to make sure it is installed and in your path.
	https://tensorly.github.io/

About

Dynamic sketching to accelerate Canonical Polyadic Decomposition via multiplicative weight update-based rate selection

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published