Repository navigation
1.0.4
Fold switching and induced fit modality improvements - You should see more accepted designs with both modalities. The RMSD and TM-score filters for both were loosened, however scoring is now performed only on confidently folded residues. This removes a previous case where the modalities could be satisfied with a flexible tail instead of real structural differences.
Antibody modality improvements - VHH, scFv and Fab should all accept more designs, and the designs they accept should bind through the CDRs rather than through the framework. Worth upgrading for if you design in any of these formats.
Modality ordering improvements - Unified behaviour when multiple modality flags are set. Previously, each modality would overwrite settings in order, so the last stated modality always wins. Now we have hand tuned the settings so that intent is preserved. For example settings --modality fold_switch,binder previously created an unpassable design constraint where the monomeric binder was not allowed to differ from the complex, even though losses promoting this behaviour were enabled.
Fold switching / Induced Fit changes
- fold switching and induced fit now draw 60 MPNN designs instead of 10 per successful trajectory (
sequence_candidates). Many MPNN mutations were found to collapse fold changes, so this improves overall throughput. weights_induced_fit_global- Changed toweights_fold_switchingto match the modality name.weights_interface_contacts- Default now 2.0 instead of 1.0 for fold switching and induced fit.min_induced_fit_interface_rmsd_final- Now defaults to 2.0 instead of 5.0max_induced_fit_tm_final- Now 0.85 instead of 0.6Induced_Fit_RMSD- Now a confidence maskedBinder_RMSDfor fold switching and induced fit, where it previously reported the same number asBinder_RMSD. This allows measurement of movement on confidently folded parts of the binder only.fold_switch_delta- New RMSD-based objective for fold switching, previously fold switching was driven by TM-score only.min_induced_fit_rmsd_final- Along withfold_switch_delta, this is a filter which checks whether designs reached the movement it asks for.- Nonsensical modality combinations are now refused - i.e peptide + large_binder used to resolve into a mix of weights optimized for different purposes and could be turned on with any binder length. This is now refused by BindCraft 2 as an input configuration. All weights can still be set manually through the settings file, so possible behaviour is not limited by this.
mutate_gate_draws- New setting - Optionally use multiple models to repredict mutated designs and combine scores.- MPNN - in fold switching designs, residues with large movements between states are kept fixed during redesign.
confidence_floor- New setting, only measure RMSD/TM on confidently folded parts of the binder. Default - 0.7. Applies to fold switching / induced fit modalities only.- known issue - a fold switching campaign naming several targets runs rather than being refused, but the mutate stage fixes a single target, so the objective stops applying for that stage. Use one target with fold switching.
Antibody scaffold changes (VHH, scFv, Fab)
- The paratope is now defined explicitly. Framework positions flanking the CDRs are marked
!inmutate_positions, which holds the residue unredesigned while still allowing it to contact the target. Previously these positions were simply absent frommutate_positions, so the scaffold could bind through framework that nothing was keeping track of. - A scaffold that names a paratope now flags everything outside it as a coldspot, so the target is pushed off the whole framework rather than off the few positions marked
*. This is read off the scaffold itself rather than set as a loss parameter. In a VHH campaign against IL7Ra the change took accepted designs from 2 in 200 trajectories to 11 in 122. - A framework face that should stay reachable is said so, with
-COLDSPOTon the span inmutate_positions. max_off_paratope_contact_final- The VHH example took 0.0 and now takes the 0.2 that the scaffold path already sets, as the other scaffold examples do. Over 280 scored candidates a 0.15 gate passes 217 where 0.0 passes 74, and the designs are better rather than only more numerous: mean i_pTM 0.534 against 0.511. The strongest interfaces sit between 0.05 and 0.15, so a VHH touching the target with a residue or two of flanking framework is making a better interface, not a worse one.
Memory management changes
- large designs are considerably faster. A complex too large to run whole is now split into the widest piece that fits, trying 256, 128 and then 64 residues, and only drops to the slower chunked attention path if none of them fit. The previous behaviour split every large complex into pieces of 4.
- low-memory attention fallback - When an out-of-memory error is detected when attempting to compile a model, it will fall back to a slower chunked attention path. This increases total possible design sizes without compromising speed for smaller designs.
- the memory check now counts what is already resident on the card, not only what the next step asks for, so a packed card is less likely to overcommit.
- the validation ensemble no longer carries the distogram between models, which lowers peak memory when candidates are refolded.
use_remat- New setting, default true, which is the previous behaviour. Activations are recomputed in the backward pass rather than held, which is what lets a large complex fit at all. Set it false to hold them and run faster where the memory is there to spare.- OOM errors in workers are now reported better and don't die silently.
- known issue - changing attention backends changes outcomes even when campaign seed and settings are identical.
- On WSL
XLA_PYTHON_CLIENT_ALLOCATORis set tocuda_async. The WSL allocator switch avoids JAX's BFC allocator over WDDM-managed memory. - nvidia-smi is no longer used to resolve visible GPUs, instead the CUDA driver is used (
CUDA_VISIBLE_DEVICES) - The XLA compile cache is now keyed to the card the campaign actually runs on. The per-card compile cache directory (
<project>/compile_cache/<card name>) is named after the GPU.
Running on clusters
- Several jobs, on one node or across nodes, can now work the same campaign folder at once. A trajectory is claimed by creating its folder, which only one worker can win, each writer gets its own partial file, and worker logs are named after the launching process so concurrent jobs keep separate logs.
- The compile lock is now held across nodes and releases itself if the job holding it dies.
- Campaign state is rebuilt from the result tables when
.campaign_state.jsoncannot be read, instead of the campaign refusing to resume. - Workers are pinned to their own CPUs, respecting the cgroup CPU quota the scheduler gave the job.
Other changes
- Cyclic peptides - New default lengths of
[7, 20] bigbangrenamed tolarge_complex, andbigbang_initializationtolarge_complex_initialization.initial_guessrenamed tohard_target.gpu_idsnow accepts a single integer as well as a list or comma separated string.- A
descriptionkey is now ignored anywhere in an input settings file, so settings can be annotated. - Example settings - Fourteen of the twenty-six now name their modality in their settings, so it does not need to be set again. The other twelve take the
binderdefault. - Example settings - Examples now have less overrides listed, since they were copies of the modality defaults anyway. You can see the settings each modality enables and how to adjust them in the documentation.
- design hashes - now include the attention backend.
Bug fixes
- Default modality changed to "binder" - was previously None, meaning no default settings. This mainly caused a bug where modality-less campaigns did not filter on monomer RMSD. Also campaigns which define no modality now inherit the following settings -
binder_lengths[60, 180],aa_bias {"C": 0}(no cysteines),min_monomer_plddt_final0.7,Binder_RMSDfilter at 3.5 Å. All settings can still be changed manually in settings file and will overrule these defaults. - Overwriting any parameter in the settings file which was part of a parameter block overwrote the entire block, causing some default settings to be lost.
- Scaffolded campaigns running more than one worker per card could lose a worker partway through, which cost that worker's trajectories and a share of the throughput. XLA GEMM autotuning was being switched off to shorten startup, and with it off cuDNN failed to load its cached attention graph. Autotuning is left at its default again. Setting
XLA_FLAGS=--xla_gpu_autotune_level=0yourself still shortens a worker's startup by about a fifth, and is safe on a single-worker or de novo campaign. - A scaffold span marked
!was rebuilt from scratch instead of keeping the residues the scaffold has. - A settings file that will not parse now names the file in the error.
- Some versions of nvidia-smi were not read properly for GPU detection - fixed. A card that reports no memory figure at all, as unified-memory boards and MIG instances do, no longer ends the campaign.
- If a GPU worker died it was not well reported previously - We have improved the behaviour in these cases
- Some failed filters were not being reported in the log. This has been fixed.
- The BindCraft 2 stamp written into output files was read from the installed package rather than the code that produced them, so a source checkout could stamp outputs with an older version. It now reads the running version, and reads v1.0.4.