Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sped up Eig Decomposition w/ cupy 40 min => 40 secs #42

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

Eugene29
Copy link

@Eugene29 Eugene29 commented Dec 2, 2023

Dear Authors,
Hi, I'm a student from UCSD, and as I try to extend on you guys' GPS architecture for one of my projects, I was able to shorten down the preprocess by ~60 times.

I have checked that the eigenvectors are approximately the same up to a sign flip and the np.sum difference between eigvalues are negligble. Furthermore, I was also able to reproduce one of the results (peptides-struc) w/ this sped up preprocess. Hope this helps!

One question though is that I noticed for the L_heat, that you guys are using normalization=None. Is this as intended?

experiments

checking eigvectors from np.eigh and cp.eigh(two lists in a contiguous manner) Screenshot 2023-12-02 112930

result reproduced
image

@migalkin
Copy link
Collaborator

migalkin commented Dec 4, 2023

Thanks for the experiment and reproduction, the speedups look impressive!

On the other hand, hardcoding cupy as the main linalg library would mean that the code can only run on a GPU without a chance to debug it on a CPU - this is a hard, breaking change of many existing pipelines so I am not sure the PR can be accepted in the existing state.

Instead, users should decide on their own whether they'd like to use it on the hardware they have. Perhaps there is a way to re-write those functions in the device-agnostic manner as suggested by cupy here in the docs?

@Eugene29
Copy link
Author

Sorry for the delay. I worked on the device-agnostic part. Now it can run either on GPU or CPU. By default, the preprocessing will be done in GPU, but it will be done in Numpy(CPU) if you do not have a GPU or if you wish to override the default behavior by passing prep_w_GPU False as configs.

prep_w_GPU False
image
Default:
image

@luis-mueller luis-mueller self-assigned this Jan 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants