Updates and Changelog¶
This section documents the major updates and changes made to the Implicit Solvent DDM package across different versions.
Version 1.1.1 - GPU Acceleration Support¶
Release Date: October 2025 Status: Latest Development Release
Major Features¶
GPU Acceleration Support¶
The package now includes comprehensive GPU acceleration support for molecular dynamics simulations using CUDA-enabled AMBER executables.
Key Features:
- Automatic GPU Detection: The system automatically detects available GPUs when CUDA: True is set
- Flexible GPU Allocation: Support for specifying the number of GPUs per simulation
- CUDA-Aware Job Scheduling: Intelligent job distribution across available GPU resources
- Fallback Support: Graceful fallback to CPU execution when GPUs are unavailable
Supported GPU Executables:
- pmemd.cuda - GPU-accelerated PMEMD engine
- Custom CUDA-enabled AMBER executables
Configuration Changes¶
New Configuration Parameters¶
The following new parameters have been added to the configuration system:
System Settings:
- CUDA (bool): Enable/disable GPU acceleration (default: False)
- num_accelerators (int): Number of GPUs to request (default: 0 - auto-detect)
Example Configuration:
system_parameters:
executable: "pmemd.cuda" # GPU-enabled executable
mpi_command: "srun" # or "mpirun"/"mpiexec"
CUDA: True # Enable GPU acceleration
num_accelerators: 2 # Number of GPUs (0 = auto-detect)
output_directory_name: "gpu_simulation"
Complete CUDA Configuration Example:
# CUDA-enabled configuration example
system_parameters:
executable: "pmemd.cuda"
mpi_command: "srun"
CUDA: True
num_accelerators: 2 # Use 2 GPUs
memory: "10G" # Increased memory for GPU jobs
disk: "20G" # Increased disk space
output_directory_name: "cuda_ddm_run"
endstate_parameter_files:
complex_parameter_filename: "path/to/complex.parm7"
complex_coordinate_filename: "path/to/complex.rst7"
number_of_cores_per_system:
complex_ncores: 8 # CPU cores for complex simulation
ligand_ncores: 4 # CPU cores for ligand simulation
receptor_ncores: 4 # CPU cores for receptor simulation
AMBER_masks:
receptor_mask: ":RECEPTOR"
ligand_mask: ":LIGAND"
workflow:
endstate_method: "basic_md"
endstate_arguments:
md_template_mdin: "path/to/template.mdin"
intermediate_states_arguments:
mdin_intermediate_file: "path/to/intermediate.mdin"
igb_solvent: 2
temperature: 300
exponent_conformational_forces: [-8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
exponent_orientational_forces: [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]
restraint_type: 2
Implementation Details¶
SystemSettings Class Updates:
- Added CUDA boolean field with automatic GPU detection
- Added num_accelerators field with intelligent defaults
- Enhanced __post_init__ method for GPU environment validation
Simulation Class Enhancements: - Updated command-line argument generation for CUDA executables - Enhanced GPU-aware job scheduling logic - Improved environment variable handling for CUDA_VISIBLE_DEVICES
Runner Class Improvements: - Added GPU job batching and resource management - Implemented intelligent GPU allocation across simulation batches - Enhanced error handling for GPU resource conflicts
Key Code Changes:
In config.py:
@dataclass
class SystemSettings:
CUDA: bool = field(default=False)
num_accelerators: int = field(default=0)
def __post_init__(self):
if self.CUDA and self.num_accelerators == 0:
try:
from numba import cuda
self.num_accelerators = len(cuda.gpus)
except ImportError:
raise RuntimeError("CUDA requested but 'cuda' module not available.")
In simulations.py:
def setup(self):
if self.CUDA and self.system_type in ["complex", "receptor"]:
self.exec_list.append(self.executable)
# ... rest of setup logic
Performance Improvements¶
GPU Acceleration: Significant speedup for large system simulations
Resource Optimization: Better utilization of available computational resources
Memory Management: Enhanced memory handling for GPU-accelerated simulations
Job Scheduling: Improved parallel execution with GPU-aware scheduling
Backward Compatibility¶
All existing CPU-only configurations remain fully functional
Default behavior unchanged (CPU execution)
No breaking changes to existing API or configuration format
Seamless upgrade path from previous versions
Migration Guide¶
For Existing Users:
To enable GPU acceleration, simply add the following to your configuration:
system_parameters:
executable: "pmemd.cuda" # Change from "pmemd.MPI" to "pmemd.cuda"
CUDA: True # Add this line
num_accelerators: 1 # Optional: specify number of GPUs
Hardware Requirements: - CUDA-enabled GPU with sufficient memory - CUDA-compatible AMBER installation - Appropriate CUDA drivers and runtime
Software Dependencies: - AMBER with CUDA support - CUDA toolkit (version 10.0 or higher recommended) - Python packages: numba (for GPU detection)
GPU-Enabled PyMBAR Analysis¶
For GPU-accelerated free energy analysis using PyMBAR, you can enable JAX CUDA support to leverage GPU computing for MBAR calculations.
Installation Requirements:
Follow the JAX installation guide for NVIDIA GPU support with CUDA 12:
# Install JAX with CUDA 12 support
pip install -U "jax[cuda12]"
Verification:
Check your CUDA version:
nvcc --version
Configuration:
Once JAX with CUDA support is installed, PyMBAR will automatically detect and use GPU acceleration when available. The analysis will be performed using JAX’s GPU-accelerated operations, significantly speeding up MBAR calculations for large datasets.
GPU Allocation:
Note that only one GPU will be used per simulation job. This means each individual simulation (such as complex lambda windows, endstate simulations, charge lambda windows, etc.) will utilize a single GPU for acceleration. Multiple simulations can run in parallel across different GPUs when available.
Benefits: - Accelerated MBAR free energy calculations - Faster convergence for large simulation datasets - Reduced analysis time for complex systems - Automatic GPU detection and utilization
References: - JAX Installation Guide - JAX CUDA Support
Known Issues and Limitations¶
GPU memory requirements may be higher than CPU simulations
Some small systems may not benefit significantly from GPU acceleration
CUDA_VISIBLE_DEVICES environment variable management requires careful configuration in multi-GPU setups
Version 1.0.0 - Initial Stable Release¶
Release Date: December 19, 2024 Status: First Stable Release for Publication
This version represents the first stable release of the Implicit Solvent DDM package, containing the exact code used for the paper submission and publication.
Key Features: - Complete DDM workflow implementation - Implicit solvent support (GBSA models) - Multi-engine compatibility (AMBER executables) - Parallel computing support (SLURM/PBS) - Automated restraint generation - Temperature replica exchange (TREMD) - Integrated MBAR analysis
For detailed information about v1.0.0 features, see Installation and Implementation Details.