UCloud logo UCloud logo UCloud
v2025.1.0
  1. UCloud/Core
  2. 1. Introduction
  3. 2. Projects
  4. 3. Accounting
  5. 4. Orchestration
  6. UCloud/IM for Slurm-based HPC
  7. 5. Installation
  8. 6. Architecture and Networking
  9. 7. User and Project Management
  10. 8. Filesystem Integration
    1. 8.1. Inter-provider file transfers
  11. 9. Slurm Integration
    1. 9.1. Application Management
    2. 9.2. Built-in Applications
  12. 10. Reference
    1. 10.1. Configuration
    2. 10.2. CLI
  13. 11. Appendix
    1. 11.1. Built-in Application Index
  14. UCloud/IM for Kubernetes
  15. 12. Installation
  16. 13. Architecture and Networking
  17. 14. Filesystem Integration
  18. 15. Compute Jobs
    1. 15.1. Public Links
    2. 15.2. Public IPs
    3. 15.3. License Servers
    4. 15.4. SSH Servers
  19. 16. Integrated applications
    1. 16.1. Syncthing
    2. 16.2. Integrated terminal
  20. 17. Reference
    1. 17.1. Configuration
  21. H: Procedures
  22. 18. H: Procedures
  23. 19. H: Introduction
  24. 20. H: Auditing
  25. 21. H: Auditing scenario
  26. 22. H: GitHub actions
  27. 23. H: Deployment
  28. 24. H: 3rd party dependencies (risk assesment)
  1. Links
  2. Source Code
  3. Releases

Built-in Applications

This chapter will cover how to use and configure the built-in applications which UCloud offers for Slurm-based providers. This chapter assumes familiarity with how applications work. Refer to this for more details.

The built-in application repository is designed to provide end-users with essential applications for the service provider. Access to the right software is crucial for users to perform their tasks effectively. The repository offers a diverse selection of software commonly used in HPC environments. Including interactive applications such as JupyterLab and RStudio, but also a selection of batch software such as Quantum ESPRESSO and GROMACS.

Setup and Configuration

The UCloud team maintains a list of software and libraries which are loadable via the {- applicationLoad -} and {{ loadApplication("name", "version") }} calls. You can find this list here. In this section, we will explain how to enable software from this list at your service provider.

For a piece of software/library to be enabled at your provider, you must define it in the /etc/ucloud/applications folder. This is done by defining an object, which explain to the integration module how to load and unload the software. The instructions given in this document all assume that the software is already installed on your service provider.

Remember that there are no guarantees that any of the code in the load/unload sections are executed. The only guarantee that UCloud/IM provides is that the script will contain the defined instructions. They can and will sometimes not fully execute. This can be due to a variety of reasons, such as Slurm cancellation, software or hardware failure.

The load and unload instructions are executed in the context of the user.

Do not depend on the pre/postambles running. Do not use them to enforce any rules.

name: gromacs

configurations:
- versions: ["2021.5"]

  # NOTE: The load is mandatory and triggered by {- applicationLoad("app", "version") -}
  # appVersion is equal to the selected version from one of the values in "versions". Multiple versions can be 
  # specified if the load/unload instructions are identical with the exception of the version number.
  #
  # NOTE: These load and unload are also Jinja2 templates and are executed in the same environment as the script.
  # This allows you to get information about the machine it will be scheduled on.
  load: |
    module load GCC/11.2.0
    module load OpenMPI/4.1.1
    module load GROMACS/{{ appVersion }}

  # NOTE: The unload is optional and triggered by {- applicationUnload("app", "version") -}
  unload: |
    echo Unloading 'GROMACS'/{{ appVersion }}

  # This allows you to override the srun command for a given application. This is optional and will default to the
  # following value:
  srun:
    command: "srun"
    flags: []

Version Resolution

UCloud/IM will automatically find the best matching version based on the requested version. Thus, the version written in /etc/ucloud/applications should use the actual versions being loaded while the versions specified in the application YAML is purposefully under-specified. By default, UCloud/IM will find the newest version which matches the requested version. UCloud uses a heuristic for determining the ordering of application. This heuristic is based off semantic versioning, but generalized to contain an arbitrary amount of components instead of exactly 3.

Version resolution can be overriden in customizable applications by the user. This is done using {- versionResolver(policy) -}, where policy is one of the following:

  • "loose": Find the newest version which matches the requested version. If none is found, use the newest available.
  • "loose-forward": Like loose, but only select versions newer than the requested. Fail if an older version is selected.
  • "loose-backward": Like loose, but only select versions less than equal what is requested. Fail if an newer version is selected.
  • "strict": Like loose, but do not select a version which does not match the requested version.
  • Any other value is considered the version to use. Fails if the exact version is not found.

The default policy is "loose".

Below is a list of example of which versions will be selected in different environments.

Requested Available Chosen

1.2

[1.2-cray]

1.2-cray

1.2

[1.1, 1.2.3, 1.2.4, 1.2.93, 1.3]

1.2.93

1.2

[1.1, 1.3, 1.3.5]

1.3.5 (fails if not using loose or loose-forward)

1.2

[1.1]

1.1 (fails is not using loose or loose-backward)

Previous Application Management
Next Reference