When docking scores stopped being enough
InstaDock had already earned a reputation for being fast, practical, and reasonably accurate. It could process compounds, score them, and make researchers feel like they were watching molecular matchmaking happen in real time. But there was one question that kept surfacing. “Great score, but will it ever work in a real system?” A compound that binds tightly yet fails on solubility, permeability, or toxicity is not a success story. It is a false start. That realization became the reason to build an ADMET prediction engine within InstaDock v2.
Before the model, there was the data mountain
Anyone who has done applied machine learning knows that model building is the easy part. The real work is data cleaning. Hours go into handling inconsistent entries, missing values, and duplicate molecules that somehow refuse to behave. For this project, I assembled data from public repositories such as TDCommons and DeepPK. Each source needed its own curation strategy. Once standardized and cross-validated, these datasets formed the backbone of the ADMET module.
Each endpoint told a different story. Some were well-behaved and balanced, others deeply biased. Toxicity endpoints were particularly challenging since positive samples were rare. Without careful handling, the model could have learned to label almost everything as non-toxic and still appear accurate. Balancing these datasets required time and restraint.
Teaching molecules to communicate
The architecture of choice was a Directed Message Passing Neural Network (DMPNN). Unlike descriptor-based approaches that treat molecules as fixed vectors, DMPNNs allow the network to learn directly from the chemical graph. It is a structure-driven way to make the model understand interactions that would be invisible to static fingerprints.
The training framework used PyTorch Lightning for structure, Chemprop as a base, and traditional models such as CatBoost and scikit-learn for selected properties. Hyperparameter tuning was managed by Optuna, which consumed most of the GPU hours and patience during this process.
Compressing a neural network into a desktop app
Running a heavy model in a Jupyter notebook is one thing. Running it inside a local application that must respond in seconds is another. Every step of inference was profiled and reduced until predictions felt instant. Quantization and efficient data flow were critical. The goal was simple: accurate predictions that appear before the user has time to think about waiting.
The ADMET module is distributed as a separate add-on rather than being bundled with the main application. This approach keeps InstaDock "lightweight" (LoL) and gives users control over whether they want to enable AI-based predictions. It also makes the system friendlier for machines that might struggle with large model files.
The publishing maze
Alongside development, I began documenting the full process for publication. The manuscript includes data preparation methods, architecture details, and integration design. The feedback so far has been encouraging, although finding the right home for applied computational work can be a long journey. Regardless of where it is eventually published, the module is already serving its purpose by assisting researchers in real workflows.
On a lighter note, training these models for days taught me more about heat management than I ever wanted to know. My workstation sounded like a turbine at full thrust, but at least the results were worth it. I’ve since developed a deep respect for thermal paste and, quite possibly, a mild case of Stockholm syndrome for my GPU fans.
P.S. I recently discovered that Stockholm syndrome isn’t actually recognized as a mental disorder. There’s barely any formal research on it beyond the 1973 bank robbery case in Stockholm that gave it its name. With a sample size of just four people, I still have no idea how it became a staple of pop psychology lore.