Runners#
Runners handle the execution of VASP calculations on different backends.
Local Runner#
Runs VASP on the local machine:
from vasp.runners import LocalRunner
runner = LocalRunner(
command="mpirun -np 4 vasp_std",
pp_path="/path/to/potpaw_PBE",
scratch_dir="/tmp/vasp",
)
calc = Vasp(atoms=atoms, runner=runner, ...)
SLURM Runner#
Submits jobs to SLURM scheduler:
from vasp import get_slurm_runner
SlurmRunner = get_slurm_runner()
runner = SlurmRunner(
partition='compute',
nodes=2,
ntasks_per_node=32,
time='4:00:00',
account='my_project',
)
Non-blocking Execution#
from vasp import VaspSubmitted, VaspQueued, VaspRunning
try:
energy = calc.potential_energy
except VaspSubmitted as e:
print(f"Job submitted: {e.jobid}")
except VaspQueued as e:
print(f"Job queued: {e.jobid}")
except VaspRunning as e:
print(f"Job running: {e.jobid}")
Kubernetes Runner#
Runs VASP in Kubernetes pods:
from vasp import get_kubernetes_runner
KubernetesRunner = get_kubernetes_runner()
runner = KubernetesRunner(
namespace='vasp-jobs',
image='my-vasp-image:latest',
cpu='4',
memory='16Gi',
)
Mock Runner#
For testing without VASP:
from vasp.runners import MockRunner, MockResults
mock = MockResults(energy=-10.5)
runner = MockRunner(results=mock)
calc = Vasp(atoms=atoms, runner=runner, ...)
energy = calc.potential_energy # Returns -10.5
Custom Runners#
Implement the Runner base class:
from vasp.runners import Runner, JobStatus
class MyRunner(Runner):
def submit(self, directory):
# Submit job
return job_id
def status(self, job_id):
# Check status
return JobStatus(state=JobState.RUNNING)