Tutorial

Predicting Protein-Ligand Binding Poses with DiffDock

Difficulty: Advanced Time: 20 min read

Introduction

Molecular docking is the process of predicting the preferred orientation of a small molecule (ligand) when bound to a protein target. Traditional physics-based docking engines like AutoDock Vina rely on search heuristics and empirical scoring functions, which can be slow and brittle. DiffDock is a state-of-the-art Generative AI model that treats docking as a generative modeling problem over the non-Euclidean manifold of ligand poses. By using a diffusion model, DiffDock achieves incredibly fast and accurate blind docking (without knowing the binding pocket in advance).

Architecture Overview


graph TD
    Protein(Protein 3D Structure .pdb) --> Rep1[Protein Graph Representation]
    Ligand(Ligand 2D SMILES) --> Rep2[Ligand Graph Representation]
    
    Rep1 --> ScoreMod
    Rep2 --> ScoreMod
    
    subgraph Score Model: Diffusion over SE-3 Manifold
        ScoreMod[Generates multiple candidate 3D poses]
    end
    
    ScoreMod --> ConfMod
    
    subgraph Confidence Model
        ConfMod[Ranks candidate poses]
    end
    
    ConfMod --> Top[Output: Top Ranked 3D Pose .sdf]
        

Prerequisites

  • Linux Environment
  • A GPU with at least 12GB VRAM
  • Conda installed
  • Basic understanding of PDB files and SMILES strings

Step 1: Environment Setup

DiffDock relies on PyTorch Geometric for graph neural networks and various cheminformatics libraries.

git clone https://github.com/gcorso/DiffDock.git
cd DiffDock

# Create and activate conda environment
conda env create -f environment.yml
conda activate diffdock

# Install specific versions of PyTorch Geometric dependencies
pip install torch-scatter torch-sparse torch-cluster torch-spline-conv -f https://data.pyg.org/whl/torch-1.12.1+cu113.html

Step 2: Preparing the Inputs

DiffDock requires two things for a prediction:

  1. The 3D structure of the protein target (usually a .pdb file).
  2. The 2D chemical structure of the ligand (usually a SMILES string or a .sdf file).

Create a CSV file named protein_ligand_inputs.csv to specify the pairs you want to dock. Because DiffDock is a blind docking engine, you do not need to provide a bounding box or pocket coordinates.

protein_path,ligand
data/target_protein.pdb,COc1cc(cc(c1)OC)c2cn[nH]c2

Step 3: Running the Diffusion Model

DiffDock operates in two stages:

  • Score Model: Generates candidate poses by reversing a diffusion process over the ligand's translation, rotation, and torsion angles.
  • Confidence Model: Evaluates all the generated poses and ranks them, providing a confidence score for the top prediction.

python -m inference \
    --protein_ligand_csv protein_ligand_inputs.csv \
    --out_dir results \
    --inference_steps 20 \
    --samples_per_complex 40 \
    --batch_size 10 \
    --actual_steps 18 \
    --no_final_step_noise

Step 4: Analyzing the Outputs

Once the inference script finishes, check the results/ directory. For each protein-ligand pair, you will find:

  • rank1_confidence[score].sdf: The top-ranked ligand pose in 3D space.
  • Several other ranked SDF files containing alternative predicted binding modes.

You can load both the original target_protein.pdb and the resulting rank1.sdf file into PyMOL or ChimeraX to visualize exactly how the AI predicts the drug will bind to the protein's surface or active site.

Troubleshooting: CUDA Out of Memory (OOM)

Because DiffDock models both the protein and the ligand as massive graphs, memory limits are frequently exceeded when docking against very large proteins (e.g. > 1500 residues). If you encounter a CUDA out of memory error:

  • Decrease Batch Size: Try lowering --batch_size from 10 to 1.
  • Reduce Samples: Lowering --samples_per_complex from 40 to 10 will save memory and speed up computation, though it may slightly reduce the chance of finding the true binding pose.

Conclusion

DiffDock represents a massive paradigm shift in computational chemistry. By framing docking as a generative diffusion process rather than a physics-based search algorithm, it allows researchers to perform highly accurate "blind docking" on novel protein structures (such as those generated by AlphaFold) in a fraction of the time.