-
Notifications
You must be signed in to change notification settings - Fork 41
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
v1.1.2 randomly changes its output without any valid cause #139
Comments
Hi @YuichiMotai, appreciate the work that you've done, and thanks for mentioning my issue. I'm curious to what "fixed, sorted data" means in:
If you could elaborate a bit on that, it would be helpful. Thanks. Also, after building Uni-Dock with your proposed fixes, I am still not able to get reproducible results. If i call Uni-Dock for the same 5 ligands within one --ligand_index folder, i get different results, but after i call it another time, i get the identical five (different) results. Have you found this in your experiments as well perhaps? Could you share the data and programs you used for fixing the issue? |
Hi @matija-marijan, sorry for the delay
Before we make changes to src, unidock gave slightly different standard output in the terminal. Feel free to let us know if you have any difficulty with our code. The following code is shared to @matija-marijan via a temporal GitHub repository. The repo. will be deleted after communication. python scripts
Modified unidock/src
Data
Directory Structure
How to run our code
|
Hi @YuichiMotai, thank you very much for reaching out to me and sending me your code. I have downloaded the scripts you have sent me, and I will test them out for myself to try and recreate the results you have. I will reply in this thread if I come across anything relevant or new. |
Hi again @YuichiMotai. Unfortunately, when I build your Uni-Dock fix, it doesn't make a difference when comparing it to my fix, guided by your instructions, from a couple of days ago. |
Bug description
Uni-Dock ver 1.1.2 has unstable behaviour, randomly changing its output without any valid cause. We made the following reproduction case. The behavior is similar to that with a missing synchronization in CUDA kernel.
Small reproduction case
We added a small non-affecting if-statement that never enters in one of the kernel functions, and observe an abnormal behaviour.
Preparation
We first modified the source code to produce exactly identical output with respect to identical data by:
f0 = 3.0
inbfgs_warp()
in wap_ops.cuh (3.0 would be arbitrary)#pragma omp parallel for
and#pragma omp critical
in main() in main.cppsort(ligand_names.begin(), ligand_names.end());
in main() between:std::cout << "Total ligands: " << ligand_names.size() << std::endl;
if (score_only) {
&& batch_size < MAX_BATCH_SIZE) {
at the end of while-loop betweenwhile (predict_peak_memory<Config>(batch_size, exhaustiveness, all_atom2_numbers,
batch_ligands.emplace_back(
MAX_BATCH_SIZE = 150
After these changes and with fixed seed, we confirmed that unidock generates identical results every time it's called on a fixed, sorted data.
BTW, this could be a solution of this issue (https://github.com/dptech-corp/Uni-Dock/issues/1330).
Small change
However, when we added a never-entering if statement in set() in common.cuh, after second call to local_to_lab(), calculating and writing updated atom coordinates to m_coords, we observe the generated results are no longer matching.
The added if statement is never supposed to be entered nor touch any data/variable, hence we expect no change in the output. There is no sign of the if condition entered as we can find no
in the output file thats is otherwise printed.
Environment and data
Additional Info.
If you have trouble reproducing events, would you mention me here. We could share data and programs with you.
Thank you.
The text was updated successfully, but these errors were encountered: