Janis-assistant is a component of Janis used to run workflows across various execution environments. This repository contains a number of preconfigured "templates" that you can use to run your workflow.
A (non-exhaustive) list of examples:
- Peter MacCallum Cancer Centre (
pmac) - University of Melbourne (
spartan) - Walter and Eliza Hall Institute of Medical Research (
wehi) - Pawsey Supercomputing Centre (
pawsey)
These templates are provided with no warranty of guarantee.
You can see the parameters you will need to pass the template through the cli, for example:
janis init pawsey --helpusage: janis init pawsey [-h] --executionDir EXECUTIONDIR --containerDir CONTAINERDIR [--queues QUEUES] [--singularityVersion SINGULARITYVERSION] [--catchSlurmErrors] [--sendSlurmEmails] [--singularityBuildInstructions SINGULARITYBUILDINSTRUCTIONS] [--max_cores MAX_CORES] [--max_ram MAX_RAM] optional arguments: -h, --help show this help message and exit required arguments: --executionDir EXECUTIONDIR --containerDir CONTAINERDIR Location where to save and execute containers from optional arguments: --queues QUEUES A single or list of queues that woork should be submitted to --singularityVersion SINGULARITYVERSION Version of singularity to load --catchSlurmErrors Catch Slurm errors (like OOM or walltime) --sendSlurmEmails (requires JanisConfiguration.notifications.email to be set) Send emails for mail types END --singularityBuildInstructions SINGULARITYBUILDINSTRUCTIONS Instructions for building singularity, it's recommended to not touch this setting. --max_cores MAX_CORES Maximum number of cores a task can request --max_ram MAX_RAM Maximum amount of ram (GB) that a task can request Create a file within the janis_templates folder along the lines of yourinstitute.py. Create a Python class that at least implements the EnvironmentTemplate declared in janis_assistant.templates.base. It's likely you'll be able to inherit from either:
- Slurm Singularity:
from janis_assistant.templates.slurm import SlurmSingularityTemplate - PBS Singularity:
from janis_assistant.templates.pbs import PbsSingularityTemplate
For example: vim janis_templates/yourinstitute.py Contents:
from janis_assistant.templates.slurm import SlurmSingularityTemplate class MyTemplate(SlurmSingularityTemplate): passEnsure you pass all the required properties to your super class's super().__init__. You can declare extra properties, and override the cromwell method, or the engine_config method too.
It's best to include type annotations, eg:
from listing import List from janis_assistant.templates.slurm import SlurmSingularityTemplate class MyTemplate(SlurmSingularityTemplate): def __init__(self, param1: str, param2: List[str]=None): super().__init__(executionDir=param1, **kwargs) self.param2 = param2Add docstrings beneath the __init__ method with the following format:
from listing import List from janis_assistant.templates.slurm import SlurmSingularityTemplate class MyTemplate(SlurmSingularityTemplate): def __init__(self, param1: str, param2: List[str]=None): """ :param param1: docstring for param1 :param param2: docstring for param2 """ super().__init__(executionDir=param1, **kwargs) self.param2 = param2Add an entrypoint (best tutorial ever) in setup.py like the following:
# other setup.py stuff entry_points={ "janis.templates": [ "yourtemplatename=janis_templates.yourinstitute:MyTemplate", # other templates here ] }