The AutoDock-GPU Suite is a growing collection of methods for computational docking and virtual screening, for use in structure-based drug discovery and exploration of the basic mechanisms of biomolecular structure and function. More info on AutoDock-GPU be located at https://ccsb.scripps.edu/autodock/ and official github page
See here for a document describing prerequisites and setup steps for all HPC containers and instructions for pulling NGC containers.
Before running the NGC AutoDock-GPU container please ensure your system meets the following requirements.
autodock_gpu_128wi
: primary autodock executable
An example command is:
autodock_gpu_128wi -ffile protein.maps.fld -lfile rand-example.pdbqt -nrun 100 -lsmet ad -resnam CUDAout
The following examples demonstrate how to run the NGC AutoDock-GPU container under the supported runtimes.
Once authenticated the following modes of running are supported:
In order to run the water benchmark: download and permission, the dataset from the AD-GPU_set_of_42.
Copy and paste the following script, called check.py
into your working directory.
#!/usr/bin/env python3
import csv
import glob
import os
import re
import subprocess
import sys
def run_all(executable):
dirlist = glob.glob("data/*")
for d in dirlist:
os.chdir(d)
# There's potentially 3 runs to do here, doing 1 to save time.
for i in range(1):
subprocess.run("{} -ffile protein.maps.fld -lfile rand-{}.pdbqt -nrun 100 -lsmet ad -heuristics 1 -autostop 1 -maxnev 8000000 -resnam CUDAout-{}".format(executable, i, i), shell=True).check_returncode()
os.chdir("../..")
def process_file(filename):
re_ligandname = re.compile(r'^Ligand name: (.+)')
re_intermolecular = re.compile(r'^(?=.*\bIntermolecular\b).*=(.*)')
re_internal = re.compile(r'^(?=.*\bInternal\b).*=(.*)')
ligand = ''
curr_energy = sys.float_info.max
best_energy = sys.float_info.max
with open(filename) as f:
for line in f:
match = re_ligandname.search(line)
if match:
ligand = match.group(0).split()[2]
continue
match = re_intermolecular.search(line)
if match:
curr_energy = float(match.group(1).split()[0])
continue
match = re_internal.search(line)
if match:
curr_energy = curr_energy + float(match.group(1).split()[0])
if (curr_energy < best_energy):
best_energy = curr_energy
continue
return best_energy
def check_output(reference_energies):
results = {}
err = 0.0
cnt = 0
for key, val in reference_energies.items():
for dlgfile in glob.glob('data/*/CUDAout-*.dlg'):
best_energy = process_file(dlgfile)
diff = val - best_energy
err = err + diff
cnt = cnt + 1
try:
results[key].append(diff)
except KeyError:
results[key] = [diff]
return (err/cnt)
reference_energies = {}
with open('ligand_properties.csv') as f:
reader = csv.reader(f)
cnt = 0
for row in reader:
cnt = cnt + 1
if cnt == 1:
continue
# There are some bad ligands for which we have no reference energy
if row[4] == '':
continue
reference_energies[row[1]] = float(row[4])
for numwi in [128]:
run_all("autodock_gpu_{}wi".format(numwi))
meandiff = check_output(reference_energies)
print('{} : Mean Error: {:.3f}'.format(numwi, meandiff))
if meandiff > 0.5:
exit(1)
print("Checks passed.")
$ git clone https://github.com/diogomart/AD-GPU_set_of_42.git
$ gunzip AD-GPU_set_of_42/data/*/*map.gz
$ docker run -ti --gpus all -v :workdir --workdir /workdir nvcr.io/hpc/autodock:2020.06 sh -c "./check.py"
Example of successful AutoDock-GPU output:
AutoDock-GPU version: 09773678fc7e39677061d765b767f4bae8930fb7-dirty
CUDA Setup time 2.031275s
(Thread 0 is setting up Job 0)
Running Job #0:
Using heuristics: -lsmet sw -nev 7468504
Local-search chosen method is: swSolis-Wets (sw)
Rest of Setup time 0.037800s
Executing docking runs, stopping automatically after either reaching 0.15 kcal/mol standard deviation of
the best molecules of the last 4 * 5 generations, 27000 generations, or 7468504 evaluations:
Generations | Evaluations | Threshold | Average energy of best 10% | Samples | Best energy
------------+--------------+------------------+------------------------------+---------+-------------------
0 | 150 | -2.91 kcal/mol | -4.10 +/- 0.40 kcal/mol | 5 | -4.82 kcal/mol
5 | 125155 | -2.91 kcal/mol | -5.70 +/- 1.40 kcal/mol | 8066 | -11.91 kcal/mol
10 | 250790 | -5.69 kcal/mol | -9.55 +/- 0.83 kcal/mol | 490 | -12.35 kcal/mol
15 | 377698 | -9.53 kcal/mol | -11.80 +/- 0.42 kcal/mol | 52 | -12.62 kcal/mol
20 | 505556 | -11.68 kcal/mol | -12.42 +/- 0.18 kcal/mol | 14 | -12.67 kcal/mol
25 | 633659 | -12.23 kcal/mol | -12.48 +/- 0.19 kcal/mol | 16 | -12.74 kcal/mol
30 | 762773 | -12.30 kcal/mol | -12.59 +/- 0.14 kcal/mol | 16 | -12.83 kcal/mol
35 | 892173 | -12.46 kcal/mol | -12.73 +/- 0.15 kcal/mol | 14 | -13.02 kcal/mol
40 | 1021489 | -12.57 kcal/mol | -12.81 +/- 0.13 kcal/mol | 14 | -13.05 kcal/mol
45 | 1151059 | -12.68 kcal/mol | -12.83 +/- 0.11 kcal/mol | 19 | -13.06 kcal/mol
50 | 1280984 | -12.74 kcal/mol | -12.84 +/- 0.10 kcal/mol | 13 | -13.07 kcal/mol
Docking time 3.916151s
------------+--------------+------------------+------------------------------+---------+-------------------
Finished evaluation after reaching
-12.80 +/- 0.13 kcal/mol combined.
60 samples, best energy -13.07 kcal/mol.
Shutdown time 0.000570s
Job #0 took 3.955 sec after waiting 3.373 sec for setup
(Thread 0 is processing Job 0)
Run time of entire job set (1 files): 8.413 sec
Savings from multithreading: -2.039 sec
Idle time of execution thread: 4.458 sec
All jobs ran without errors.
The following command will launch an interactive shell in the AutoDock-GPU
container using docker
mounting $HOME/data
from the underlying
system as /data
in the container:
$ docker run -it --rm --gpus all -v $HOME/data:/data --workdir /data nvcr.io/hpc/autodock:2020.06
Where:
-it
: start the container with an interactive terminal (short for --interactive --tty)--rm
: make container ephemeral (removes container on exit)-v $(pwd):/host_pwd
: bind mount the current working directory into the container as /host_pwd
--gpus all
: vanilla docker GPU provisioning--workdir /data
: sets working directory inside the containerThis should produce a root prompt within the container:
root@3a8c8b7c3a88:/data#
Save the NGC AutoDock-GPU container as a local Singularity image file:
$ singularity build autodock.simg docker://nvcr.io/hpc/autodock:2020.06
The AutoDock-GPU Singularity image is now saved in the current directory as autodock.simg
In order to pull NGC images with singularity
version 2.x and earlier, NGC container registry authentication credentials are required.
To set your NGC container registry authentication credentials:
$ export SINGULARITY_DOCKER_USERNAME='$oauthtoken'
$ export SINGULARITY_DOCKER_PASSWORD=
More information describing how to obtain and use your NVIDIA NGC Cloud Services API key can be found here.
There is currently a bug in Singularity 3.1.x and 3.2.x causing the LD_LIBRARY_PATH
to be incorrectly set within the container environment.
As a workaround The LD_LIBRARY_PATH
must be unset before invoking Singularity:
$ LD_LIBRARY_PATH="" singularity exec ...
In order to run a test benchmark: download, permission, and run the example script from the NGC Examples Repository.
wget ...
chmod +x check.py
singularity run --nv -B ${PWD}:/host_pwd --pwd /host_pwd ./check.py
Example of successful AutoDock-GPU output:
AutoDock-GPU version: 09773678fc7e39677061d765b767f4bae8930fb7-dirty
CUDA Setup time 2.031275s
(Thread 0 is setting up Job 0)
Warning: unknown argument '-maxnev'.
Running Job #0:
Using heuristics: -lsmet sw -nev 7468504
Local-search chosen method is: swSolis-Wets (sw)
Rest of Setup time 0.037800s
Executing docking runs, stopping automatically after either reaching 0.15 kcal/mol standard deviation of
the best molecules of the last 4 * 5 generations, 27000 generations, or 7468504 evaluations:
Generations | Evaluations | Threshold | Average energy of best 10% | Samples | Best energy
------------+--------------+------------------+------------------------------+---------+-------------------
0 | 150 | -2.91 kcal/mol | -4.10 +/- 0.40 kcal/mol | 5 | -4.82 kcal/mol
5 | 125155 | -2.91 kcal/mol | -5.70 +/- 1.40 kcal/mol | 8066 | -11.91 kcal/mol
10 | 250790 | -5.69 kcal/mol | -9.55 +/- 0.83 kcal/mol | 490 | -12.35 kcal/mol
15 | 377698 | -9.53 kcal/mol | -11.80 +/- 0.42 kcal/mol | 52 | -12.62 kcal/mol
20 | 505556 | -11.68 kcal/mol | -12.42 +/- 0.18 kcal/mol | 14 | -12.67 kcal/mol
25 | 633659 | -12.23 kcal/mol | -12.48 +/- 0.19 kcal/mol | 16 | -12.74 kcal/mol
30 | 762773 | -12.30 kcal/mol | -12.59 +/- 0.14 kcal/mol | 16 | -12.83 kcal/mol
35 | 892173 | -12.46 kcal/mol | -12.73 +/- 0.15 kcal/mol | 14 | -13.02 kcal/mol
40 | 1021489 | -12.57 kcal/mol | -12.81 +/- 0.13 kcal/mol | 14 | -13.05 kcal/mol
45 | 1151059 | -12.68 kcal/mol | -12.83 +/- 0.11 kcal/mol | 19 | -13.06 kcal/mol
50 | 1280984 | -12.74 kcal/mol | -12.84 +/- 0.10 kcal/mol | 13 | -13.07 kcal/mol
Docking time 3.916151s
------------+--------------+------------------+------------------------------+---------+-------------------
Finished evaluation after reaching
-12.80 +/- 0.13 kcal/mol combined.
60 samples, best energy -13.07 kcal/mol.
Shutdown time 0.000570s
Job #0 took 3.955 sec after waiting 3.373 sec for setup
(Thread 0 is processing Job 0)
Run time of entire job set (1 files): 8.413 sec
Savings from multithreading: -2.039 sec
Idle time of execution thread: 4.458 sec
All jobs ran without errors.
The following command will launch an interactive shell in the AutoDock-GPU
container using singularity shell
:
$ singularity shell --nv -B
Where:
--nv
: expose the host GPU(s) to the container-B
: bind user-defined directory into the containerThis should produce a Singularity shell prompt within the container:
Singularity: Invoking an interactive shell within container...
Singularity Autodock.simg:~/example>
Autodock main page Autodock wiki Autodock officional github page