Right now skerch uses either torch.linalg.qr or scipy.linalg.qr to obtain the outer matrices for SVD/SEIGH.
These are in-core algorithms, and memory required to store outer matrices is the main bottleneck for said decompositions, and it can become the limiting factor when working on low-RAM systems.
Implementing an out-of-core QR, working on HDF5 arrays, would help with the lib versatility.
Furthermore, early termination by inspection of R (instead of throwing it away), would help reducing
4.1 mentions that little is gained by pivoting since measurements are iid
Algorithm 4.2 covers an early termination procedure by inspection of R, which could help reducing runtime of QR. In principle this does not reduce overall memory bottleneck since we do all measurements in a single-pass, and the QR happens at a later stage. Having block-wise measurements followed by online double Gram-Schmidt would fix this, but not sure it is worth the effort, since for large matrices, the maximal amount of measurements we can make is still generally insufficient to trigger early termination.
Right now skerch uses either
torch.linalg.qr
orscipy.linalg.qr
to obtain the outer matrices for SVD/SEIGH. These are in-core algorithms, and memory required to store outer matrices is the main bottleneck for said decompositions, and it can become the limiting factor when working on low-RAM systems.Implementing an out-of-core QR, working on HDF5 arrays, would help with the lib versatility. Furthermore, early termination by inspection of R (instead of throwing it away), would help reducing
Further notes from Halko et al 2011: https://arxiv.org/pdf/0909.4061