Container Runner Module
A module for running Singularity/Docker containers with support for local and SLURM cluster execution.
Overview
The ContainerRunner
class provides a unified interface for:
- Running containers locally
- Submitting container jobs to SLURM
- Managing bind mounts and GPU access
- Monitoring SLURM job status
Usage
Basic Local Container Execution
from benchmate.container_runner.container_runner import ContainerRunner
# Initialize with container path
runner = ContainerRunner(
container_path="/path/to/container.sif",
running_command="singularity" # or "docker"
)
# Add bind mounts
runner.add_bind_mount(
host_paths=["/host/path1", "/host/path2"],
container_path="/container/path"
)
# Enable GPU support if needed
runner.enable_gpu()
# Run command in container
result = runner.run("echo hello")
SLURM Cluster Execution
# Submit job to SLURM
job_id = runner.run_slurm(
command="python script.py",
job_name="my_job",
partition="gpu",
nodes=1,
ntasks=1,
time="01:00:00",
mem="16G",
gpus=1,
output_file="job_%j.out",
additional_sbatch={"mail-type": "END,FAIL"}
)
# Check job status
status = runner.check_slurm_job_status(job_id)
# Get detailed job info
job_info = runner.get_slurm_job_info(job_id)
Key Features
Container Execution
- Support for Singularity and Docker containers
- Configurable bind mounts
- GPU support via
--nv
flag - Command execution with subprocess handling
SLURM Integration
- Submit container jobs to SLURM
- Monitor job status
- Retrieve detailed job information
- Customizable SLURM job parameters
Error Handling
- Custom exception classes
- Subprocess error capturing
- SLURM job error handling
Notes
- Requires Singularity/Docker to be installed
- SLURM functionality requires access to a SLURM cluster
- GPU support requires NVIDIA drivers and appropriate container configuration
- Bind mounts require valid host paths
- Ensure that the container image is accessible from the execution environment
- SLURM job submission may require additional configuration based on the cluster setup