salvus.flow.sites.concrete_sites.slurm
Classes
SlurmSite
SlurmSiteclass SlurmSite(salvus.flow.sites.base_site.BaseSite):
def __init__(
self,
name: str,
configuration: Dict,
keyring_settings: Optional[Dict],
db: Any,
verbosity: int = 1,
skip_version_number_check: bool = False,
):
...namestr — Site name.configurationDict — Configuration for the site.keyring_settingsOptional[Dict] — Keyring settings, if any.dbAny — Connection to the internal database.verbosityint — Verbosity level.skip_version_number_checkbool — Skip the version number check of the local Python version vs the remote site. Useful for initializing and updating sites.
file_path_type Union[Type[pathlib.PurePosixPath], Type[pathlib.PureWindowsPath]]
file_path_type Union[Type[pathlib.PurePosixPath], Type[pathlib.PureWindowsPath]]Returns the type of file paths for the given site.
home_dir pathlib.PurePosixPath
home_dir pathlib.PurePosixPathThe home directory.
is_initialized bool
is_initialized boolTrue if the site has been synchronized/initialized with the remote site.
sftp_client Union[paramiko.sftp_client.SFTPClient, salvus.flow.sites.remote_io_site.LocalSFTPClient]
sftp_client Union[paramiko.sftp_client.SFTPClient, salvus.flow.sites.remote_io_site.LocalSFTPClient]Get the sftp client instance.
Will be initialized upon the first access.
ssh_client Union[paramiko.client.SSHClient, salvus.flow.sites.remote_io_site.LocalSSHClient]
ssh_client Union[paramiko.client.SSHClient, salvus.flow.sites.remote_io_site.LocalSSHClient]Get the ssh client instance.
Will be initialized upon the first access.
update_interval_in_seconds float
update_interval_in_seconds floatA site’s actual update interval.
use_cuda_capable_gpus bool
use_cuda_capable_gpus boolTrue if a site uses license tokens.
use_license_tokens float
use_license_tokens floatTrue if a site uses license tokens.
cancel_job()
cancel_job()def cancel_job(self, job_dir: str) -> None:
...Cancels the job.
job_dirstr — The job directory.
check_if_folder_can_be_written_to()
check_if_folder_can_be_written_to()def check_if_folder_can_be_written_to(
self, path: Union[str, pathlib.Path, pathlib.PurePosixPath]
) -> bool:
...Checks if the folder can be written to.
pathUnion[str, pathlib.Path, pathlib.PurePosixPath] — Path on the remote machine.
get_job_status()
get_job_status()def get_job_status(
self, job_dir: str
) -> Union[
salvus.flow.sites.types.JobStatus, List[salvus.flow.sites.types.JobStatus]
]:
...Returns the status of the job or job array to the best knowledge of the remote site.
If the job is a job array, return the status of every job in a list if possible, otherwise just the total status of the whole job.
This is a single method as, in practice, it turns out to be more convenient to implement.
job_dirstr — The job directory.
launch_many_mpi_jobs()
launch_many_mpi_jobs()def launch_many_mpi_jobs(
self,
job_commands: Dict[int, Any],
working_dir: str,
stdout_path: str,
stderr_path: str,
wall_time_in_seconds_per_job: Optional[int],
license_tokens: Optional[List[str]] = None,
) -> List[salvus.flow.sites.types.JobStatus]:
...Launch many MPI jobs at once.
job_commandsDict[int, Any] — Dictionary of a list of commands, one per list per job.working_dirstr — The remote working directory for the execution.stdout_pathstr — Path to pipe stdout to.stderr_pathstr — Path to pipe stderr to.wall_time_in_seconds_per_jobOptional[int] — Wall-time in seconds per job. Must be given for slurm sites.license_tokensOptional[List[str]] — If the job array uses license tokens for the license enforcement they are passed here.
launch_mpi_job()
launch_mpi_job()def launch_mpi_job(
self,
commands: List[salvus.flow.sites.site_utils.RemoteCommand],
job_dir: str,
working_dir: str,
stdout_path: str,
stderr_path: str,
wall_time_in_seconds: Optional[int],
is_debug_job: bool = False,
) -> salvus.flow.sites.types.JobStatus:
...Run an MPI job.
Returns the initial status. Always “pending” for slurm jobs.
commandsList[salvus.flow.sites.site_utils.RemoteCommand] — List of commands. One will be run after the other, but all will be submitted at the same time.job_dirstr — The remote directory where all the job files are stored.working_dirstr — The remote working directory for the execution.stdout_pathstr — Path to pipe stdout to.stderr_pathstr — Path to pipe stderr to.wall_time_in_secondsOptional[int] — Wall-time in seconds. Must be given for slurm sites.is_debug_jobbool — True if this is supposed to be a debug job. Some job management systems have debug or other “fast” queues. Use these special queues if this is set to true.
pretty_print()
pretty_print()def pretty_print(self) -> None:
...Pretty and colorful representation of the site.
remote_exists()
remote_exists()def remote_exists(
self, path: Union[str, pathlib.Path, pathlib.PurePosixPath]
) -> bool:
...Check if the remote path exists or not.
pathUnion[str, pathlib.Path, pathlib.PurePosixPath] — Remote path to check.
remote_get()
remote_get()def remote_get(
self,
remotepath: Union[str, pathlib.Path, pathlib.PurePosixPath],
localpath: Union[_io.BytesIO, pathlib.Path],
progressbar: bool = False,
) -> None:
...Get a remote file.
remotepathUnion[str, pathlib.Path, pathlib.PurePosixPath] — Remote file to get.localpathUnion[_io.BytesIO, pathlib.Path] — Local path to save to Can be a file or a file like object.progressbarbool — Show progressbar.
remote_listdir()
remote_listdir()def remote_listdir(
self, path: Union[str, pathlib.Path, pathlib.PurePosixPath]
) -> List[str]:
...List the contents of a remote directory.
pathUnion[str, pathlib.Path, pathlib.PurePosixPath] — Remote path whose contents to list.
remote_mkdir()
remote_mkdir()def remote_mkdir(
self,
path: Union[str, pathlib.Path, pathlib.PurePosixPath],
mode: int = 511,
) -> None:
...Remotely create a directory.
pathUnion[str, pathlib.Path, pathlib.PurePosixPath] — Directory to create.modeint — Permissions for the new directory.
remote_put()
remote_put()def remote_put(
self,
localpath: Union[_io.BytesIO, pathlib.Path],
remotepath: Union[str, pathlib.Path, pathlib.PurePosixPath],
progressbar: bool = False,
) -> None:
...Copy a local file to a remote path.
localpathUnion[_io.BytesIO, pathlib.Path] — Local file to copy. Can be a file like object.remotepathUnion[str, pathlib.Path, pathlib.PurePosixPath] — Where to copy to.progressbarbool — Show a progressbar.
remote_rmdir()
remote_rmdir()def remote_rmdir(
self,
path: Union[str, pathlib.Path, pathlib.PurePosixPath],
verbosity: int = 1,
) -> None:
...Remotely and recursively delete a remote folder and its contents.
pathUnion[str, pathlib.Path, pathlib.PurePosixPath] — Remote path to delete.verbosityint — Verbosity level.
run_ssh_command()
run_ssh_command()def run_ssh_command(
self,
cmd: str,
assert_ok: bool = True,
environment: Optional[Dict[str, str]] = None,
) -> Tuple[int, List[str], List[str]]:
...Directly runs the given command via SSH on the remote machine.
cmdstr — Command to run.assert_okbool — Assert that it exits with code zero, otherwise raise a remote execution error with more information.environmentOptional[Dict[str, str]] — A dict of shell environment variables to be merged into the default environment that the remote command executes with.
safe_remote_rmdir()
safe_remote_rmdir()def safe_remote_rmdir(
self,
path: Union[str, pathlib.Path, pathlib.PurePosixPath],
allow_failure: bool,
verbosity: int = 1,
) -> None:
...Convenience wrapper that optionally allows the remote_rmdir() command to fail. Useful for some networked file systems.
pathUnion[str, pathlib.Path, pathlib.PurePosixPath] — Remote path to delete.allow_failurebool — Whether to allow failure or not.verbosityint — Verbosity level.