All workflows

Drug discovery

Boltz-2 Virtual Screening

Predict the binding structure and the affinity of every protein-ligand pair with Boltz-2, then rank the best candidates. The GPU stage runs remotely; the prep and ranking stages stay local.

Boltz-2CUDADockerSSH

What this workflow does

This workflow takes a target protein and a library of candidate ligands. For each protein-ligand pair, Boltz-2 predicts the binding structure and the binding affinity. The workflow then returns a ranked shortlist of the best candidates.

Boltz-2 predicts affinity at a small fraction of the cost of classical free-energy perturbation. This makes large virtual screens practical. You can screen thousands of ligands in the time that a free-energy method needs for a few.

The compute problem

A virtual screen is not one job. It is three jobs with different hardware needs.

The prep stage reads a FASTA file and a SMILES file. It writes the Boltz-2 input set. This stage needs a CPU and a few seconds.

The predict stage runs the Boltz-2 model. This stage needs a GPU with a large memory. It is the only expensive stage.

The rank stage parses the affinity and confidence scores. It writes a CSV file. This stage needs a CPU and a few seconds.

Most tools force you to run all three stages on the same machine. You then pay for GPU time while the CPU stages run. You also copy files between machines by hand.

How Horus solves it

Horus assigns a compute target to each stage. The prep and rank stages run on your local CPU. The predict stage runs on a remote GPU box over SSH, inside a container.

Horus moves the data across each boundary for you. The LocalToSSH transfer sends the input archive to the GPU box. The SSHToLocal transfer brings the predictions back. You do not write any copy commands.

To move the GPU stage to a different machine, change one field in the YAML file. The command definition does not change. The same workflow runs on a laptop, on a remote GPU box, or on an HPC scheduler.

Pipeline

prep (local, CPU)          target.fasta + ligands.smi ──► boltz_inputs.tar.gz
   │   LocalToSSH transfer (automatic)
predict (SSH GPU box)      boltz predict (container)   ──► predictions.tar.gz
   │   SSHToLocal transfer (automatic)
rank (local, CPU)          parse affinity + confidence ──► top_hits.csv

Inputs and outputs

Inputs

  • target.fasta: the protein target. The workflow uses the first record.
  • ligands.smi: one SMILES [name] per line. The name field becomes the identifier in the ranked output.

Outputs land in out_dir/:

  • boltz_inputs.tar.gz: the generated Boltz-2 input set.
  • predictions.tar.gz: the raw model output.
  • top_hits.csv: the ranked candidates, best first.

Run the workflow

Install the horus-runtime and the plugins one time:

uv sync

If you do not have uv, install it first:

curl -LsSf https://astral.sh/uv/install.sh | sh

You can also install the packages with pip:

pip install horus-runtime horus-environments

Then run the workflow:

uv run horus run workflow.yaml

References

Run this workflow

The workflow is open source. Clone the pantheon repository and run it with the horus-runtime engine. To run it on managed compute without a cluster of your own, join the Temple Compute OS waitlist.