<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.bwhpc.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=K+Siegmund</id>
	<title>bwHPC Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bwhpc.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=K+Siegmund"/>
	<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/e/Special:Contributions/K_Siegmund"/>
	<updated>2026-10-19T14:31:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Registration/bwForCluster/RV/Management&amp;diff=16491</id>
		<title>Registration/bwForCluster/RV/Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Registration/bwForCluster/RV/Management&amp;diff=16491"/>
		<updated>2026-10-07T15:16:34Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Roles in a RV ==&lt;br /&gt;
There are three different roles in an RV. Depending on your role, different management activites can be executed in the ZAS under [https://zas.bwhpc.de/shib/en/info_rv.php &#039;&#039;&#039;My RVs&#039;&#039;&#039;]. These are described below.&lt;br /&gt;
&lt;br /&gt;
=== RV Coworker ===&lt;br /&gt;
&lt;br /&gt;
A coworker is a typical user who registered themselves via RV acronym and RV password. They...&lt;br /&gt;
* ...can check the status of their memberships (active/inactive). &lt;br /&gt;
* ...can check the status of the RV (active/inactive &amp;amp; the date when it becomes inactive when it doesn&#039;t get prolonged).&lt;br /&gt;
* ...can deregister from an RV. &lt;br /&gt;
* ...have to acknowledge the cluster in publications and inform the RV responsible of these publications. &lt;br /&gt;
&lt;br /&gt;
=== RV Manager ===&lt;br /&gt;
&lt;br /&gt;
Additionally to the abilities of a coworker, a manager can...&lt;br /&gt;
&lt;br /&gt;
* ...re-activate deregistered or inactive members.&lt;br /&gt;
* ...check the list of RV members at [https://zas.bwhpc.de/shib/en/info_rv.php &#039;&#039;&#039;My RVs&#039;&#039;&#039;] by selecting the RV acronym. After a role change, click &#039;&#039;&#039;Save changes&#039;&#039;&#039; at the end of the members list.&lt;br /&gt;
&lt;br /&gt;
=== RV Responsible ===&lt;br /&gt;
&lt;br /&gt;
Additionally to the abilities of a manager, the responsible can...&lt;br /&gt;
&lt;br /&gt;
* ...assign managers.&lt;br /&gt;
* ...extend the runtime of the RV by one more year. Therefore, a list of publications that were created with the help of the cluster must be provided when submitting the prolongation form. &lt;br /&gt;
* ...change the RV responsible.&lt;br /&gt;
* ...set a new password if necessary and share the password with future coworkers so that they can join the RV. &lt;br /&gt;
&lt;br /&gt;
==== Renew RV Password ====&lt;br /&gt;
&lt;br /&gt;
If you lose the RV password or want to create a new one, you can simply renew it:&lt;br /&gt;
&lt;br /&gt;
1. Login to [https://zas.bwhpc.de/shib/en/info_rv.php &#039;&#039;&#039;My RVs&#039;&#039;&#039;] first.&lt;br /&gt;
[[File:RV-my.png|center|frame|My RVs.]]&lt;br /&gt;
&lt;br /&gt;
2. Select the RV acronym for your RV.&lt;br /&gt;
&lt;br /&gt;
3. Scroll down and click &#039;&#039;&#039;Renew password&#039;&#039;&#039;.&lt;br /&gt;
[[File:RV-pw.png|center|thumb|400px|Renew RV password.]]&lt;br /&gt;
&lt;br /&gt;
You will get a form that looks similar to the form you got when registering the compute project. Most fields will be pre-filled with the things you entered when registering. Please check if the entered data is still accurate for your compute activity and adjust if necessary.&lt;br /&gt;
&lt;br /&gt;
A new field in the form asks you to fill in the publications that acknowledge the cluster. Please enter the DOIs of those publications. These publications should all have the cluster you used in their Acknowledgement in a format as shown in the [[Acknowledgement]] section for each cluster.&lt;br /&gt;
&lt;br /&gt;
==== Change the RV Responsible ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ins&amp;gt;Prerequisites:&amp;lt;/ins&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* You need to be the current RV responsible. In case you don&#039;t have access to your account anymore, you can ask the cluster support for help.&lt;br /&gt;
* The person you want to appoint as new RV responsible is a member of the RV.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ins&amp;gt;Steps:&amp;lt;/ins&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; style=&amp;quot;align=left;&amp;quot;&amp;gt;&lt;br /&gt;
File:RV-my.png|center|frame|&#039;&#039;&#039;1.&#039;&#039;&#039; Login to [https://zas.bwhpc.de/shib/en/info_rv.php &#039;&#039;&#039;My RVs&#039;&#039;&#039;] and go to the RV.&lt;br /&gt;
File:Rv-hand1.png|right|thumb|400px|&#039;&#039;&#039;2.&#039;&#039;&#039; Scroll down and click &#039;&#039;&#039;Handoff&#039;&#039;&#039;.&lt;br /&gt;
File:Rv-hand2.png|right|thumb|800px|&#039;&#039;&#039;3.&#039;&#039;&#039; Select &amp;quot;New RV responsible&amp;quot; from the drop-down menu, check &amp;quot;Agreement&amp;quot; and click &amp;quot;Preview: Handover RV&amp;quot; to continue.&lt;br /&gt;
File:Rv-hand3.png|right|thumb|800px|&#039;&#039;&#039;4.&#039;&#039;&#039; Confirm the handover. &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;5.&#039;&#039;&#039; The newly appointed RV responsible gets notified via email. They have to accept within seven days.&lt;br /&gt;
&lt;br /&gt;
==== RV Extension ====&lt;br /&gt;
An RV is valid for one year. After that, the RV responsible must apply for an extension of the RV for it to be renewed for another year.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ins&amp;gt;Hints for specific cases:&amp;lt;/ins&amp;gt;&lt;br /&gt;
* I don&#039;t think that filling in the publication field is very important. &lt;br /&gt;
*: &amp;amp;rarr; The bwHPC clusters can be used for free but it&#039;s very important for us to acquire funding for the next generation hardware, support services, data storage and infrastructure. To get funding, it&#039;s essential to provide a list of research publications that benefitted from the clusters. Furthermore, you&#039;ve personally agreed to report publications in the process of registering for the cluster and you agreed to acknowledge them accordingly. Each cluster provides an example text for the acknowledgement. &lt;br /&gt;
* I&#039;m late with the extension application and it would take some time to find out cluster related publications. &lt;br /&gt;
*: &amp;amp;rarr; Write something like &amp;quot;I will provide them later&amp;quot; and send the list to your cluster&#039;s support unit as soon as you have them collected. &lt;br /&gt;
* We had a lot of publications but I&#039;m not sure which ones made use of the cluster. &lt;br /&gt;
*: &amp;amp;rarr; Please don&#039;t hand in the whole list but ask the RV members directly. &lt;br /&gt;
* We didn&#039;t have any cluster related publications. &lt;br /&gt;
*: &amp;amp;rarr; We would appreciate a short note about the reason. Some examples: &amp;quot;We didn&#039;t need the cluster much&amp;quot;, &amp;quot;The publication is still work in progress&amp;quot;, &amp;quot;We&#039;d appreciate some help for getting started with the cluster usage&amp;quot;.&lt;br /&gt;
* We have only preprints so far. &lt;br /&gt;
*: &amp;amp;rarr; Please report them, when when they are fully published. You can mention, that a certain number of publications is in preparation. &lt;br /&gt;
* The purpose and resource needs of the RV have changed. &lt;br /&gt;
*: &amp;amp;rarr; Please update the resources via the RV extension form.&lt;br /&gt;
* We forgot to acknowledge the cluster in most of the publications. &lt;br /&gt;
*: &amp;amp;rarr; That&#039;s unfortunate but please report them nevertheless. You can save us the hassle of checking in detail when you provide us with an additional confirmation that the cluster was indeed used. For example &amp;quot;Some acknowledgements are missing but I confirm that the cluster usage was relevant for the publications nevertheless&amp;quot;. Please make sure the cluster is properly cited in the next publications. &lt;br /&gt;
* I fear that the RV gets deactivated before the extension application gets accepted. &lt;br /&gt;
*: &amp;amp;rarr; Depending on the cluster the access will still be possible for a while even if the RV is over its due date. But no new members can join while the extension is pending.&lt;br /&gt;
* We didn&#039;t use the RV for a long time but now that I want to hand in the RV extension, I don&#039;t see the button anymore. &lt;br /&gt;
*: &amp;amp;rarr; Please write to the support. We can enable the button again for 14 days. &lt;br /&gt;
* Looking back I must say that we did some great research with the help of the cluster. &lt;br /&gt;
*: We&#039;re happy to hear that and would love to show it off at our bwHPC website as [https://www.bwhpc.de/success_stories.php success story]. Don&#039;t hesitate to [https://www.bwhpc.de/project_report.php submit] a short summary.&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Help_talk:Editor%27s_Guide&amp;diff=16490</id>
		<title>Help talk:Editor&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Help_talk:Editor%27s_Guide&amp;diff=16490"/>
		<updated>2026-10-07T14:56:38Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: Created page with &amp;quot; Vorschlag:  ---- Lifecycle Management &amp;amp; Verification  Articles should not stay unverified for longer than half a year. The wiki editorial team will coordinate the effort of reviewing pages. Pages kept to retain historic information must have a tag &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{History}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; ---- Diskussion nächste Wiki-Vk Lifecycle Management und überprüfen von Seiten ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Vorschlag: &lt;br /&gt;
----&lt;br /&gt;
Lifecycle Management &amp;amp; Verification &lt;br /&gt;
Articles should not stay unverified for longer than half a year. The wiki editorial team will coordinate the effort of reviewing pages. Pages kept to retain historic information must have a tag &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{History}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Diskussion nächste Wiki-Vk Lifecycle Management und überprüfen von Seiten&lt;br /&gt;
[[User:K Siegmund|K Siegmund]] ([[User talk:K Siegmund|talk]]) 16:56, 7 October 2026 (CEST)&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Help:Editor%27s_Guide&amp;diff=16489</id>
		<title>Help:Editor&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Help:Editor%27s_Guide&amp;diff=16489"/>
		<updated>2026-10-07T14:55:38Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: to talk page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the &#039;&#039;&#039;wiki.bwhpc.de&#039;&#039;&#039; contributor guide. This document outlines structural rules, content principles, and syntax conventions to keep our HPC documentation &#039;&#039;&#039;accurate, maintainable, user-focused, and machine-readable&#039;&#039;&#039; across all bwHPC sites.&lt;br /&gt;
&lt;br /&gt;
== Editorial Meetings ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be an anonymous editor, join the meeting of bwHPC wiki editors. More information in our project gitlab page at https://gitlab.kit.edu/groups/kit/bwhpc-s5/-/wikis/Home/AP1.1/Redaktionsteam_bwHPC-Wiki&lt;br /&gt;
&lt;br /&gt;
== General Principles ==&lt;br /&gt;
&lt;br /&gt;
=== Keep in Line General Wikipedia Rules as Applicable ===&lt;br /&gt;
&lt;br /&gt;
Many of Wikepedia&#039;s guidelines are very helpful for writing here as well, while some are specific to creating an encyclopedia. &lt;br /&gt;
&lt;br /&gt;
See e.g. https://en.wikipedia.org/wiki/Wikipedia:Writing_better_articles&lt;br /&gt;
&lt;br /&gt;
=== Think from the User&#039;s Perspective ===&lt;br /&gt;
&lt;br /&gt;
; Goal-Oriented Writing&lt;br /&gt;
: Always ask: &#039;&#039;&amp;quot;What is the user trying to accomplish?&amp;quot;&#039;&#039;&lt;br /&gt;
: &amp;amp;rarr; Provide actionable commands, job submission scripts, and practical examples.&lt;br /&gt;
&lt;br /&gt;
; Avoid Technical Jargon Overload&lt;br /&gt;
: Assume the user is an expert in their scientific domain (e.g., chemistry, physics), but potentially a beginner in HPC and Linux environments.&lt;br /&gt;
: &amp;amp;rarr; prefer common words over jargon, and if unavoidable, link jargon words to the [[HPC_Glossary]]&lt;br /&gt;
&lt;br /&gt;
=== No Empty Placeholders ===&lt;br /&gt;
&lt;br /&gt;
Do not publish empty pages or sections containing only headers with text like &amp;quot;TBD&amp;quot;, &amp;quot;Work in Progress&amp;quot;, or &amp;quot;Under Construction&amp;quot;. If a page has no actionable information yet, keep it in a local draft or sandbox space until it provides immediate value.&lt;br /&gt;
&lt;br /&gt;
But: Stubs are Welcome: Short pages or sections (stubs) that provide meaningful information are fine - our goal is to provide information not to create long texts.&lt;br /&gt;
&lt;br /&gt;
=== Text Longevity ===&lt;br /&gt;
&lt;br /&gt;
Avoid hardcoding very short-lived data that is bound to be outdated soon.&lt;br /&gt;
&lt;br /&gt;
When documenting forseeably quickly aging things like a specific software version, explicitly state the version in your documentation so that outdated information does not become incorrect information when seen in the context of more recent versions.&lt;br /&gt;
&lt;br /&gt;
=== Central vs. Local Scoping ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
┌─────────────────────────────────────────────────────────────┐&lt;br /&gt;
│               Generic / Cross-Cluster Content               │&lt;br /&gt;
│    (Slurm fundamentals, general module usage, scaling)      │&lt;br /&gt;
└──────────────────────────────┬──────────────────────────────┘&lt;br /&gt;
                               │&lt;br /&gt;
            ┌──────────────────┴──────────────────┐&lt;br /&gt;
            ▼                                     ▼&lt;br /&gt;
┌───────────────────────┐             ┌───────────────────────┐&lt;br /&gt;
│ Cluster-Specific Page │             │ Cluster-Specific Page │&lt;br /&gt;
│  (e.g., /Justus2/...) │             │  (e.g., /Helix/...)   │&lt;br /&gt;
└───────────────────────┘             └───────────────────────┘&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Generic Content (Main Namespace):&lt;br /&gt;
#* Applies to all or most bwHPC clusters (e.g., workflow concepts, general environment module syntax).&lt;br /&gt;
#* Keep it independent of site-specific configurations.&lt;br /&gt;
# Cluster-Specific Content (Subfolders / Subpages):&lt;br /&gt;
#* Applies only to a specific cluster environment (e.g., local storage paths, specific hardware queues/partitions, cluster hostnames).&lt;br /&gt;
#* Rule: Always place cluster-bound content under its respective subfolder:&lt;br /&gt;
#** &amp;lt;code&amp;gt;Cluster_Name/Topic&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;Justus3/Storage&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BinAC2/Partitions&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Syntax &amp;amp; Formatting ==&lt;br /&gt;
&lt;br /&gt;
* Use the simpler Wiki Syntax whenever possible instead of reverting to HTML&lt;br /&gt;
&lt;br /&gt;
* Keep Output Relevant: Do not paste raw console dumps or directory listings, but only document the command to list them on-cluster (examples are of course ok)&lt;br /&gt;
* Variable Syntax: Use standard angle brackets &amp;lt;code&amp;gt;&amp;amp;lt;placeholder&amp;amp;gt;&amp;lt;/code&amp;gt; for user-defined parameters to clearly distinguish them from literal strings:&lt;br /&gt;
** &amp;lt;code&amp;gt;squeue -u &amp;amp;lt;username&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use emphasis sparingly and on point. Writing something in bold is very often not as useful as you may think&lt;br /&gt;
&lt;br /&gt;
* Internal vs External Links: Whenever something is in the wiki, an internal link, e.g. &amp;lt;code&amp;gt;[[Registration]]&amp;lt;/code&amp;gt; should be used. The single brackets are for external links only.&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Help:Editor%27s_Guide&amp;diff=16477</id>
		<title>Help:Editor&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Help:Editor%27s_Guide&amp;diff=16477"/>
		<updated>2026-10-06T14:39:52Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the &#039;&#039;&#039;wiki.bwhpc.de&#039;&#039;&#039; contributor guide. This document outlines structural rules, content principles, and syntax conventions to keep our HPC documentation &#039;&#039;&#039;accurate, maintainable, user-focused, and machine-readable&#039;&#039;&#039; across all bwHPC sites.&lt;br /&gt;
&lt;br /&gt;
== Editorial Meetings ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be an anonymous editor, join the meeting of bwHPC wiki editors. More information in our project gitlab page at https://gitlab.kit.edu/groups/kit/bwhpc-s5/-/wikis/Home/AP1.1/Redaktionsteam_bwHPC-Wiki&lt;br /&gt;
&lt;br /&gt;
== General Principles ==&lt;br /&gt;
&lt;br /&gt;
=== Keep in Line General Wikipedia Rules as Applicable ===&lt;br /&gt;
&lt;br /&gt;
Many of Wikepedia&#039;s guidelines are very helpful for writing here as well, while some are specific to creating an encyclopedia. &lt;br /&gt;
&lt;br /&gt;
See e.g. https://en.wikipedia.org/wiki/Wikipedia:Writing_better_articles&lt;br /&gt;
&lt;br /&gt;
=== Think from the User&#039;s Perspective ===&lt;br /&gt;
&lt;br /&gt;
; Goal-Oriented Writing&lt;br /&gt;
: Always ask: &#039;&#039;&amp;quot;What is the user trying to accomplish?&amp;quot;&#039;&#039;&lt;br /&gt;
: &amp;amp;rarr; Provide actionable commands, job submission scripts, and practical examples.&lt;br /&gt;
&lt;br /&gt;
; Avoid Technical Jargon Overload&lt;br /&gt;
: Assume the user is an expert in their scientific domain (e.g., chemistry, physics), but potentially a beginner in HPC and Linux environments.&lt;br /&gt;
: &amp;amp;rarr; prefer common words over jargon, and if unavoidable, link jargon words to the [[HPC_Glossary]]&lt;br /&gt;
&lt;br /&gt;
=== No Empty Placeholders ===&lt;br /&gt;
&lt;br /&gt;
Do not publish empty pages or sections containing only headers with text like &amp;quot;TBD&amp;quot;, &amp;quot;Work in Progress&amp;quot;, or &amp;quot;Under Construction&amp;quot;. If a page has no actionable information yet, keep it in a local draft or sandbox space until it provides immediate value.&lt;br /&gt;
&lt;br /&gt;
But: Stubs are Welcome: Short pages or sections (stubs) that provide meaningful information are fine - our goal is to provide information not to create long texts.&lt;br /&gt;
&lt;br /&gt;
=== Text Longevity ===&lt;br /&gt;
&lt;br /&gt;
Avoid hardcoding very short-lived data that is bound to be outdated soon.&lt;br /&gt;
&lt;br /&gt;
When documenting forseeably quickly aging things like a specific software version, explicitly state the version in your documentation so that outdated information does not become incorrect information when seen in the context of more recent versions.&lt;br /&gt;
&lt;br /&gt;
=== Central vs. Local Scoping ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
┌─────────────────────────────────────────────────────────────┐&lt;br /&gt;
│               Generic / Cross-Cluster Content               │&lt;br /&gt;
│    (Slurm fundamentals, general module usage, scaling)      │&lt;br /&gt;
└──────────────────────────────┬──────────────────────────────┘&lt;br /&gt;
                               │&lt;br /&gt;
            ┌──────────────────┴──────────────────┐&lt;br /&gt;
            ▼                                     ▼&lt;br /&gt;
┌───────────────────────┐             ┌───────────────────────┐&lt;br /&gt;
│ Cluster-Specific Page │             │ Cluster-Specific Page │&lt;br /&gt;
│  (e.g., /Justus2/...) │             │  (e.g., /Helix/...)   │&lt;br /&gt;
└───────────────────────┘             └───────────────────────┘&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Generic Content (Main Namespace):&lt;br /&gt;
#* Applies to all or most bwHPC clusters (e.g., workflow concepts, general environment module syntax).&lt;br /&gt;
#* Keep it independent of site-specific configurations.&lt;br /&gt;
# Cluster-Specific Content (Subfolders / Subpages):&lt;br /&gt;
#* Applies only to a specific cluster environment (e.g., local storage paths, specific hardware queues/partitions, cluster hostnames).&lt;br /&gt;
#* Rule: Always place cluster-bound content under its respective subfolder:&lt;br /&gt;
#** &amp;lt;code&amp;gt;Cluster_Name/Topic&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;Justus3/Storage&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BinAC2/Partitions&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Syntax &amp;amp; Formatting ==&lt;br /&gt;
&lt;br /&gt;
* Use the simpler Wiki Syntax whenever possible instead of reverting to HTML&lt;br /&gt;
&lt;br /&gt;
* Keep Output Relevant: Do not paste raw console dumps or directory listings, but only document the command to list them on-cluster (examples are of course ok)&lt;br /&gt;
* Variable Syntax: Use standard angle brackets &amp;lt;code&amp;gt;&amp;amp;lt;placeholder&amp;amp;gt;&amp;lt;/code&amp;gt; for user-defined parameters to clearly distinguish them from literal strings:&lt;br /&gt;
** &amp;lt;code&amp;gt;squeue -u &amp;amp;lt;username&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use emphasis sparingly and on point. Writing something in bold is very often not as useful as you may think&lt;br /&gt;
&lt;br /&gt;
* Internal vs External Links: Whenever something is in the wiki, an internal link, e.g. &amp;lt;code&amp;gt;[[Registration]]&amp;lt;/code&amp;gt; should be used. The single brackets are for external links only.&lt;br /&gt;
&lt;br /&gt;
== Lifecycle Management &amp;amp; Verification ==&lt;br /&gt;
&lt;br /&gt;
Articles should not stay unverified for longer than half a year. The wiki editorial team will coordinate the effort of reviewing pages. Pages kept to retain historic information must have a tag &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{History}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Help:Editor%27s_Guide&amp;diff=16476</id>
		<title>Help:Editor&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Help:Editor%27s_Guide&amp;diff=16476"/>
		<updated>2026-10-06T14:35:38Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* General Principles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the &#039;&#039;&#039;wiki.bwhpc.de&#039;&#039;&#039; contributor guide. This document outlines structural rules, content principles, and syntax conventions to keep our HPC documentation &#039;&#039;&#039;accurate, maintainable, user-focused, and machine-readable&#039;&#039;&#039; across all bwHPC sites.&lt;br /&gt;
&lt;br /&gt;
== Editorial Meetings ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be an anonymous editor, join the meeting of bwHPC wiki editors. More information in our project gitlab page at https://gitlab.kit.edu/groups/kit/bwhpc-s5/-/wikis/Home/AP1.1/Redaktionsteam_bwHPC-Wiki&lt;br /&gt;
&lt;br /&gt;
== General Principles ==&lt;br /&gt;
&lt;br /&gt;
=== Think from the User&#039;s Perspective ===&lt;br /&gt;
&lt;br /&gt;
=== Think from the User&#039;s Perspective ===&lt;br /&gt;
&lt;br /&gt;
; Goal-Oriented Writing&lt;br /&gt;
: Always ask: &#039;&#039;&amp;quot;What is the user trying to accomplish?&amp;quot;&#039;&#039;&lt;br /&gt;
: &amp;amp;rarr; Provide actionable commands, job submission scripts, and practical examples.&lt;br /&gt;
&lt;br /&gt;
; Avoid Technical Jargon Overload&lt;br /&gt;
: Assume the user is an expert in their scientific domain (e.g., chemistry, physics), but potentially a beginner in HPC and Linux environments.&lt;br /&gt;
: &amp;amp;rarr; prefer common words over jargon, and if unavoidable, link jargon words to the [[HPC_Glossary]]&lt;br /&gt;
&lt;br /&gt;
=== No Empty Placeholders ===&lt;br /&gt;
&lt;br /&gt;
Do not publish empty pages or sections containing only headers with text like &amp;quot;TBD&amp;quot;, &amp;quot;Work in Progress&amp;quot;, or &amp;quot;Under Construction&amp;quot;. If a page has no actionable information yet, keep it in a local draft or sandbox space until it provides immediate value.&lt;br /&gt;
&lt;br /&gt;
But: Stubs are Welcome: Short pages or sections (stubs) that provide meaningful information are fine - our goal is to provide information not to create long texts.&lt;br /&gt;
&lt;br /&gt;
=== Text Longevity ===&lt;br /&gt;
&lt;br /&gt;
Avoid hardcoding very short-lived data that is bound to be outdated soon.&lt;br /&gt;
&lt;br /&gt;
When documenting forseeably quickly aging things like a specific software version, explicitly state the version in your documentation so that outdated information does not become incorrect information when seen in the context of more recent versions.&lt;br /&gt;
&lt;br /&gt;
=== Central vs. Local Scoping ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
┌─────────────────────────────────────────────────────────────┐&lt;br /&gt;
│               Generic / Cross-Cluster Content               │&lt;br /&gt;
│    (Slurm fundamentals, general module usage, scaling)      │&lt;br /&gt;
└──────────────────────────────┬──────────────────────────────┘&lt;br /&gt;
                               │&lt;br /&gt;
            ┌──────────────────┴──────────────────┐&lt;br /&gt;
            ▼                                     ▼&lt;br /&gt;
┌───────────────────────┐             ┌───────────────────────┐&lt;br /&gt;
│ Cluster-Specific Page │             │ Cluster-Specific Page │&lt;br /&gt;
│  (e.g., /Justus2/...) │             │  (e.g., /Helix/...)   │&lt;br /&gt;
└───────────────────────┘             └───────────────────────┘&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Generic Content (Main Namespace):&lt;br /&gt;
#* Applies to all or most bwHPC clusters (e.g., workflow concepts, general environment module syntax).&lt;br /&gt;
#* Keep it independent of site-specific configurations.&lt;br /&gt;
# Cluster-Specific Content (Subfolders / Subpages):&lt;br /&gt;
#* Applies only to a specific cluster environment (e.g., local storage paths, specific hardware queues/partitions, cluster hostnames).&lt;br /&gt;
#* Rule: Always place cluster-bound content under its respective subfolder:&lt;br /&gt;
#** &amp;lt;code&amp;gt;Cluster_Name/Topic&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;Justus3/Storage&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BinAC2/Partitions&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Syntax &amp;amp; Formatting ==&lt;br /&gt;
&lt;br /&gt;
* Use the simpler Wiki Syntax whenever possible instead of reverting to HTML&lt;br /&gt;
&lt;br /&gt;
* Keep Output Relevant: Do not paste raw console dumps or directory listings, but only document the command to list them on-cluster (examples are of course ok)&lt;br /&gt;
* Variable Syntax: Use standard angle brackets &amp;lt;code&amp;gt;&amp;amp;lt;placeholder&amp;amp;gt;&amp;lt;/code&amp;gt; for user-defined parameters to clearly distinguish them from literal strings:&lt;br /&gt;
** &amp;lt;code&amp;gt;squeue -u &amp;amp;lt;username&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use emphasis sparingly and on point. Writing something in bold is very often not as useful as you may think&lt;br /&gt;
&lt;br /&gt;
* Internal vs External Links: Whenever something is in the wiki, an internal link, e.g. &amp;lt;code&amp;gt;[[Registration]]&amp;lt;/code&amp;gt; should be used. The single brackets are for external links only.&lt;br /&gt;
&lt;br /&gt;
== Lifecycle Management &amp;amp; Verification ==&lt;br /&gt;
&lt;br /&gt;
Articles should not stay unverified for longer than half a year. The wiki editorial team will coordinate the effort of reviewing pages. Pages kept to retain historic information must have a tag &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{History}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Help:Editor%27s_Guide&amp;diff=16475</id>
		<title>Help:Editor&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Help:Editor%27s_Guide&amp;diff=16475"/>
		<updated>2026-10-06T14:31:46Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: Created page with &amp;quot;Welcome to the &amp;#039;&amp;#039;&amp;#039;wiki.bwhpc.de&amp;#039;&amp;#039;&amp;#039; contributor guide. This document outlines structural rules, content principles, and syntax conventions to keep our HPC documentation &amp;#039;&amp;#039;&amp;#039;accurate, maintainable, user-focused, and machine-readable&amp;#039;&amp;#039;&amp;#039; across all bwHPC sites.  == Editorial Meetings ==  Don&amp;#039;t be an anonymous editor, join the meeting of bwHPC wiki editors. More information in our project gitlab page at https://gitlab.kit.edu/groups/kit/bwhpc-s5/-/wikis/Home/AP1.1/Redaktionste...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the &#039;&#039;&#039;wiki.bwhpc.de&#039;&#039;&#039; contributor guide. This document outlines structural rules, content principles, and syntax conventions to keep our HPC documentation &#039;&#039;&#039;accurate, maintainable, user-focused, and machine-readable&#039;&#039;&#039; across all bwHPC sites.&lt;br /&gt;
&lt;br /&gt;
== Editorial Meetings ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be an anonymous editor, join the meeting of bwHPC wiki editors. More information in our project gitlab page at https://gitlab.kit.edu/groups/kit/bwhpc-s5/-/wikis/Home/AP1.1/Redaktionsteam_bwHPC-Wiki&lt;br /&gt;
&lt;br /&gt;
== General Principles ==&lt;br /&gt;
&lt;br /&gt;
=== Think from the User&#039;s Perspective ===&lt;br /&gt;
&lt;br /&gt;
; Goal-Oriented Writing: Always ask: &lt;br /&gt;
: &amp;amp;rarr;&#039;&#039;&amp;quot;What is the user trying to accomplish?&amp;quot;&#039;&#039; Provide actionable commands, job submission scripts, and practical examples.&lt;br /&gt;
&lt;br /&gt;
; Avoid Technical Jargon Overload: &lt;br /&gt;
: &amp;amp;rarr; Assume the user is an expert in their scientific domain (e.g., chemistry, physics), but potentially a beginner in HPC and Linux environments.&lt;br /&gt;
&lt;br /&gt;
=== No Empty Placeholders ===&lt;br /&gt;
&lt;br /&gt;
Do not publish empty pages or sections containing only headers with text like &amp;quot;TBD&amp;quot;, &amp;quot;Work in Progress&amp;quot;, or &amp;quot;Under Construction&amp;quot;. If a page has no actionable information yet, keep it in a local draft or sandbox space until it provides immediate value.&lt;br /&gt;
&lt;br /&gt;
But: Stubs are Welcome: Short pages or sections (stubs) that provide meaningful information are fine - our goal is to provide information not to create long texts.&lt;br /&gt;
&lt;br /&gt;
=== Text Longevity ===&lt;br /&gt;
&lt;br /&gt;
Avoid hardcoding very short-lived data that is bound to be outdated soon.&lt;br /&gt;
&lt;br /&gt;
When documenting forseeably quickly aging things like a specific software version, explicitly state the version in your documentation so that outdated information does not become incorrect information when seen in the context of more recent versions.&lt;br /&gt;
&lt;br /&gt;
=== Central vs. Local Scoping ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
┌─────────────────────────────────────────────────────────────┐&lt;br /&gt;
│               Generic / Cross-Cluster Content               │&lt;br /&gt;
│    (Slurm fundamentals, general module usage, scaling)      │&lt;br /&gt;
└──────────────────────────────┬──────────────────────────────┘&lt;br /&gt;
                               │&lt;br /&gt;
            ┌──────────────────┴──────────────────┐&lt;br /&gt;
            ▼                                     ▼&lt;br /&gt;
┌───────────────────────┐             ┌───────────────────────┐&lt;br /&gt;
│ Cluster-Specific Page │             │ Cluster-Specific Page │&lt;br /&gt;
│  (e.g., /Justus2/...) │             │  (e.g., /Helix/...)   │&lt;br /&gt;
└───────────────────────┘             └───────────────────────┘&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Generic Content (Main Namespace):&lt;br /&gt;
#* Applies to all or most bwHPC clusters (e.g., workflow concepts, general environment module syntax).&lt;br /&gt;
#* Keep it independent of site-specific configurations.&lt;br /&gt;
# Cluster-Specific Content (Subfolders / Subpages):&lt;br /&gt;
#* Applies only to a specific cluster environment (e.g., local storage paths, specific hardware queues/partitions, cluster hostnames).&lt;br /&gt;
#* Rule: Always place cluster-bound content under its respective subfolder:&lt;br /&gt;
#** &amp;lt;code&amp;gt;Cluster_Name/Topic&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;Justus3/Storage&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BinAC2/Partitions&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Syntax &amp;amp; Formatting ==&lt;br /&gt;
&lt;br /&gt;
* Use the simpler Wiki Syntax whenever possible instead of reverting to HTML&lt;br /&gt;
&lt;br /&gt;
* Keep Output Relevant: Do not paste raw console dumps or directory listings, but only document the command to list them on-cluster (examples are of course ok)&lt;br /&gt;
* Variable Syntax: Use standard angle brackets &amp;lt;code&amp;gt;&amp;amp;lt;placeholder&amp;amp;gt;&amp;lt;/code&amp;gt; for user-defined parameters to clearly distinguish them from literal strings:&lt;br /&gt;
** &amp;lt;code&amp;gt;squeue -u &amp;amp;lt;username&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use emphasis sparingly and on point. Writing something in bold is very often not as useful as you may think&lt;br /&gt;
&lt;br /&gt;
* Internal vs External Links: Whenever something is in the wiki, an internal link, e.g. &amp;lt;code&amp;gt;[[Registration]]&amp;lt;/code&amp;gt; should be used. The single brackets are for external links only.&lt;br /&gt;
&lt;br /&gt;
== Lifecycle Management &amp;amp; Verification ==&lt;br /&gt;
&lt;br /&gt;
Articles should not stay unverified for longer than half a year. The wiki editorial team will coordinate the effort of reviewing pages. Pages kept to retain historic information must have a tag &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{History}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=JUSTUS2/Software/NAMD&amp;diff=16436</id>
		<title>JUSTUS2/Software/NAMD</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=JUSTUS2/Software/NAMD&amp;diff=16436"/>
		<updated>2026-09-22T09:32:15Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Example Scripts = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Softwarepage|chem/namd}}&lt;br /&gt;
&lt;br /&gt;
{| width=760px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Content&lt;br /&gt;
|-&lt;br /&gt;
| module load&lt;br /&gt;
| chem/namd&lt;br /&gt;
|-&lt;br /&gt;
| Availability&lt;br /&gt;
| [[BwForCluster_JUSTUS_2]] &amp;amp;#124; &lt;br /&gt;
|-&lt;br /&gt;
| License&lt;br /&gt;
| Freeware for non-commercial use. [[#License|More...]]&lt;br /&gt;
|-&lt;br /&gt;
| Citing &lt;br /&gt;
| [http://www.ks.uiuc.edu/Research/namd/papers.html Publications]&lt;br /&gt;
|-&lt;br /&gt;
| Links&lt;br /&gt;
| [http://www.ks.uiuc.edu/Research/namd/ Homepage] &amp;amp;#124; [http://www.ks.uiuc.edu/Research/namd/2.14/ug/ Documentation]&lt;br /&gt;
|-&lt;br /&gt;
| Graphical Interface&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NAMD&#039;&#039;&#039; (NAnoscale Molecular Dynamics) is a parallel molecular dynamics code designed for high-performance simulation of large biomolecular systems.&lt;br /&gt;
&lt;br /&gt;
= Availability =&lt;br /&gt;
&lt;br /&gt;
NAMD is available on selected bwHPC-Clusters. A complete list of versions currently installed on the bwHPC-Clusters can be obtained from https://www.bwhpc.de/software.html &lt;br /&gt;
In order to check which versions of NAMD are installed on the compute cluster, run the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module avail chem/namd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
&lt;br /&gt;
NAMD is available as [https://en.wikipedia.org/wiki/Freeware freeware] for non-commercial use by individuals, academic institutions, and corporations for in-house business uses. Please read the [http://www.ks.uiuc.edu/Research/namd/license.html license] for additional information about NAMD.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Loading the module ==&lt;br /&gt;
&lt;br /&gt;
You can load the default version of NAMD with the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load chem/namd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module will try to load all modules (i.e., compiler, MPI, MKL) it needs to function. If loading the module fails, check if you have already loaded one of those modules, but not in the version required by NAMD.&lt;br /&gt;
&lt;br /&gt;
If you wish to load another (older) version of NAMD, you can do so using&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load chem/namd/&amp;lt;version&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
with &amp;lt;version&amp;gt; specifying the desired version.&lt;br /&gt;
&lt;br /&gt;
Please cite NAMD in your publications according to the [http://www.ks.uiuc.edu/Research/namd/papers.html references].&lt;br /&gt;
&lt;br /&gt;
== Program Binaries ==&lt;br /&gt;
&lt;br /&gt;
The binary &#039;&#039;namd2&#039;&#039; is main program of the NAMD package.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usage: namd2 [options] [config file]&lt;br /&gt;
  &lt;br /&gt;
Example: namd2 +isomalloc_sync run.namd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For information about how to construct NAMD configuration files, please see the [http://www.ks.uiuc.edu/Research/namd/2.14/ug/ documentation]. In addition to a configuration file, NAMD also needs a CHARMM force field in either CHARMM or X-PLOR format, an X-PLOR format PSF file describing the molecular structure, and the initial coordinates of the molecular system in the form of a PDB file.&lt;br /&gt;
&lt;br /&gt;
The NAMD package includes several additional tools:&lt;br /&gt;
&lt;br /&gt;
* flipbinpdb -- flips byte-ordering of 8-byte doubles&lt;br /&gt;
* flipdcd -- flips byte-ordering of DCD files&lt;br /&gt;
* psfgen -- [https://www.ks.uiuc.edu/Research/vmd/ VMD] psfgen plugin&lt;br /&gt;
* sortreplicas -- un-shuffles replica trajectories to place same-temperature frames in the same file&lt;br /&gt;
&lt;br /&gt;
=== Charm++ ===&lt;br /&gt;
&lt;br /&gt;
Charm++ is a parallel object-oriented programming paradigm based on C++ and developed in the Parallel Programming Laboratory at the University of Illinois at Urbana–Champaign. NAMD has been implemented using Charm++.&lt;br /&gt;
&lt;br /&gt;
* charmrun -- launches Charm++ programs&lt;br /&gt;
&lt;br /&gt;
For help on usage, type&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ charmrun -help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GPU Acceleration ===&lt;br /&gt;
&lt;br /&gt;
Currently not available.&lt;br /&gt;
&lt;br /&gt;
== Hints for using NAMD ==&lt;br /&gt;
&lt;br /&gt;
=== Parallel Execution ===&lt;br /&gt;
&lt;br /&gt;
It is usually more efficient to run several smaller jobs with reasonable speedup side by side. Check for a reasonable speedup by increasing the number of workers from 1, 2, 4, n cores. Do not forget to adjust the memory specification when changing the number of workers&lt;br /&gt;
&lt;br /&gt;
=== Memory Management ===&lt;br /&gt;
&lt;br /&gt;
It requires some experience to choose the perfect memory value. Monitoring a job interactively may help to estimate the memory consumption. Requesting 1GB more than the required amount is typically sufficient.&lt;br /&gt;
&lt;br /&gt;
=== Runtime Specification ===&lt;br /&gt;
&lt;br /&gt;
The wall-time limit is independent of the number of parallel workers. Selecting the best value requires some experience. In general, jobs with shorter wall times get higher priorities. It could help to run the job interactively for a small period of time to monitor its convergence. Furthermore, it may be advantageous to extrapolate the run time by looking at smaller test jobs.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
As with all processes that require more than a few minutes to run, non-trivial compute jobs must be submitted to the cluster queuing system.&lt;br /&gt;
&lt;br /&gt;
Example scripts are available in the directory &amp;lt;span style=&amp;quot;background:#edeae2;margin:2px;padding:1px;border:1px dotted #808080&amp;quot;&amp;gt;$NAMD_EXA_DIR&amp;lt;/span&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module show chem/namd                # show environment variables, which will be available after &#039;module load&#039;&lt;br /&gt;
$ module load chem/namd                # load module&lt;br /&gt;
$ ls $NAMD_EXA_DIR                     # show content of directory $NAMD_EXA_DIR&lt;br /&gt;
$ cat $NAMD_EXA_DIR/README             # show examples README&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a first simple example job on &amp;lt;font color=red&amp;gt;JUSTUS 2&amp;lt;/font&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load chem/namd                          # load module&lt;br /&gt;
$ WORKSPACE=`ws_allocate namd 3`                 # allocate workspace&lt;br /&gt;
$ cd $WORKSPACE                                  # change to workspace&lt;br /&gt;
$ cp -a $NAMD_HOME/bwhpc-examples .              # copy example files to workspace&lt;br /&gt;
$ cd bwhpc-examples/apoa1                        # change to test directory&lt;br /&gt;
$ sbatch bwhpc_namd_apoa1.sh                     # submit job&lt;br /&gt;
$ squeue                                         # obtain JOBID&lt;br /&gt;
$ scontrol show job &amp;lt;JOBID&amp;gt;                      # check state of job&lt;br /&gt;
$ ls                                             # when job finishes the results will be visible in this directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example Scripts =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate two nodes&lt;br /&gt;
#SBATCH --nodes=2&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --tasks-per-node=48&lt;br /&gt;
# Allocate 20 (of 192) GB memory per node&lt;br /&gt;
#SBATCH --mem=20gb&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=00:10:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=bwhpc-example&lt;br /&gt;
# File name for stdout/stderr (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=bwhpc-example_ID-%j.out&lt;br /&gt;
&lt;br /&gt;
#########################&lt;br /&gt;
#&lt;br /&gt;
# bwHPC examples illustrate how to submit a batch job to the cluster queuing system. It is necessary to adapt certain specifications for your particular case.&lt;br /&gt;
#&lt;br /&gt;
# General Hints&lt;br /&gt;
#&lt;br /&gt;
# Parallel Execution:&lt;br /&gt;
# It is usually more efficient to run several smaller jobs with reasonable speedup simultaneously. Check for a reasonable speedup by gradually increasing the number of workers from 1 or 2 to n cores. Do not forget to adjust the memory specification when changing the number of workers. Use $ seff &amp;lt;jobid&amp;gt; to get efficiency information.&lt;br /&gt;
#&lt;br /&gt;
# Memory Management:&lt;br /&gt;
# It requires some experience to choose the perfect memory value. Monitoring a job interactively may help to estimate the memory consumption. Requesting 1GB more than the required amount is typically sufficient. Use $ seff &amp;lt;jobid&amp;gt; to get efficiency information.&lt;br /&gt;
#&lt;br /&gt;
# Runtime Specification:&lt;br /&gt;
# The wall-time limit is independent of the number of parallel workers. In general, jobs with shorter wall times get higher priorities. It could help to run the job interactively for a small period of time to monitor its convergence. Furthermore, it may be advantageous to extrapolate the run time by looking at smaller test jobs first.&lt;br /&gt;
#&lt;br /&gt;
#########################&lt;br /&gt;
&lt;br /&gt;
module purge&lt;br /&gt;
module load chem/namd/2.14&lt;br /&gt;
module list&lt;br /&gt;
&lt;br /&gt;
srun namd2 +isomalloc_sync apoa1.namd&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
* [http://www.ks.uiuc.edu/Research/namd/2.14/ug/ Documentation (english)]&lt;br /&gt;
* [http://www.ks.uiuc.edu/Research/namd/mailing_list/ Maling list (english)]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/NAMD Wikipedia article (english)]&lt;br /&gt;
* [https://de.wikipedia.org/wiki/NAMD Wikipedia article (german)]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=JUSTUS2/Software/NAMD&amp;diff=16435</id>
		<title>JUSTUS2/Software/NAMD</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=JUSTUS2/Software/NAMD&amp;diff=16435"/>
		<updated>2026-09-22T09:31:21Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: Auto-sync: Example Scripts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Softwarepage|chem/namd}}&lt;br /&gt;
&lt;br /&gt;
{| width=760px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Content&lt;br /&gt;
|-&lt;br /&gt;
| module load&lt;br /&gt;
| chem/namd&lt;br /&gt;
|-&lt;br /&gt;
| Availability&lt;br /&gt;
| [[BwForCluster_JUSTUS_2]] &amp;amp;#124; &lt;br /&gt;
|-&lt;br /&gt;
| License&lt;br /&gt;
| Freeware for non-commercial use. [[#License|More...]]&lt;br /&gt;
|-&lt;br /&gt;
| Citing &lt;br /&gt;
| [http://www.ks.uiuc.edu/Research/namd/papers.html Publications]&lt;br /&gt;
|-&lt;br /&gt;
| Links&lt;br /&gt;
| [http://www.ks.uiuc.edu/Research/namd/ Homepage] &amp;amp;#124; [http://www.ks.uiuc.edu/Research/namd/2.14/ug/ Documentation]&lt;br /&gt;
|-&lt;br /&gt;
| Graphical Interface&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NAMD&#039;&#039;&#039; (NAnoscale Molecular Dynamics) is a parallel molecular dynamics code designed for high-performance simulation of large biomolecular systems.&lt;br /&gt;
&lt;br /&gt;
= Availability =&lt;br /&gt;
&lt;br /&gt;
NAMD is available on selected bwHPC-Clusters. A complete list of versions currently installed on the bwHPC-Clusters can be obtained from https://www.bwhpc.de/software.html &lt;br /&gt;
In order to check which versions of NAMD are installed on the compute cluster, run the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module avail chem/namd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
&lt;br /&gt;
NAMD is available as [https://en.wikipedia.org/wiki/Freeware freeware] for non-commercial use by individuals, academic institutions, and corporations for in-house business uses. Please read the [http://www.ks.uiuc.edu/Research/namd/license.html license] for additional information about NAMD.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Loading the module ==&lt;br /&gt;
&lt;br /&gt;
You can load the default version of NAMD with the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load chem/namd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module will try to load all modules (i.e., compiler, MPI, MKL) it needs to function. If loading the module fails, check if you have already loaded one of those modules, but not in the version required by NAMD.&lt;br /&gt;
&lt;br /&gt;
If you wish to load another (older) version of NAMD, you can do so using&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load chem/namd/&amp;lt;version&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
with &amp;lt;version&amp;gt; specifying the desired version.&lt;br /&gt;
&lt;br /&gt;
Please cite NAMD in your publications according to the [http://www.ks.uiuc.edu/Research/namd/papers.html references].&lt;br /&gt;
&lt;br /&gt;
== Program Binaries ==&lt;br /&gt;
&lt;br /&gt;
The binary &#039;&#039;namd2&#039;&#039; is main program of the NAMD package.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usage: namd2 [options] [config file]&lt;br /&gt;
  &lt;br /&gt;
Example: namd2 +isomalloc_sync run.namd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For information about how to construct NAMD configuration files, please see the [http://www.ks.uiuc.edu/Research/namd/2.14/ug/ documentation]. In addition to a configuration file, NAMD also needs a CHARMM force field in either CHARMM or X-PLOR format, an X-PLOR format PSF file describing the molecular structure, and the initial coordinates of the molecular system in the form of a PDB file.&lt;br /&gt;
&lt;br /&gt;
The NAMD package includes several additional tools:&lt;br /&gt;
&lt;br /&gt;
* flipbinpdb -- flips byte-ordering of 8-byte doubles&lt;br /&gt;
* flipdcd -- flips byte-ordering of DCD files&lt;br /&gt;
* psfgen -- [https://www.ks.uiuc.edu/Research/vmd/ VMD] psfgen plugin&lt;br /&gt;
* sortreplicas -- un-shuffles replica trajectories to place same-temperature frames in the same file&lt;br /&gt;
&lt;br /&gt;
=== Charm++ ===&lt;br /&gt;
&lt;br /&gt;
Charm++ is a parallel object-oriented programming paradigm based on C++ and developed in the Parallel Programming Laboratory at the University of Illinois at Urbana–Champaign. NAMD has been implemented using Charm++.&lt;br /&gt;
&lt;br /&gt;
* charmrun -- launches Charm++ programs&lt;br /&gt;
&lt;br /&gt;
For help on usage, type&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ charmrun -help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GPU Acceleration ===&lt;br /&gt;
&lt;br /&gt;
Currently not available.&lt;br /&gt;
&lt;br /&gt;
== Hints for using NAMD ==&lt;br /&gt;
&lt;br /&gt;
=== Parallel Execution ===&lt;br /&gt;
&lt;br /&gt;
It is usually more efficient to run several smaller jobs with reasonable speedup side by side. Check for a reasonable speedup by increasing the number of workers from 1, 2, 4, n cores. Do not forget to adjust the memory specification when changing the number of workers&lt;br /&gt;
&lt;br /&gt;
=== Memory Management ===&lt;br /&gt;
&lt;br /&gt;
It requires some experience to choose the perfect memory value. Monitoring a job interactively may help to estimate the memory consumption. Requesting 1GB more than the required amount is typically sufficient.&lt;br /&gt;
&lt;br /&gt;
=== Runtime Specification ===&lt;br /&gt;
&lt;br /&gt;
The wall-time limit is independent of the number of parallel workers. Selecting the best value requires some experience. In general, jobs with shorter wall times get higher priorities. It could help to run the job interactively for a small period of time to monitor its convergence. Furthermore, it may be advantageous to extrapolate the run time by looking at smaller test jobs.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
As with all processes that require more than a few minutes to run, non-trivial compute jobs must be submitted to the cluster queuing system.&lt;br /&gt;
&lt;br /&gt;
Example scripts are available in the directory &amp;lt;span style=&amp;quot;background:#edeae2;margin:2px;padding:1px;border:1px dotted #808080&amp;quot;&amp;gt;$NAMD_EXA_DIR&amp;lt;/span&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module show chem/namd                # show environment variables, which will be available after &#039;module load&#039;&lt;br /&gt;
$ module load chem/namd                # load module&lt;br /&gt;
$ ls $NAMD_EXA_DIR                     # show content of directory $NAMD_EXA_DIR&lt;br /&gt;
$ cat $NAMD_EXA_DIR/README             # show examples README&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a first simple example job on &amp;lt;font color=red&amp;gt;JUSTUS 2&amp;lt;/font&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load chem/namd                          # load module&lt;br /&gt;
$ WORKSPACE=`ws_allocate namd 3`                 # allocate workspace&lt;br /&gt;
$ cd $WORKSPACE                                  # change to workspace&lt;br /&gt;
$ cp -a $NAMD_HOME/bwhpc-examples .              # copy example files to workspace&lt;br /&gt;
$ cd bwhpc-examples/apoa1                        # change to test directory&lt;br /&gt;
$ sbatch bwhpc_namd_apoa1.sh                     # submit job&lt;br /&gt;
$ squeue                                         # obtain JOBID&lt;br /&gt;
$ scontrol show job &amp;lt;JOBID&amp;gt;                      # check state of job&lt;br /&gt;
$ ls                                             # when job finishes the results will be visible in this directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example Scripts ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate two nodes&lt;br /&gt;
#SBATCH --nodes=2&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --tasks-per-node=48&lt;br /&gt;
# Allocate 20 (of 192) GB memory per node&lt;br /&gt;
#SBATCH --mem=20gb&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=00:10:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=bwhpc-example&lt;br /&gt;
# File name for stdout/stderr (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=bwhpc-example_ID-%j.out&lt;br /&gt;
&lt;br /&gt;
#########################&lt;br /&gt;
#&lt;br /&gt;
# bwHPC examples illustrate how to submit a batch job to the cluster queuing system. It is necessary to adapt certain specifications for your particular case.&lt;br /&gt;
#&lt;br /&gt;
# General Hints&lt;br /&gt;
#&lt;br /&gt;
# Parallel Execution:&lt;br /&gt;
# It is usually more efficient to run several smaller jobs with reasonable speedup simultaneously. Check for a reasonable speedup by gradually increasing the number of workers from 1 or 2 to n cores. Do not forget to adjust the memory specification when changing the number of workers. Use $ seff &amp;lt;jobid&amp;gt; to get efficiency information.&lt;br /&gt;
#&lt;br /&gt;
# Memory Management:&lt;br /&gt;
# It requires some experience to choose the perfect memory value. Monitoring a job interactively may help to estimate the memory consumption. Requesting 1GB more than the required amount is typically sufficient. Use $ seff &amp;lt;jobid&amp;gt; to get efficiency information.&lt;br /&gt;
#&lt;br /&gt;
# Runtime Specification:&lt;br /&gt;
# The wall-time limit is independent of the number of parallel workers. In general, jobs with shorter wall times get higher priorities. It could help to run the job interactively for a small period of time to monitor its convergence. Furthermore, it may be advantageous to extrapolate the run time by looking at smaller test jobs first.&lt;br /&gt;
#&lt;br /&gt;
#########################&lt;br /&gt;
&lt;br /&gt;
module purge&lt;br /&gt;
module load chem/namd/2.14&lt;br /&gt;
module list&lt;br /&gt;
&lt;br /&gt;
srun namd2 +isomalloc_sync apoa1.namd&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
* [http://www.ks.uiuc.edu/Research/namd/2.14/ug/ Documentation (english)]&lt;br /&gt;
* [http://www.ks.uiuc.edu/Research/namd/mailing_list/ Maling list (english)]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/NAMD Wikipedia article (english)]&lt;br /&gt;
* [https://de.wikipedia.org/wiki/NAMD Wikipedia article (german)]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=JUSTUS2/Software/NAMD&amp;diff=16434</id>
		<title>JUSTUS2/Software/NAMD</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=JUSTUS2/Software/NAMD&amp;diff=16434"/>
		<updated>2026-09-22T07:59:39Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Softwarepage|chem/namd}}&lt;br /&gt;
&lt;br /&gt;
{| width=760px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Content&lt;br /&gt;
|-&lt;br /&gt;
| module load&lt;br /&gt;
| chem/namd&lt;br /&gt;
|-&lt;br /&gt;
| Availability&lt;br /&gt;
| [[BwForCluster_JUSTUS_2]] &amp;amp;#124; &lt;br /&gt;
|-&lt;br /&gt;
| License&lt;br /&gt;
| Freeware for non-commercial use. [[#License|More...]]&lt;br /&gt;
|-&lt;br /&gt;
| Citing &lt;br /&gt;
| [http://www.ks.uiuc.edu/Research/namd/papers.html Publications]&lt;br /&gt;
|-&lt;br /&gt;
| Links&lt;br /&gt;
| [http://www.ks.uiuc.edu/Research/namd/ Homepage] &amp;amp;#124; [http://www.ks.uiuc.edu/Research/namd/2.14/ug/ Documentation]&lt;br /&gt;
|-&lt;br /&gt;
| Graphical Interface&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NAMD&#039;&#039;&#039; (NAnoscale Molecular Dynamics) is a parallel molecular dynamics code designed for high-performance simulation of large biomolecular systems.&lt;br /&gt;
&lt;br /&gt;
= Availability =&lt;br /&gt;
&lt;br /&gt;
NAMD is available on selected bwHPC-Clusters. A complete list of versions currently installed on the bwHPC-Clusters can be obtained from https://www.bwhpc.de/software.html &lt;br /&gt;
In order to check which versions of NAMD are installed on the compute cluster, run the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module avail chem/namd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= License =&lt;br /&gt;
&lt;br /&gt;
NAMD is available as [https://en.wikipedia.org/wiki/Freeware freeware] for non-commercial use by individuals, academic institutions, and corporations for in-house business uses. Please read the [http://www.ks.uiuc.edu/Research/namd/license.html license] for additional information about NAMD.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Loading the module ==&lt;br /&gt;
&lt;br /&gt;
You can load the default version of NAMD with the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load chem/namd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module will try to load all modules (i.e., compiler, MPI, MKL) it needs to function. If loading the module fails, check if you have already loaded one of those modules, but not in the version required by NAMD.&lt;br /&gt;
&lt;br /&gt;
If you wish to load another (older) version of NAMD, you can do so using&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load chem/namd/&amp;lt;version&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
with &amp;lt;version&amp;gt; specifying the desired version.&lt;br /&gt;
&lt;br /&gt;
Please cite NAMD in your publications according to the [http://www.ks.uiuc.edu/Research/namd/papers.html references].&lt;br /&gt;
&lt;br /&gt;
== Program Binaries ==&lt;br /&gt;
&lt;br /&gt;
The binary &#039;&#039;namd2&#039;&#039; is main program of the NAMD package.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usage: namd2 [options] [config file]&lt;br /&gt;
  &lt;br /&gt;
Example: namd2 +isomalloc_sync run.namd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For information about how to construct NAMD configuration files, please see the [http://www.ks.uiuc.edu/Research/namd/2.14/ug/ documentation]. In addition to a configuration file, NAMD also needs a CHARMM force field in either CHARMM or X-PLOR format, an X-PLOR format PSF file describing the molecular structure, and the initial coordinates of the molecular system in the form of a PDB file.&lt;br /&gt;
&lt;br /&gt;
The NAMD package includes several additional tools:&lt;br /&gt;
&lt;br /&gt;
* flipbinpdb -- flips byte-ordering of 8-byte doubles&lt;br /&gt;
* flipdcd -- flips byte-ordering of DCD files&lt;br /&gt;
* psfgen -- [https://www.ks.uiuc.edu/Research/vmd/ VMD] psfgen plugin&lt;br /&gt;
* sortreplicas -- un-shuffles replica trajectories to place same-temperature frames in the same file&lt;br /&gt;
&lt;br /&gt;
=== Charm++ ===&lt;br /&gt;
&lt;br /&gt;
Charm++ is a parallel object-oriented programming paradigm based on C++ and developed in the Parallel Programming Laboratory at the University of Illinois at Urbana–Champaign. NAMD has been implemented using Charm++.&lt;br /&gt;
&lt;br /&gt;
* charmrun -- launches Charm++ programs&lt;br /&gt;
&lt;br /&gt;
For help on usage, type&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ charmrun -help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GPU Acceleration ===&lt;br /&gt;
&lt;br /&gt;
Currently not available.&lt;br /&gt;
&lt;br /&gt;
== Hints for using NAMD ==&lt;br /&gt;
&lt;br /&gt;
=== Parallel Execution ===&lt;br /&gt;
&lt;br /&gt;
It is usually more efficient to run several smaller jobs with reasonable speedup side by side. Check for a reasonable speedup by increasing the number of workers from 1, 2, 4, n cores. Do not forget to adjust the memory specification when changing the number of workers&lt;br /&gt;
&lt;br /&gt;
=== Memory Management ===&lt;br /&gt;
&lt;br /&gt;
It requires some experience to choose the perfect memory value. Monitoring a job interactively may help to estimate the memory consumption. Requesting 1GB more than the required amount is typically sufficient.&lt;br /&gt;
&lt;br /&gt;
=== Runtime Specification ===&lt;br /&gt;
&lt;br /&gt;
The wall-time limit is independent of the number of parallel workers. Selecting the best value requires some experience. In general, jobs with shorter wall times get higher priorities. It could help to run the job interactively for a small period of time to monitor its convergence. Furthermore, it may be advantageous to extrapolate the run time by looking at smaller test jobs.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
As with all processes that require more than a few minutes to run, non-trivial compute jobs must be submitted to the cluster queuing system.&lt;br /&gt;
&lt;br /&gt;
Example scripts are available in the directory &amp;lt;span style=&amp;quot;background:#edeae2;margin:2px;padding:1px;border:1px dotted #808080&amp;quot;&amp;gt;$NAMD_EXA_DIR&amp;lt;/span&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module show chem/namd                # show environment variables, which will be available after &#039;module load&#039;&lt;br /&gt;
$ module load chem/namd                # load module&lt;br /&gt;
$ ls $NAMD_EXA_DIR                     # show content of directory $NAMD_EXA_DIR&lt;br /&gt;
$ cat $NAMD_EXA_DIR/README             # show examples README&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a first simple example job on &amp;lt;font color=red&amp;gt;JUSTUS 2&amp;lt;/font&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load chem/namd                          # load module&lt;br /&gt;
$ WORKSPACE=`ws_allocate namd 3`                 # allocate workspace&lt;br /&gt;
$ cd $WORKSPACE                                  # change to workspace&lt;br /&gt;
$ cp -a $NAMD_HOME/bwhpc-examples .              # copy example files to workspace&lt;br /&gt;
$ cd bwhpc-examples/apoa1                        # change to test directory&lt;br /&gt;
$ sbatch bwhpc_namd_apoa1.sh                     # submit job&lt;br /&gt;
$ squeue                                         # obtain JOBID&lt;br /&gt;
$ scontrol show job &amp;lt;JOBID&amp;gt;                      # check state of job&lt;br /&gt;
$ ls                                             # when job finishes the results will be visible in this directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Scripts ==&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
* [http://www.ks.uiuc.edu/Research/namd/2.14/ug/ Documentation (english)]&lt;br /&gt;
* [http://www.ks.uiuc.edu/Research/namd/mailing_list/ Maling list (english)]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/NAMD Wikipedia article (english)]&lt;br /&gt;
* [https://de.wikipedia.org/wiki/NAMD Wikipedia article (german)]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwForCluster_JUSTUS_2_Slurm_HOWTO&amp;diff=16426</id>
		<title>BwForCluster JUSTUS 2 Slurm HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwForCluster_JUSTUS_2_Slurm_HOWTO&amp;diff=16426"/>
		<updated>2026-09-17T12:26:41Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* How to retrieve job records for all jobs running/pending at a certain point in time? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Justus2}}&lt;br /&gt;
&lt;br /&gt;
This is a collection of howtos and convenient Slurm commands for JUSTUS 2.&lt;br /&gt;
&lt;br /&gt;
Some commands behave slightly different depending on whether they are executed &lt;br /&gt;
by a system administrator or by a regular user, as Slurm prevents regular users from accessing critical system information and viewing job and usage information of other users.  &lt;br /&gt;
&lt;br /&gt;
= GENERAL INFORMATION =&lt;br /&gt;
&lt;br /&gt;
== How to find a general quick start user guide? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/quickstart.html&lt;br /&gt;
&lt;br /&gt;
== How to find Slurm FAQ? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/faq.html&lt;br /&gt;
&lt;br /&gt;
== How to find a Slurm cheat sheet? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/pdfs/summary.pdf&lt;br /&gt;
&lt;br /&gt;
== How to find Slurm tutorials? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/tutorials.html&lt;br /&gt;
&lt;br /&gt;
== How to get more information on Slurm? ==&lt;br /&gt;
&lt;br /&gt;
(Almost) every Slurm command has a man page. Use it.&lt;br /&gt;
&lt;br /&gt;
Online versions: https://slurm.schedmd.com/man_index.html&lt;br /&gt;
&lt;br /&gt;
== How to find hardware specific details about JUSTUS 2? ==&lt;br /&gt;
&lt;br /&gt;
See our Wiki page: [[Hardware and Architecture (bwForCluster JUSTUS 2)|Hardware and Architecture]]&lt;br /&gt;
&lt;br /&gt;
= JOB SUBMISSION =&lt;br /&gt;
&lt;br /&gt;
== How to submit a serial batch job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html sbatch]  command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch &amp;lt;job-script&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample job script template for serial job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# 8 GB memory required per node&lt;br /&gt;
#SBATCH --mem=8G&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=serial_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=serial_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=serial_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# Run serial program&lt;br /&gt;
./my_serial_program&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for serial program: [[Media:Hello_serial.c | Hello_serial.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* --nodes=1 and --ntasks-per-node=1 may be replaced by --ntasks=1.&lt;br /&gt;
* If not specified, stdout and stderr are both written to slurm-%j.out.&lt;br /&gt;
&lt;br /&gt;
== How to find working sample scripts for my program? ==&lt;br /&gt;
&lt;br /&gt;
Most software modules for applications provide working sample batch scripts.&lt;br /&gt;
Check with [[Software_Modules_Lmod#Module_specific_help | module help]] command, e.g. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module help chem/vasp     # display module help for VASP&lt;br /&gt;
$ module help math/matlab   # display module help for Matlab&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to harden job scripts against common errors? ==&lt;br /&gt;
&lt;br /&gt;
The bash shell provides several options that support users in disclosing hidden bugs and writing safer job scripts.&lt;br /&gt;
In order to activate these safeguard settings users can insert the following lines in their scripts (after all #SBATCH directives):    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
set -o errexit   # (or set -e) cause batch script to exit immediately when a command fails.&lt;br /&gt;
set -o pipefail  # cause batch script to exit immediately also when the command that failed is embedded in a pipeline&lt;br /&gt;
set -o nounset   # (or set -u) causes the script to treat unset variables as an error and exit immediately &lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to submit an interactive job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/salloc.html salloc] command, e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ salloc --nodes=1 --ntasks-per-node=8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
In previous Slurm versions &amp;lt; 20.11 the use of [https://slurm.schedmd.com/srun.html srun] has been the recommended way for launching interactive jobs, e.g.:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ srun --nodes=1 --ntasks-per-node=8 --pty bash &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although this still works with current Slurm versions this is considered &#039;&#039;&#039;deprecated &#039;&#039;&#039; for current Slurm versions as it may cause issues when launching additional jobs steps from within the interactive job environment. Use [https://slurm.schedmd.com/salloc.html salloc] command.&lt;br /&gt;
&lt;br /&gt;
== How to enable X11 forwarding for an interactive job? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--x11&#039; flag, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ salloc --nodes=1 --ntasks-per-node=8 --x11     # run shell with X11 forwarding enabled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
* For X11 forwarding to work, you must also enable X11 forwarding for your ssh login from your local computer to the cluster, i.e.:&lt;br /&gt;
 &amp;lt;pre&amp;gt;local&amp;gt; ssh -X &amp;lt;username&amp;gt;@justus2.uni-ulm.de&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to convert Moab batch job scripts to Slurm? ==&lt;br /&gt;
&lt;br /&gt;
Replace Moab/Torque job specification flags and environment variables in your job&lt;br /&gt;
scripts by their corresponding Slurm counterparts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commonly used Moab job specification flags and their Slurm equivalents&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| width=750px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Moab (msub) !! Slurm (sbatch)&lt;br /&gt;
|-&lt;br /&gt;
| Script directive                            || #MSUB                                  || #SBATCH&lt;br /&gt;
|-&lt;br /&gt;
| Job name                                    || -N &amp;lt;name&amp;gt;                              || --job-name=&amp;lt;name&amp;gt;  (-J &amp;lt;name&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Account                                     || -A &amp;lt;account&amp;gt;                           || --account=&amp;lt;account&amp;gt; (-A &amp;lt;account&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Queue                                       || -q &amp;lt;queue&amp;gt;                             || --partition=&amp;lt;partition&amp;gt; (-p &amp;lt;partition&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Wall time limit                             || -l walltime=&amp;lt;hh:mm:ss&amp;gt;                 || --time=&amp;lt;hh:mm:ss&amp;gt; (-t &amp;lt;hh:mm:ss&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Node count                                  || -l nodes=&amp;lt;count&amp;gt;                       || --nodes=&amp;lt;count&amp;gt; (-N &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Core count                                  || -l procs=&amp;lt;count&amp;gt;                       || --ntasks=&amp;lt;count&amp;gt; (-n &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Process count per node                      || -l ppn=&amp;lt;count&amp;gt;                         || --ntasks-per-node=&amp;lt;count&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Core count per process                      ||                                        || --cpus-per-task=&amp;lt;count&amp;gt; (-c &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Memory limit per node                       || -l mem=&amp;lt;limit&amp;gt;                         || --mem=&amp;lt;limit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Memory limit per process                    || -l pmem=&amp;lt;limit&amp;gt;                        || --mem-per-cpu=&amp;lt;limit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Job array                                   || -t &amp;lt;array indices&amp;gt;                     || --array=&amp;lt;indices&amp;gt; (-a &amp;lt;indices&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Node exclusive job                          || -l naccesspolicy=singlejob             || --exclusive&lt;br /&gt;
|-&lt;br /&gt;
| Initial working directory                   || -d &amp;lt;directory&amp;gt; (default: $HOME)        || --chdir=&amp;lt;directory&amp;gt; (-D &amp;lt;directory&amp;gt;) (default: submission directory)&lt;br /&gt;
|-&lt;br /&gt;
| Standard output file                        || -o &amp;lt;file path&amp;gt;                         || --output=&amp;lt;file&amp;gt; (-o &amp;lt;file&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Standard error file                         || -e &amp;lt;file path&amp;gt;                         || --error=&amp;lt;file&amp;gt;  (-e &amp;lt;file&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Combine stdout/stderr to stdout             || -j oe                                  || --output=&amp;lt;combined stdout/stderr file&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mail notification events                    || -m &amp;lt;event&amp;gt;                             || --mail-type=&amp;lt;events&amp;gt; (valid types include: NONE, BEGIN, END, FAIL, ALL)&lt;br /&gt;
|-&lt;br /&gt;
| Export environment to job                   || -V                                     || --export=ALL (default)&lt;br /&gt;
|-&lt;br /&gt;
| Don&#039;t export environment to job             || (default)                              || --export=NONE&lt;br /&gt;
|-&lt;br /&gt;
| Export environment variables to job         || -v &amp;lt;var[=value][,var2=value2[, ...]]&amp;gt;  || --export=&amp;lt;var[=value][,var2=value2[,...]]&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* Default initial job working directory is $HOME for Moab. For Slurm the default working directory is where you submit your job from.&lt;br /&gt;
* By default Moab does not export any environment variables to the job&#039;s runtime environment. With Slurm most of the login environment variables are exported to your job&#039;s runtime environment. This includes environment variables from software modules that were loaded at job submission time (and also $HOSTNAME variable).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commonly used Moab/Torque script environment variables and their Slurm equivalents&lt;br /&gt;
&lt;br /&gt;
{| width=750px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Information                 !! Moab                !! Torque               !! Slurm                                     &lt;br /&gt;
|-&lt;br /&gt;
| Job name                     || $MOAB_JOBNAME        || $PBS_JOBNAME        || $SLURM_JOB_NAME                           &lt;br /&gt;
|-&lt;br /&gt;
| Job ID                       || $MOAB_JOBID          || $PBS_JOBID          || $SLURM_JOB_ID                             &lt;br /&gt;
|-&lt;br /&gt;
| Submit directory             || $MOAB_SUBMITDIR      || $PBS_O_WORKDIR      || $SLURM_SUBMIT_DIR                         &lt;br /&gt;
|-&lt;br /&gt;
| Number of nodes allocated    || $MOAB_NODECOUNT      || $PBS_NUM_NODES      || $SLURM_JOB_NUM_NODES (and: $SLURM_NNODES) &lt;br /&gt;
|-&lt;br /&gt;
| Node list                    || $MOAB_NODELIST       || cat $PBS_NODEFILE   || $SLURM_JOB_NODELIST                       &lt;br /&gt;
|-&lt;br /&gt;
| Number of processes          || $MOAB_PROCCOUNT      || $PBS_TASKNUM        || $SLURM_NTASKS                             &lt;br /&gt;
|-&lt;br /&gt;
| Requested tasks per node     || ---                    || $PBS_NUM_PPN        || $SLURM_NTASKS_PER_NODE                    &lt;br /&gt;
|-&lt;br /&gt;
| Requested CPUs per task      || ---                  || ---                 || $SLURM_CPUS_PER_TASK                      &lt;br /&gt;
|-&lt;br /&gt;
| Job array index              || $MOAB_JOBARRAYINDEX  || $PBS_ARRAY_INDEX    || $SLURM_ARRAY_TASK_ID                      &lt;br /&gt;
|-&lt;br /&gt;
| Job array range              || $MOAB_JOBARRAYRANGE  || -                   || $SLURM_ARRAY_TASK_COUNT                   &lt;br /&gt;
|-&lt;br /&gt;
| Queue name                   || $MOAB_CLASS          || $PBS_QUEUE          || $SLURM_JOB_PARTITION                      &lt;br /&gt;
|-&lt;br /&gt;
| QOS name                     || $MOAB_QOS            || ---                 || $SLURM_JOB_QOS                            &lt;br /&gt;
|-&lt;br /&gt;
| Number of processes per node | ---                   || $PBS_NUM_PPN        || $SLURM_TASKS_PER_NODE                     &lt;br /&gt;
|-&lt;br /&gt;
| Job user                     || $MOAB_USER           || $PBS_O_LOGNAME      || $SLURM_JOB_USER                           &lt;br /&gt;
|-&lt;br /&gt;
| Hostname                     || $MOAB_MACHINE        || $PBS_O_HOST         || $SLURMD_NODENAME                          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* See [https://slurm.schedmd.com/sbatch.html sbatch] man page for a complete list of flags and environment variables.&lt;br /&gt;
&lt;br /&gt;
== How to emulate Moab output file names? ==&lt;br /&gt;
&lt;br /&gt;
Use the following directives:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --output=&amp;quot;%x.o%j&amp;quot;&lt;br /&gt;
#SBATCH --error=&amp;quot;%x.e%j&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to pass command line arguments to the job script? ==&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;pre&amp;gt;$ sbatch &amp;lt;job-script&amp;gt; arg1 arg2 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside the job script the arguments can be accessed as $1, $2, ...&lt;br /&gt;
&lt;br /&gt;
E.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
infile=&amp;quot;$1&amp;quot;&lt;br /&gt;
outfile=&amp;quot;$2&amp;quot;&lt;br /&gt;
./my_serial_program &amp;lt; &amp;quot;$infile&amp;quot; &amp;gt; &amp;quot;$outfile&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; use $1, $2, ... in &amp;quot;#SBATCH&amp;quot; lines. These parameters can be used only within the regular shell script.&lt;br /&gt;
&lt;br /&gt;
== How to request local scratch (SSD/NVMe) at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--gres=scratch:nnn&#039; option to allocate nnn GB of local (i.e. node-local) scratch space for the entire job.&lt;br /&gt;
&lt;br /&gt;
Example: &#039;--gres=scratch:100&#039; will allocate 100 GB scratch space on a locally attached NVMe device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; add any unit (such as --gres=scratch:100G). This would be treated as requesting an amount of 10^9 * 100GB of scratch space.&lt;br /&gt;
&lt;br /&gt;
* Multinode jobs get nnn GB of local scratch space on every node of the job.&lt;br /&gt;
&lt;br /&gt;
* Environment variable &#039;&#039;&#039;$SCRATCH&#039;&#039;&#039; will point to &lt;br /&gt;
** /scratch/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt; when local scratch has been requested. This will be on locally attached SSD/NVMe devices.&lt;br /&gt;
** /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt; when no local scratch has been requested. This will be in memory and, thus, be limited in size.&lt;br /&gt;
&lt;br /&gt;
* Environment variable &#039;&#039;&#039;$TMPDIR&#039;&#039;&#039; always points to /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt;. This will always be in memory and, thus, limited in size.&lt;br /&gt;
&lt;br /&gt;
* For backward compatibility environment variable $RAMDISK always points to /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Scratch space allocation in /scratch will be enforced by quota limits&lt;br /&gt;
&lt;br /&gt;
* Data written to $TMPDIR will always count against allocated memory.&lt;br /&gt;
&lt;br /&gt;
* Data written to local scratch space will automatically be removed at the end of the job.&lt;br /&gt;
&lt;br /&gt;
== How to request GPGPU nodes at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--gres=gpu:&amp;lt;count&amp;gt;&#039; option to allocate 1 or 2 GPUs per node for the entire job.&lt;br /&gt;
&lt;br /&gt;
Example: &#039;--gres=gpu:1&#039; will allocate one GPU per node for this job.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GPGPU nodes are equipped with two Nvidia V100S cards &lt;br /&gt;
&lt;br /&gt;
* Environment variables $CUDA_VISIBLE_DEVICES, $SLURM_JOB_GPUS and $GPU_DEVICE_ORDINAL will denote card(s) allocated for the job.&lt;br /&gt;
&lt;br /&gt;
* CUDA Toolkit is available as software module devel/cuda.&lt;br /&gt;
&lt;br /&gt;
== How to clean-up or save files before a job times out? ==&lt;br /&gt;
&lt;br /&gt;
Possibly you would like to clean up the work directory or save intermediate result files in case a job times out.&lt;br /&gt;
&lt;br /&gt;
The following sample script may serve as a blueprint for implementing a pre-termination function to perform clean-up or file recovery actions. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# 2 GB memory required per node&lt;br /&gt;
#SBATCH --mem=2G&lt;br /&gt;
# Request 10 GB local scratch space&lt;br /&gt;
#SBATCH --gres=scratch:10&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=10:00&lt;br /&gt;
# Send the USR1 signal 120 seconds before end of time limit&lt;br /&gt;
#SBATCH --signal=B:USR1@120&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=signal_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=signal_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=signal_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Define the signal handler function&lt;br /&gt;
# Note: This is not executed here, but rather when the associated &lt;br /&gt;
# signal is received by the shell.&lt;br /&gt;
finalize_job()&lt;br /&gt;
{&lt;br /&gt;
    # Do whatever cleanup you want here. In this example we copy&lt;br /&gt;
    # output file(s) back to $SLURM_SUBMIT_DIR, but you may implement &lt;br /&gt;
    # your own job finalization code here.&lt;br /&gt;
    echo &amp;quot;function finalize_job called at `date`&amp;quot;&lt;br /&gt;
    cd $SCRATCH&lt;br /&gt;
    mkdir -vp &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/results&lt;br /&gt;
    tar czvf &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/results/${SLURM_JOB_ID}.tgz output*.txt&lt;br /&gt;
    exit&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Call finalize_job function as soon as we receive USR1 signal&lt;br /&gt;
trap &#039;finalize_job&#039; USR1&lt;br /&gt;
&lt;br /&gt;
# Copy input files for this job to the scratch directory (if needed).&lt;br /&gt;
# Note: Environment variable $SCRATCH always points to a scratch directory &lt;br /&gt;
# automatically created for this job. Environment variable $SLURM_SUBMIT_DIR &lt;br /&gt;
# points to the path where this script was submitted from.&lt;br /&gt;
# Example:&lt;br /&gt;
# cp -v &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/input*.txt &amp;quot;$SCRATCH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Change working directory to local scratch directory&lt;br /&gt;
cd &amp;quot;$SCRATCH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# This is where the actual work is done. In this case we just create &lt;br /&gt;
# a sample output file for 900 (=15*60) seconds, but since we asked &lt;br /&gt;
# Slurm for 600 seconds only it will not be able finish within this &lt;br /&gt;
# wall time.&lt;br /&gt;
# Note: It is important to run this task in the background &lt;br /&gt;
# by placing the &amp;amp; symbol at the end. Otherwise the signal handler &lt;br /&gt;
# would not be executed until that process has finished, which is not &lt;br /&gt;
# what we want.&lt;br /&gt;
(for i in `seq 15`; do echo &amp;quot;Hello World at `date +%H:%M:%S`.&amp;quot;; sleep 60; done) &amp;gt;output.txt 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
# Note: The command above is just for illustration. Normally you would just run&lt;br /&gt;
# my_program &amp;gt;output.txt 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
# Tell the shell to wait for background task(s) to finish. &lt;br /&gt;
# Note: This is important because otherwise the parent shell &lt;br /&gt;
# (this script) would proceed (and terminate) without waiting for &lt;br /&gt;
# background task(s) to finish.&lt;br /&gt;
wait&lt;br /&gt;
&lt;br /&gt;
# If we get here, the job did not time out but finished in time.&lt;br /&gt;
&lt;br /&gt;
# Release user defined signal handler for USR1&lt;br /&gt;
trap - USR1&lt;br /&gt;
&lt;br /&gt;
# Do regular cleanup and save files. In this example we simply call &lt;br /&gt;
# the same function that we defined as a signal handler above, but you &lt;br /&gt;
# may implement your own code here. &lt;br /&gt;
finalize_job&lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The number of seconds specified in --signal option must match the runtime of the pre-termination function and must not exceed 65535 seconds.&lt;br /&gt;
&lt;br /&gt;
* Due to the resolution of event handling by Slurm, the signal may be sent a little earlier than specified.&lt;br /&gt;
&lt;br /&gt;
== How to submit a multithreaded batch job? ==&lt;br /&gt;
&lt;br /&gt;
Sample job script template for a job running one multithreaded program instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# Number of cores per program instance&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
# 8 GB memory required per node&lt;br /&gt;
#SBATCH --mem=8G&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=multithreaded_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=multithreaded_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=multithreaded_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
export MKL_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
&lt;br /&gt;
# Run multithreaded program&lt;br /&gt;
./my_multithreaded_program&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for multithreaded program: [[Media:Hello_openmp.c | Hello_openmp.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* In our configuration each physical core is considered a &amp;quot;CPU&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* On JUSTUS 2 it is recommended to specify a number of cores per task (&#039;--cpus-per-task&#039;) that is either an integer divisor of 24 or (at most) 48.&lt;br /&gt;
&lt;br /&gt;
* Required memory can also by specified per allocated CPU with &#039;--mem-per-cpu&#039; option. &lt;br /&gt;
&lt;br /&gt;
* The &#039;--mem&#039; and &#039;--mem-per-cpu&#039; options are mutually exclusive.&lt;br /&gt;
&lt;br /&gt;
==  How to submit an array job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_array -a] (or [https://slurm.schedmd.com/sbatch.html#OPT_array --array]) option, e.g. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -a 1-16%8 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will submit 16 tasks to be executed, each one indexed by SLURM_ARRAY_TASK_ID ranging from 1 to 16, but will limit the number of simultaneously running tasks from this job array to 8.&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an array job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Number of cores per individual array task&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --array=1-16%8&lt;br /&gt;
#SBATCH --mem=4G&lt;br /&gt;
#SBATCH --time=01:00:00&lt;br /&gt;
#SBATCH --job-name=array_job&lt;br /&gt;
#SBATCH --output=array_job-%A_%a.out&lt;br /&gt;
#SBATCH --error=array_job-%A_%a.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# Print the task id.&lt;br /&gt;
echo &amp;quot;My SLURM_ARRAY_TASK_ID: &amp;quot; $SLURM_ARRAY_TASK_ID&lt;br /&gt;
&lt;br /&gt;
# Add lines here to run your computations, e.g.&lt;br /&gt;
# ./my_program &amp;lt;input.$SLURM_ARRAY_TASK_ID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Placeholder %A will be replaced by the master job id, %a will be replaced by the array task id.&lt;br /&gt;
&lt;br /&gt;
* Every sub job in an array job will have its own unique environment variable $SLURM_JOB_ID. Environment variable $SLURM_ARRAY_JOB_ID  will be set to the first job array index value for all tasks.&lt;br /&gt;
&lt;br /&gt;
* The remaining options in the sample job script are the same as the options used in other, non-array jobs. In the example above, we are requesting that each array task be allocated 1 CPU (--ntasks=1) and 4 GB of memory (--mem=4G) for up to one hour (--time=01:00:00).&lt;br /&gt;
&lt;br /&gt;
* More information: https://slurm.schedmd.com/job_array.html&lt;br /&gt;
&lt;br /&gt;
== How to delay the start of a job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_begin -b] (or [https://slurm.schedmd.com/sbatch.html#OPT_begin --begin]) option in order to defer the allocation of the job until the specified time.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch --begin=20:00 ...               # job can start after 8 p.m. &lt;br /&gt;
sbatch --begin=now+1hour ...           # job can start 1 hour after submission&lt;br /&gt;
sbatch --begin=teatime ...             # job can start at teatime (4 p.m.)&lt;br /&gt;
sbatch --begin=2023-12-24T20:00:00 ... # job can start after specified date/time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to submit dependency (chain) jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_dependency -d] (or [https://slurm.schedmd.com/sbatch.html#OPT_dependency --dependency]) option, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -d afterany:123456 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will defer the submitted job until the specified job 123456 has terminated.&lt;br /&gt;
&lt;br /&gt;
Slurm supports a number of different dependency types, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-d after:123456      # job can begin execution after the specified job has begun execution&lt;br /&gt;
-d afterany:123456   # job can begin execution after the specified job has finished&lt;br /&gt;
-d afternotok:123456 # job can begin execution after the specified job has failed (exit code not equal zero)&lt;br /&gt;
-d afterok:123456    # job can begin execution after the specified job has successfully finished (exit code zero)&lt;br /&gt;
-d singleton         # job can begin execution after any previously job with the same job name and user have finished&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Multiple jobs can be specified by separating their job ids by colon characters (:), e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $ sbatch -d afterany:123456:123457 ... &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will defer the submitted job until the specified jobs 123456 and 123457 have both finished.&lt;br /&gt;
&lt;br /&gt;
== How to deal with invalid job dependencies? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_kill-on-invalid-dep --kill-on-invalid-dep=yes] option in order to automatically terminate jobs which can never run due to invalid dependencies. By default the job stays pending with reason &#039;DependencyNeverSatisfied&#039; to allow review and appropriate action by the user.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; A job dependency may also become invalid if a job has been submitted with &#039;-d afterok:&amp;lt;jobid&amp;gt;&#039; but the specified dependency job has failed, e.g. because it timed out (i.e. exceeded its wall time limit).&lt;br /&gt;
&lt;br /&gt;
== How to submit an MPI batch job? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/mpi_guide.html&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an MPI job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate two nodes&lt;br /&gt;
#SBATCH --nodes=2&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=48&lt;br /&gt;
# Allocate 32 GB memory per node&lt;br /&gt;
#SBATCH --mem=32gb&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=mpi_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=mpi_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=mpi_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Add lines here to run your computations, e.g.&lt;br /&gt;
#&lt;br /&gt;
# Option 1: Lauch MPI tasks by using mpirun&lt;br /&gt;
#&lt;br /&gt;
# for OpenMPI and GNU compiler:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/gnu&lt;br /&gt;
# module load mpi/openmpi&lt;br /&gt;
# mpirun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# for Intel MPI and Intel complier:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/intel&lt;br /&gt;
# module load mpi/impi&lt;br /&gt;
# mpirun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# Option 2: Launch MPI tasks by using srun&lt;br /&gt;
#&lt;br /&gt;
# for OpenMPI and GNU compiler:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/gnu&lt;br /&gt;
# module load mpi/openmpi&lt;br /&gt;
# srun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# for Intel MPI and Intel compiler:&lt;br /&gt;
#&lt;br /&gt;
module load compiler/intel&lt;br /&gt;
module load mpi/impi&lt;br /&gt;
srun  ./my_mpi_program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for MPI program: [[Media:Hello_mpi.c | Hello_mpi.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* SchedMD recommends to use srun and many (most?) sites do so as well. The rationale is that srun is more tightly integrated with the scheduler and provides more consistent and reliable resource tracking and accounting for individual jobs and job steps. mpirun may behave differently for different MPI implementations and versions. There are reports that claim &amp;quot;strange behavior&amp;quot; of mpirun especially when using task affinity and core binding. Using srun is supposed to resolve these issues and is therefore highly recommended.&lt;br /&gt;
* Do not run batch jobs that launch a large number (hundreds or thousands) short running (few minutes or less) MPI programs, e.g. from a shell loop. Every single MPI invocation does generate its own job step and sends remote procedure calls to the Slurm controller server. This can result in degradation of performance for both, Slurm and the application, especially if many of that jobs happen to run at the same time. Jobs of that kind can even get stuck without showing any further activity until hitting the wall time limit. For high throughput computing (e.g. processing a large number of files with every single task running independently from each other and very shortly), consider a more appropriate parallelization paradigm that invokes independent serial (non-MPI) processes in parallel at the same time. This approach is sometimes referred to as &amp;quot;[https://en.wikipedia.org/wiki/Embarrassingly_parallel pleasingly parallel]&amp;quot; workload. GNU Parallel is a shell tool that facilitates executing serial tasks in parallel. On JUSTUS 2 this tool is available as a software module &amp;quot;system/parallel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How to submit a hybrid MPI/OpenMP job? ==&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an hybrid job:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Number of nodes to allocate&lt;br /&gt;
#SBATCH --nodes=4&lt;br /&gt;
# Number of MPI instances (ranks) to be executed per node&lt;br /&gt;
#SBATCH --ntasks-per-node=2&lt;br /&gt;
# Number of threads per MPI instance&lt;br /&gt;
#SBATCH --cpus-per-task=24&lt;br /&gt;
# Allocate 8 GB memory per node&lt;br /&gt;
#SBATCH --mem=8gb&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=hybrid_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=hybrid_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=hybrid_job-%j.err&lt;br /&gt;
&lt;br /&gt;
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
export MKL_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
&lt;br /&gt;
module load compiler/intel&lt;br /&gt;
module load mpi/impi&lt;br /&gt;
srun ./my_hybrid_program&lt;br /&gt;
&lt;br /&gt;
# or:&lt;br /&gt;
# mpirun ./my_hybrid_program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for hybrid program: [[Media:Hello_hybrid.c | Hello_hybrid.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* $SLURM_CPUS_PER_TASK is only set if the &#039;--cpus-per-task&#039; option is specified.&lt;br /&gt;
&lt;br /&gt;
== How to request specific node(s) at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_nodelist -w] (or [https://slurm.schedmd.com/sbatch.html#OPT_nodelist --nodelist]) option, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -w &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also see [https://slurm.schedmd.com/sbatch.html#OPT_nodefile -F] (or [https://slurm.schedmd.com/sbatch.html#OPT_nodefile --nodefile]) option.&lt;br /&gt;
&lt;br /&gt;
== How to exclude specific nodes from job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_exclude -x] (or [https://slurm.schedmd.com/sbatch.html#OPT_exclude --exclude]) option, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -x &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get exclusive jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--exclusive&#039; option on job submission. This makes sure that there will be no other jobs running on your nodes. Very useful for benchmarking!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* --exclusive option does &#039;&#039;&#039;not&#039;&#039;&#039; mean that you automatically get full access to all the resources which the node might provide without explicitly requesting them.&lt;br /&gt;
&lt;br /&gt;
== How to avoid sharing nodes with other users? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--exclusive=user&#039; option on job submission. This will still allow multiple jobs of one and the same user on the nodes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Depending on configuration, exclusive=user may (and probably will) be the default node access policy on JUSTUS 2.&lt;br /&gt;
&lt;br /&gt;
==  How to submit batch job without job script? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_wrap --wrap] option.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch --nodes=2 --ntasks-per-node=16 --wrap &amp;quot;sleep 600&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; May be useful for testing purposes.&lt;br /&gt;
&lt;br /&gt;
= JOB MONITORING AND CONTROL =&lt;br /&gt;
&lt;br /&gt;
== How to prevent Slurm performance degradation? ==&lt;br /&gt;
&lt;br /&gt;
Almost every invocation of a Slurm client command (e.g. squeue, sacct, sprio or sshare) sends a remote procedure call (RPC) to the Slurm control daemon and/or database. &lt;br /&gt;
If enough remote procedure calls come in at once, this can result in a degradation of performance of the Slurm services for all users, possibly resulting in a denial of service. &lt;br /&gt;
&lt;br /&gt;
Therefore, &#039;&#039;&#039;do not run Slurm client commands that send remote procedure calls from loops in shell scripts or other programs&#039;&#039;&#039; (such as &#039;watch squeue&#039;). Always ensure to limit calls to squeue, sstat, sacct etc. to the minimum necessary for the information you are trying to gather. &lt;br /&gt;
&lt;br /&gt;
Slurm does collect RPC counts and timing statistics by message type and user for diagnostic purposes.&lt;br /&gt;
&lt;br /&gt;
== How to view information about submitted jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] command, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue                  # all jobs owned by user (all jobs owned by all users for admins)&lt;br /&gt;
$ squeue --me             # all jobs owned by user (same as squeue for regular users)&lt;br /&gt;
$ squeue -u &amp;lt;username&amp;gt;    # jobs of specific user&lt;br /&gt;
$ squeue -t PENDING       # pending jobs only&lt;br /&gt;
$ squeue -t RUNNING       # running jobs only&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* The output format of [https://slurm.schedmd.com/squeue.html squeue] (and most other Slurm commands) is highly configurable to your needs. Look for the --format or --Format options.&lt;br /&gt;
&lt;br /&gt;
* Every invocation of squeue sends a remote procedure call to the Slurm database server. &#039;&#039;&#039;Do not run squeue or other Slurm client commands from loops in shell scripts or other programs&#039;&#039;&#039; as this can result in a degradation of performance. Ensure that programs limit calls to squeue to the minimum necessary for the information you are trying to gather.&lt;br /&gt;
&lt;br /&gt;
== How to cancel jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/scancel.html scancel] command, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scancel &amp;lt;jobid&amp;gt;          # cancel specific job&lt;br /&gt;
$ scancel &amp;lt;jobid&amp;gt;_&amp;lt;index&amp;gt;  # cancel indexed job in a job array&lt;br /&gt;
$ scancel -u &amp;lt;username&amp;gt;    # cancel all jobs of specific user&lt;br /&gt;
$ scancel -u &amp;lt;username&amp;gt; -i # cancel all jobs of specific user interactively&lt;br /&gt;
$ scancel -t PENDING       # cancel pending jobs&lt;br /&gt;
$ scancel -t RUNNING       # cancel running jobs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to show job script of a running job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/scontrol.html scontrol] command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol write batch_script &amp;lt;job_id&amp;gt; &amp;lt;file&amp;gt;&lt;br /&gt;
$ scontrol write batch_script &amp;lt;job_id&amp;gt; -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If file name is omitted default file name will be slurm-&amp;lt;job_id&amp;gt;.sh&lt;br /&gt;
* If file name is - (i.e. dash) job script will be written to stdout.&lt;br /&gt;
&lt;br /&gt;
== How to get estimated start time of a job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ squeue --start&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* Estimated start times are dynamic and can change at any moment. Exact start times of individual jobs are usually unpredictable.&lt;br /&gt;
* Slurm will report N/A for the start time estimate if nodes are not currently being reserved by the scheduler for the job to run on.&lt;br /&gt;
&lt;br /&gt;
== How to show remaining walltime of running jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] with format option &amp;quot;%L&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $ squeue -t r -o &amp;quot;%u %i %L&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to check priority of jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] with format options &amp;quot;%Q&amp;quot; and/or &amp;quot;%p&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue -o &amp;quot;%8i %8u %15a %.10r %.10L %.5D %.10Q&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sprio.html sprio] command to display the priority components (age/fairshare/...) for each job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sprio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;[https://slurm.schedmd.com/sshare.html sshare] command for listing the shares of associations, e.g. accounts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sshare&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to prevent (hold) jobs from being scheduled for execution? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol hold &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to unhold job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol release &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to suspend a running job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol suspend &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to resume a suspended job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol resume &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to requeue (cancel and resubmit) a particular job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol requeue &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to monitor resource usage of running job(s)? ==&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;[https://slurm.schedmd.com/sstat.html sstat] command.&lt;br /&gt;
&lt;br /&gt;
&#039;sstat -e&#039; command shows a list of fields that can be specified with the &#039;--format&#039; option.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sstat --format=JobId,AveCPU,AveRSS,MaxRSS -j &amp;lt;jobid&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will show average CPU time, average and maximum memory consumption of all tasks in the running job.&lt;br /&gt;
Ideally, average CPU time equals the number of cores allocated for the job multiplied by the current run time of the job. &lt;br /&gt;
The maximum memory consumption gives an estimate of the peak amount of memory actually needed so far. This can be compared with the amount of memory requested for the job. Over-requesting memory can result in significant waste of compute resources.       &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Users can also ssh into compute nodes that they have one or more running jobs on. Once logged in, they can use standard Linux process monitoring tools like ps, (h)top, free, vmstat, iostat, du, ...&lt;br /&gt;
&lt;br /&gt;
* Users can also attach an interactive shell under an already allocated job by running the following command: &amp;lt;pre&amp;gt;srun --jobid &amp;lt;job&amp;gt; --overlap --pty /bin/bash&amp;lt;/pre&amp;gt; Once logged in, they can again use standard Linux process monitoring tools like ps, (h)top, free, vmstat, iostat, du, ... For a single node job the user does not even need to know the node that the job is running on. For a multinode job, the user can still use &#039;-w &amp;lt;node&amp;gt;&#039; option to specify a specific node.&lt;br /&gt;
&lt;br /&gt;
== How to get detailed job information ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show job 1234  # For job id 1234&lt;br /&gt;
$ scontrol show jobs      # For all jobs&lt;br /&gt;
$ scontrol -o show jobs   # One line per job&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to modify a pending/running job? ==&lt;br /&gt;
&lt;br /&gt;
Use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ scontrol update JobId=&amp;lt;jobid&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g.: &amp;lt;pre&amp;gt;$ scontrol update JobId=42 TimeLimit=7-0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will modify the time limit of the job to 7 days.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Update requests for &#039;&#039;&#039;running&#039;&#039;&#039; jobs are mostly restricted to Slurm administrators. In particular, only an administrator can increase the TimeLimit of a job.&lt;br /&gt;
&lt;br /&gt;
== How to show accounting data of completed jobs ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sacct.html sacct] command.&lt;br /&gt;
&lt;br /&gt;
&#039;sacct -e&#039; command shows a list of fields that can be&lt;br /&gt;
specified with the &#039;--format&#039; option.&lt;br /&gt;
&lt;br /&gt;
== How to retrieve job history and accounting ==&lt;br /&gt;
&lt;br /&gt;
For a specific job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -j &amp;lt;jobid&amp;gt; --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a specific user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Default time window is the current day.&lt;br /&gt;
&lt;br /&gt;
Starting from a specific date:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; -S 2020-01-15 --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within a time window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; -S 2020-01-15 -E 2020-01-31 --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
You can also set the environment variable $SACCT_FORMAT to specify the default format. To get a general idea of how efficiently a job utilized its resources, the following format can be used:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export SACCT_FORMAT=&amp;quot;JobID,JobName,Elapsed,NCPUs,TotalCPU,CPUTime,ReqMem,MaxRSS,MaxDiskRead,MaxDiskWrite,State,ExitCode&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To find how efficiently the CPUs were used, divide TotalCPU by CPUTime. To find how efficiently memory were used, devide MaxRSS by ReqMem. But be aware that sacct memory usage measurement doesn&#039;t catch very rapid memory spikes. If your job got killed for running out of memory, it &#039;&#039;&#039;did run out of memory&#039;&#039;&#039; even if sacct reports a lower memory usage than would trigger an out-of-memory-kill. A job that reads or writes excessively to disk might be bogged down significantly by I/O operations.&lt;br /&gt;
&lt;br /&gt;
== How to get efficiency information of completed job(s)? ==&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;pre&amp;gt;$ seff &amp;lt;jobid&amp;gt; &amp;lt;/pre&amp;gt; command for some brief information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; It is good practice to have a look at the efficiency of your job(s) on completion &#039;&#039;&#039;and we expect you to do so&#039;&#039;&#039;. This way you can improve your job specifications in the future.&lt;br /&gt;
&lt;br /&gt;
== How to get complete field values from sstat and sacct commands? ==&lt;br /&gt;
&lt;br /&gt;
When using the [https://slurm.schedmd.com/sacct.html#OPT_format --format] option for listing various fields you can put a %NUMBER afterwards to specify how many characters should be printed.&lt;br /&gt;
&lt;br /&gt;
E.g. &#039;--format=User%30&#039; will print 30 characters for the user name (right justified).  A %-30 will print 30 characters left justified.&lt;br /&gt;
&lt;br /&gt;
sstat and sacct also provide the &#039;--parsable&#039; and &#039;--parsable2&#039; option to always print full field values delimited with a pipe &#039;|&#039; character by default.&lt;br /&gt;
The delimiting character can be specified by using the &#039;--delimiter&#039; option, e.g. &#039;--delimiter=&amp;quot;,&amp;quot;&#039; for comma separated values.&lt;br /&gt;
&lt;br /&gt;
== How to retrieve job records for all jobs running/pending at a certain point in time ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sacct.html sacct] with [https://slurm.schedmd.com/sacct.html#OPT_state -s &amp;lt;state&amp;gt;] and [https://slurm.schedmd.com/sacct.html#OPT_starttime -S &amp;lt;start time&amp;gt;] options, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$  sacct -n -a -X -S 2021-04-01T00:00:00 -s R -o JobID,User%15,Account%10,NCPUS,NNodes,NodeList%1500&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; When specifying the state &amp;quot;-s &amp;lt;state&amp;gt;&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the start time &amp;quot;-S &amp;lt;start time&amp;gt;&amp;quot;, the default &lt;br /&gt;
time window will be set to end time &amp;quot;-E&amp;quot; equal to start time. Thus, you will get a snapshot of all running/pending &lt;br /&gt;
jobs at the instance given by &amp;quot;-S &amp;lt;start time&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How to get a parsable list of hostnames from $SLURM_JOB_NODELIST? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show hostnames $SLURM_JOB_NODELIST&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ADMINISTRATION =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Most commands in this section are restricted to system administrators.&lt;br /&gt;
&lt;br /&gt;
== How to stop Slurm from scheduling jobs? ==&lt;br /&gt;
&lt;br /&gt;
You can stop Slurm from scheduling jobs on a per partition basis by&lt;br /&gt;
setting that partition&#039;s state to DOWN. Set its state UP to resume&lt;br /&gt;
scheduling. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update PartitionName=foo State=DOWN&lt;br /&gt;
$ scontrol update PartitionName=foo State=UP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to print actual hardware configuration of a node? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ slurmd -C   # print hardware configuration plus uptime;  &lt;br /&gt;
$ slurmd -G   # print generic resource configuration;       to be run on compute nodes only&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to reboot (all) nodes as soon as they become idle? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol reboot ASAP nextstate=RESUME &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;  # specific nodes&lt;br /&gt;
$ scontrol reboot ASAP nextstate=RESUME ALL              # all nodes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to cancel pending reboot of nodes? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol cancel_reboot &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to check current node status? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show node &amp;lt;node&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to instruct all Slurm daemons to re-read the configuration file ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol reconfigure&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to prevent a user from submitting new jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use the following [https://slurm.schedmd.com/sacctmgr.html sacctmgr] command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr update user &amp;lt;username&amp;gt; set maxsubmitjobs=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Job submission is then rejected with the following message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch job.slurm&lt;br /&gt;
sbatch: error: AssocMaxSubmitJobLimit&lt;br /&gt;
sbatch: error: Batch job submission failed: Job violates accounting/QOS policy (job submit limit, user&#039;s size and/or time limits)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use the following command to release the limit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr update user &amp;lt;username&amp;gt; set maxsubmitjobs=-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to drain node(s)? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update NodeName=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; State=DRAIN Reason=&amp;quot;Some Reason&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Reason is mandatory.&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; just set state DOWN to drain nodes. This will kill any active jobs that may run on that nodes.&lt;br /&gt;
&lt;br /&gt;
== How to list reason for nodes being drained or down? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -R&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to resume node state? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update NodeName=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; State=RESUME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to create a reservation on nodes? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/reservations.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol create reservation user=root starttime=now duration=UNLIMITED flags=maint,ignore_jobs nodes=ALL&lt;br /&gt;
$ scontrol create reservation user=root starttime=2020-12-24T17:00 duration=12:00:00 flags=maint,ignore_jobs nodes=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
$ scontrol show reservation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Add &amp;quot;FLEX&amp;quot; flag to allow jobs that qualify for the reservation to start before the reservation begins (and continue after it starts). &lt;br /&gt;
Add &amp;quot;MAGNETIC&amp;quot; flag to attract jobs that qualify for the reservation to run in that reservation without having requested it at submit time.&lt;br /&gt;
&lt;br /&gt;
== How to create a floating reservation on nodes? ==&lt;br /&gt;
&lt;br /&gt;
Use the flag &amp;quot;TIME_FLOAT&amp;quot; and a start time that is relative to the current time (use the keyword &amp;quot;now&amp;quot;).&lt;br /&gt;
In the example below, the nodes are prevented from starting any jobs exceeding a walltime of 2 days.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol create reservation user=root starttime=now+2days duration=UNLIMITED flags=maint,ignore_jobs,time_float nodes=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Floating reservation are not intended to run jobs, but to prevent long running jobs from being initiated on specific nodes. Attempts by users to make use of a floating reservation will be rejected. When ready to perform the maintenance, place the nodes in DRAIN state and delete the reservation.&lt;br /&gt;
&lt;br /&gt;
== How to use a reservation? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch --reservation=foo_6 ... script.slurm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to delete a reservation? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol delete ReservationName=foo_6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get node oriented information similar to &#039;mdiag -n&#039;? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -N -l&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fields can be individually customized. See [https://slurm.schedmd.com/sinfo.html sinfo] man page. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -N --format=&amp;quot;%8N %12P %.4C %.8O %.6m %.6e %.8T %.20E&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NODELIST PARTITION    CPUS CPU_LOAD MEMORY FREE_M    STATE               REASON&lt;br /&gt;
n0001    standard*    0/16     0.01 128000 120445     idle                 none&lt;br /&gt;
n0002    standard*    0/16     0.01 128000 120438     idle                 none&lt;br /&gt;
n0003    standard*    0/0/      N/A 128000    N/A    down*       Not responding&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get node oriented information similar to &#039;pbsnodes&#039;? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show nodes                     # One paragraph per node (all nodes)&lt;br /&gt;
$ scontrol show nodes &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;     # One paragraph per node (specified nodes) &lt;br /&gt;
$ scontrol -o show nodes                  # One line per node (all nodes)&lt;br /&gt;
$ scontrol -o show nodes &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;  # One line per node (specified nodes)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to update multiple jobs of a user with a single scontrol command? ==&lt;br /&gt;
&lt;br /&gt;
Not possible. But you can e.g. use squeue to build the script taking&lt;br /&gt;
advantage of its filtering and formatting options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue -tpd -h -o &amp;quot;scontrol update jobid=%i priority=1000&amp;quot; &amp;gt;my.script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also identify the list of jobs and add them to the JobID all at once, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update JobID=123 qos=reallylargeqos&lt;br /&gt;
$ scontrol update JobID=123,456,789 qos=reallylargeqos&lt;br /&gt;
$ scontrol update JobID=[123-400],[500-600] qos=reallylargeqos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option is to use the JobName, if all the jobs have the same name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update JobName=&amp;quot;foobar&amp;quot; UserID=johndoe qos=reallylargeqos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, Slurm does not allow the UserID filter alone.&lt;br /&gt;
&lt;br /&gt;
== How to create a new account? ==&lt;br /&gt;
&lt;br /&gt;
Add account at top level in association tree:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add account &amp;lt;accountname&amp;gt; Cluster=justus Description=&amp;quot;Account description&amp;quot; Organization=&amp;quot;none&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add account as child of some parent account in association tree:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add account &amp;lt;accountname&amp;gt; parent=&amp;lt;parent_accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to move account to another parent? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify account name=&amp;lt;accountname&amp;gt; set parent=&amp;lt;new_parent_accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to delete an account? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr delete account name=&amp;lt;accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to add a new user? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; DefaultAccount=&amp;lt;accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to add/remove users from an account? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; account=&amp;lt;accountname&amp;gt;                  # Add user to account&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; account=&amp;lt;accountname2&amp;gt;                 # Add user to a second account&lt;br /&gt;
$ sacctmgr remove user &amp;lt;username&amp;gt; where account=&amp;lt;accountname&amp;gt;         # Remove user from this account&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to change default account of a user? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
$ sacctmgr modify user where user=&amp;lt;username&amp;gt; set DefaultAccount=&amp;lt;default_account&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The user must already be associated with the account you want to set as default.&lt;br /&gt;
&lt;br /&gt;
== How to show account information? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr show assoc&lt;br /&gt;
$ sacctmgr show assoc tree&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
* On JUSTUS 2 registered compute projects (&amp;quot;Rechenvorhaben&amp;quot;) are uniquely mapped to Slurm accounts of the same name.&lt;br /&gt;
&lt;br /&gt;
== How to implement user resource throttling policies? ==&lt;br /&gt;
&lt;br /&gt;
Quoting from https://bugs.schedmd.com/show_bug.cgi?id=3600#c4&lt;br /&gt;
&lt;br /&gt;
 With Slurm, the associations are meant to establish base limits on the&lt;br /&gt;
 defined partitions, accounts and users. Because limits propagate down&lt;br /&gt;
 through the association tree, you only need to define limits at a high&lt;br /&gt;
 level and those limits will be applied to all partitions, accounts and&lt;br /&gt;
 users that are below it (parent to child). You can also override those&lt;br /&gt;
 high level (parent) limits by explicitly setting different limits at&lt;br /&gt;
 any lower level (on the child). So using the association tree is the&lt;br /&gt;
 best way to get some base limits applied that you want for most cases. &lt;br /&gt;
 QOS&#039;s are meant to override any of those base limits for exceptional&lt;br /&gt;
 cases. Like Maui, you can use QOS&#039;s to set a different priority.&lt;br /&gt;
 Again, the QOS would be overriding the base priority that could be set&lt;br /&gt;
 in the associations.&lt;br /&gt;
&lt;br /&gt;
== How to set a resource limit for an individual user? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/resource_limits.html&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set maxjobs=1            # Limit maximum number of running jobs for user&lt;br /&gt;
$ sacctmgr list assoc user=&amp;lt;username&amp;gt; format=user,maxjobs  # Show that limit&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set maxjobs=-1           # Remove that limit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to retrieve historical resource usage for a specific user or account ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sreport.html sreport] command.&lt;br /&gt;
&lt;br /&gt;
Examples: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sreport cluster UserUtilizationByAccount Start=2021-01-01 End=2021-12-31 -t Hours user=&amp;lt;username&amp;gt;    # Report cluster utilization of given user broken down by accounts&lt;br /&gt;
$ sreport cluster AccountUtilizationByUser Start=2021-01-01 End=2021-12-31 -t Hours account=&amp;lt;account&amp;gt;  # Report cluster utilization of given account broken down by users    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* By default CPU resources will be reported. Use &#039;-T&#039; option for other trackable resources, e.g. &#039;-T cpu,mem,gres/gpu,gres/scratch&#039;.&lt;br /&gt;
* On JUSTUS 2 registered compute projects (&amp;quot;Rechenvorhaben&amp;quot;) are uniquely mapped to Slurm accounts of the same name. Thus, &#039;AccountUtilizationByUser&#039; can also be used to report the aggregated cluster utilization of compute projects.&lt;br /&gt;
* Can be executed by regular users as well in which case Slurm will only report their own usage records (but along with the total usage of the associated account in the case of &#039;AccountUtilizationByUser&#039;).&lt;br /&gt;
&lt;br /&gt;
== How to fix/reset a user&#039;s RawUsage value? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; where Account=&amp;lt;account&amp;gt; set RawUsage=&amp;lt;number&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to create/modify/delete QOSes? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/qos.html&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr show qos                                      # Show existing QOSes&lt;br /&gt;
$ sacctmgr add qos verylong                              # Create new QOS verylong&lt;br /&gt;
$ sacctmgr modify qos verylong set MaxWall=28-00:00:00   # Set maximum walltime limit&lt;br /&gt;
$ sacctmgr modify qos verylong set MaxTRESPerUser=cpu=4  # Set maximum maximum number of CPUS a user can allocate at a given time&lt;br /&gt;
$ sacctmgr modify qos verylong set flags=denyonlimit     # Prevent submission if job requests exceed any limits of QOS&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set qos+=verylong      # Add a QOS to a user account&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set qos-=verylong      # Remove a QOS from a user account&lt;br /&gt;
$ sacctmgr delete qos verylong                           # Delete that QOS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to find (and fix) runaway jobs? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sacctmgr show runaway&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* Runaway jobs are orphaned jobs that don&#039;t exist in the Slurm controller but have a start and no end time in the Slurm data base. Runaway jobs mess with accounting and affects new jobs of users who have too many runaway jobs. &lt;br /&gt;
* If there are jobs in this state this command will also provide an option to fix them. This will set the end time for each job to the latest out of the start, eligible, or submit times, and set the state to completed.&lt;br /&gt;
&lt;br /&gt;
== How to show a history of database transactions? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sacctmgr list transactions&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Useful to get timestamps for when a user/account/qos has been created/modified/removed etc.&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwForCluster_JUSTUS_2_Slurm_HOWTO&amp;diff=16425</id>
		<title>BwForCluster JUSTUS 2 Slurm HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwForCluster_JUSTUS_2_Slurm_HOWTO&amp;diff=16425"/>
		<updated>2026-09-17T12:24:00Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* How to retrieve job history and accounting? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Justus2}}&lt;br /&gt;
&lt;br /&gt;
This is a collection of howtos and convenient Slurm commands for JUSTUS 2.&lt;br /&gt;
&lt;br /&gt;
Some commands behave slightly different depending on whether they are executed &lt;br /&gt;
by a system administrator or by a regular user, as Slurm prevents regular users from accessing critical system information and viewing job and usage information of other users.  &lt;br /&gt;
&lt;br /&gt;
= GENERAL INFORMATION =&lt;br /&gt;
&lt;br /&gt;
== How to find a general quick start user guide? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/quickstart.html&lt;br /&gt;
&lt;br /&gt;
== How to find Slurm FAQ? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/faq.html&lt;br /&gt;
&lt;br /&gt;
== How to find a Slurm cheat sheet? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/pdfs/summary.pdf&lt;br /&gt;
&lt;br /&gt;
== How to find Slurm tutorials? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/tutorials.html&lt;br /&gt;
&lt;br /&gt;
== How to get more information on Slurm? ==&lt;br /&gt;
&lt;br /&gt;
(Almost) every Slurm command has a man page. Use it.&lt;br /&gt;
&lt;br /&gt;
Online versions: https://slurm.schedmd.com/man_index.html&lt;br /&gt;
&lt;br /&gt;
== How to find hardware specific details about JUSTUS 2? ==&lt;br /&gt;
&lt;br /&gt;
See our Wiki page: [[Hardware and Architecture (bwForCluster JUSTUS 2)|Hardware and Architecture]]&lt;br /&gt;
&lt;br /&gt;
= JOB SUBMISSION =&lt;br /&gt;
&lt;br /&gt;
== How to submit a serial batch job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html sbatch]  command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch &amp;lt;job-script&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample job script template for serial job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# 8 GB memory required per node&lt;br /&gt;
#SBATCH --mem=8G&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=serial_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=serial_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=serial_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# Run serial program&lt;br /&gt;
./my_serial_program&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for serial program: [[Media:Hello_serial.c | Hello_serial.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* --nodes=1 and --ntasks-per-node=1 may be replaced by --ntasks=1.&lt;br /&gt;
* If not specified, stdout and stderr are both written to slurm-%j.out.&lt;br /&gt;
&lt;br /&gt;
== How to find working sample scripts for my program? ==&lt;br /&gt;
&lt;br /&gt;
Most software modules for applications provide working sample batch scripts.&lt;br /&gt;
Check with [[Software_Modules_Lmod#Module_specific_help | module help]] command, e.g. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module help chem/vasp     # display module help for VASP&lt;br /&gt;
$ module help math/matlab   # display module help for Matlab&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to harden job scripts against common errors? ==&lt;br /&gt;
&lt;br /&gt;
The bash shell provides several options that support users in disclosing hidden bugs and writing safer job scripts.&lt;br /&gt;
In order to activate these safeguard settings users can insert the following lines in their scripts (after all #SBATCH directives):    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
set -o errexit   # (or set -e) cause batch script to exit immediately when a command fails.&lt;br /&gt;
set -o pipefail  # cause batch script to exit immediately also when the command that failed is embedded in a pipeline&lt;br /&gt;
set -o nounset   # (or set -u) causes the script to treat unset variables as an error and exit immediately &lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to submit an interactive job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/salloc.html salloc] command, e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ salloc --nodes=1 --ntasks-per-node=8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
In previous Slurm versions &amp;lt; 20.11 the use of [https://slurm.schedmd.com/srun.html srun] has been the recommended way for launching interactive jobs, e.g.:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ srun --nodes=1 --ntasks-per-node=8 --pty bash &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although this still works with current Slurm versions this is considered &#039;&#039;&#039;deprecated &#039;&#039;&#039; for current Slurm versions as it may cause issues when launching additional jobs steps from within the interactive job environment. Use [https://slurm.schedmd.com/salloc.html salloc] command.&lt;br /&gt;
&lt;br /&gt;
== How to enable X11 forwarding for an interactive job? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--x11&#039; flag, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ salloc --nodes=1 --ntasks-per-node=8 --x11     # run shell with X11 forwarding enabled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
* For X11 forwarding to work, you must also enable X11 forwarding for your ssh login from your local computer to the cluster, i.e.:&lt;br /&gt;
 &amp;lt;pre&amp;gt;local&amp;gt; ssh -X &amp;lt;username&amp;gt;@justus2.uni-ulm.de&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to convert Moab batch job scripts to Slurm? ==&lt;br /&gt;
&lt;br /&gt;
Replace Moab/Torque job specification flags and environment variables in your job&lt;br /&gt;
scripts by their corresponding Slurm counterparts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commonly used Moab job specification flags and their Slurm equivalents&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| width=750px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Moab (msub) !! Slurm (sbatch)&lt;br /&gt;
|-&lt;br /&gt;
| Script directive                            || #MSUB                                  || #SBATCH&lt;br /&gt;
|-&lt;br /&gt;
| Job name                                    || -N &amp;lt;name&amp;gt;                              || --job-name=&amp;lt;name&amp;gt;  (-J &amp;lt;name&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Account                                     || -A &amp;lt;account&amp;gt;                           || --account=&amp;lt;account&amp;gt; (-A &amp;lt;account&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Queue                                       || -q &amp;lt;queue&amp;gt;                             || --partition=&amp;lt;partition&amp;gt; (-p &amp;lt;partition&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Wall time limit                             || -l walltime=&amp;lt;hh:mm:ss&amp;gt;                 || --time=&amp;lt;hh:mm:ss&amp;gt; (-t &amp;lt;hh:mm:ss&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Node count                                  || -l nodes=&amp;lt;count&amp;gt;                       || --nodes=&amp;lt;count&amp;gt; (-N &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Core count                                  || -l procs=&amp;lt;count&amp;gt;                       || --ntasks=&amp;lt;count&amp;gt; (-n &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Process count per node                      || -l ppn=&amp;lt;count&amp;gt;                         || --ntasks-per-node=&amp;lt;count&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Core count per process                      ||                                        || --cpus-per-task=&amp;lt;count&amp;gt; (-c &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Memory limit per node                       || -l mem=&amp;lt;limit&amp;gt;                         || --mem=&amp;lt;limit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Memory limit per process                    || -l pmem=&amp;lt;limit&amp;gt;                        || --mem-per-cpu=&amp;lt;limit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Job array                                   || -t &amp;lt;array indices&amp;gt;                     || --array=&amp;lt;indices&amp;gt; (-a &amp;lt;indices&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Node exclusive job                          || -l naccesspolicy=singlejob             || --exclusive&lt;br /&gt;
|-&lt;br /&gt;
| Initial working directory                   || -d &amp;lt;directory&amp;gt; (default: $HOME)        || --chdir=&amp;lt;directory&amp;gt; (-D &amp;lt;directory&amp;gt;) (default: submission directory)&lt;br /&gt;
|-&lt;br /&gt;
| Standard output file                        || -o &amp;lt;file path&amp;gt;                         || --output=&amp;lt;file&amp;gt; (-o &amp;lt;file&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Standard error file                         || -e &amp;lt;file path&amp;gt;                         || --error=&amp;lt;file&amp;gt;  (-e &amp;lt;file&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Combine stdout/stderr to stdout             || -j oe                                  || --output=&amp;lt;combined stdout/stderr file&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mail notification events                    || -m &amp;lt;event&amp;gt;                             || --mail-type=&amp;lt;events&amp;gt; (valid types include: NONE, BEGIN, END, FAIL, ALL)&lt;br /&gt;
|-&lt;br /&gt;
| Export environment to job                   || -V                                     || --export=ALL (default)&lt;br /&gt;
|-&lt;br /&gt;
| Don&#039;t export environment to job             || (default)                              || --export=NONE&lt;br /&gt;
|-&lt;br /&gt;
| Export environment variables to job         || -v &amp;lt;var[=value][,var2=value2[, ...]]&amp;gt;  || --export=&amp;lt;var[=value][,var2=value2[,...]]&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* Default initial job working directory is $HOME for Moab. For Slurm the default working directory is where you submit your job from.&lt;br /&gt;
* By default Moab does not export any environment variables to the job&#039;s runtime environment. With Slurm most of the login environment variables are exported to your job&#039;s runtime environment. This includes environment variables from software modules that were loaded at job submission time (and also $HOSTNAME variable).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commonly used Moab/Torque script environment variables and their Slurm equivalents&lt;br /&gt;
&lt;br /&gt;
{| width=750px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Information                 !! Moab                !! Torque               !! Slurm                                     &lt;br /&gt;
|-&lt;br /&gt;
| Job name                     || $MOAB_JOBNAME        || $PBS_JOBNAME        || $SLURM_JOB_NAME                           &lt;br /&gt;
|-&lt;br /&gt;
| Job ID                       || $MOAB_JOBID          || $PBS_JOBID          || $SLURM_JOB_ID                             &lt;br /&gt;
|-&lt;br /&gt;
| Submit directory             || $MOAB_SUBMITDIR      || $PBS_O_WORKDIR      || $SLURM_SUBMIT_DIR                         &lt;br /&gt;
|-&lt;br /&gt;
| Number of nodes allocated    || $MOAB_NODECOUNT      || $PBS_NUM_NODES      || $SLURM_JOB_NUM_NODES (and: $SLURM_NNODES) &lt;br /&gt;
|-&lt;br /&gt;
| Node list                    || $MOAB_NODELIST       || cat $PBS_NODEFILE   || $SLURM_JOB_NODELIST                       &lt;br /&gt;
|-&lt;br /&gt;
| Number of processes          || $MOAB_PROCCOUNT      || $PBS_TASKNUM        || $SLURM_NTASKS                             &lt;br /&gt;
|-&lt;br /&gt;
| Requested tasks per node     || ---                    || $PBS_NUM_PPN        || $SLURM_NTASKS_PER_NODE                    &lt;br /&gt;
|-&lt;br /&gt;
| Requested CPUs per task      || ---                  || ---                 || $SLURM_CPUS_PER_TASK                      &lt;br /&gt;
|-&lt;br /&gt;
| Job array index              || $MOAB_JOBARRAYINDEX  || $PBS_ARRAY_INDEX    || $SLURM_ARRAY_TASK_ID                      &lt;br /&gt;
|-&lt;br /&gt;
| Job array range              || $MOAB_JOBARRAYRANGE  || -                   || $SLURM_ARRAY_TASK_COUNT                   &lt;br /&gt;
|-&lt;br /&gt;
| Queue name                   || $MOAB_CLASS          || $PBS_QUEUE          || $SLURM_JOB_PARTITION                      &lt;br /&gt;
|-&lt;br /&gt;
| QOS name                     || $MOAB_QOS            || ---                 || $SLURM_JOB_QOS                            &lt;br /&gt;
|-&lt;br /&gt;
| Number of processes per node | ---                   || $PBS_NUM_PPN        || $SLURM_TASKS_PER_NODE                     &lt;br /&gt;
|-&lt;br /&gt;
| Job user                     || $MOAB_USER           || $PBS_O_LOGNAME      || $SLURM_JOB_USER                           &lt;br /&gt;
|-&lt;br /&gt;
| Hostname                     || $MOAB_MACHINE        || $PBS_O_HOST         || $SLURMD_NODENAME                          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* See [https://slurm.schedmd.com/sbatch.html sbatch] man page for a complete list of flags and environment variables.&lt;br /&gt;
&lt;br /&gt;
== How to emulate Moab output file names? ==&lt;br /&gt;
&lt;br /&gt;
Use the following directives:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --output=&amp;quot;%x.o%j&amp;quot;&lt;br /&gt;
#SBATCH --error=&amp;quot;%x.e%j&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to pass command line arguments to the job script? ==&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;pre&amp;gt;$ sbatch &amp;lt;job-script&amp;gt; arg1 arg2 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside the job script the arguments can be accessed as $1, $2, ...&lt;br /&gt;
&lt;br /&gt;
E.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
infile=&amp;quot;$1&amp;quot;&lt;br /&gt;
outfile=&amp;quot;$2&amp;quot;&lt;br /&gt;
./my_serial_program &amp;lt; &amp;quot;$infile&amp;quot; &amp;gt; &amp;quot;$outfile&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; use $1, $2, ... in &amp;quot;#SBATCH&amp;quot; lines. These parameters can be used only within the regular shell script.&lt;br /&gt;
&lt;br /&gt;
== How to request local scratch (SSD/NVMe) at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--gres=scratch:nnn&#039; option to allocate nnn GB of local (i.e. node-local) scratch space for the entire job.&lt;br /&gt;
&lt;br /&gt;
Example: &#039;--gres=scratch:100&#039; will allocate 100 GB scratch space on a locally attached NVMe device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; add any unit (such as --gres=scratch:100G). This would be treated as requesting an amount of 10^9 * 100GB of scratch space.&lt;br /&gt;
&lt;br /&gt;
* Multinode jobs get nnn GB of local scratch space on every node of the job.&lt;br /&gt;
&lt;br /&gt;
* Environment variable &#039;&#039;&#039;$SCRATCH&#039;&#039;&#039; will point to &lt;br /&gt;
** /scratch/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt; when local scratch has been requested. This will be on locally attached SSD/NVMe devices.&lt;br /&gt;
** /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt; when no local scratch has been requested. This will be in memory and, thus, be limited in size.&lt;br /&gt;
&lt;br /&gt;
* Environment variable &#039;&#039;&#039;$TMPDIR&#039;&#039;&#039; always points to /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt;. This will always be in memory and, thus, limited in size.&lt;br /&gt;
&lt;br /&gt;
* For backward compatibility environment variable $RAMDISK always points to /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Scratch space allocation in /scratch will be enforced by quota limits&lt;br /&gt;
&lt;br /&gt;
* Data written to $TMPDIR will always count against allocated memory.&lt;br /&gt;
&lt;br /&gt;
* Data written to local scratch space will automatically be removed at the end of the job.&lt;br /&gt;
&lt;br /&gt;
== How to request GPGPU nodes at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--gres=gpu:&amp;lt;count&amp;gt;&#039; option to allocate 1 or 2 GPUs per node for the entire job.&lt;br /&gt;
&lt;br /&gt;
Example: &#039;--gres=gpu:1&#039; will allocate one GPU per node for this job.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GPGPU nodes are equipped with two Nvidia V100S cards &lt;br /&gt;
&lt;br /&gt;
* Environment variables $CUDA_VISIBLE_DEVICES, $SLURM_JOB_GPUS and $GPU_DEVICE_ORDINAL will denote card(s) allocated for the job.&lt;br /&gt;
&lt;br /&gt;
* CUDA Toolkit is available as software module devel/cuda.&lt;br /&gt;
&lt;br /&gt;
== How to clean-up or save files before a job times out? ==&lt;br /&gt;
&lt;br /&gt;
Possibly you would like to clean up the work directory or save intermediate result files in case a job times out.&lt;br /&gt;
&lt;br /&gt;
The following sample script may serve as a blueprint for implementing a pre-termination function to perform clean-up or file recovery actions. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# 2 GB memory required per node&lt;br /&gt;
#SBATCH --mem=2G&lt;br /&gt;
# Request 10 GB local scratch space&lt;br /&gt;
#SBATCH --gres=scratch:10&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=10:00&lt;br /&gt;
# Send the USR1 signal 120 seconds before end of time limit&lt;br /&gt;
#SBATCH --signal=B:USR1@120&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=signal_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=signal_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=signal_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Define the signal handler function&lt;br /&gt;
# Note: This is not executed here, but rather when the associated &lt;br /&gt;
# signal is received by the shell.&lt;br /&gt;
finalize_job()&lt;br /&gt;
{&lt;br /&gt;
    # Do whatever cleanup you want here. In this example we copy&lt;br /&gt;
    # output file(s) back to $SLURM_SUBMIT_DIR, but you may implement &lt;br /&gt;
    # your own job finalization code here.&lt;br /&gt;
    echo &amp;quot;function finalize_job called at `date`&amp;quot;&lt;br /&gt;
    cd $SCRATCH&lt;br /&gt;
    mkdir -vp &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/results&lt;br /&gt;
    tar czvf &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/results/${SLURM_JOB_ID}.tgz output*.txt&lt;br /&gt;
    exit&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Call finalize_job function as soon as we receive USR1 signal&lt;br /&gt;
trap &#039;finalize_job&#039; USR1&lt;br /&gt;
&lt;br /&gt;
# Copy input files for this job to the scratch directory (if needed).&lt;br /&gt;
# Note: Environment variable $SCRATCH always points to a scratch directory &lt;br /&gt;
# automatically created for this job. Environment variable $SLURM_SUBMIT_DIR &lt;br /&gt;
# points to the path where this script was submitted from.&lt;br /&gt;
# Example:&lt;br /&gt;
# cp -v &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/input*.txt &amp;quot;$SCRATCH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Change working directory to local scratch directory&lt;br /&gt;
cd &amp;quot;$SCRATCH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# This is where the actual work is done. In this case we just create &lt;br /&gt;
# a sample output file for 900 (=15*60) seconds, but since we asked &lt;br /&gt;
# Slurm for 600 seconds only it will not be able finish within this &lt;br /&gt;
# wall time.&lt;br /&gt;
# Note: It is important to run this task in the background &lt;br /&gt;
# by placing the &amp;amp; symbol at the end. Otherwise the signal handler &lt;br /&gt;
# would not be executed until that process has finished, which is not &lt;br /&gt;
# what we want.&lt;br /&gt;
(for i in `seq 15`; do echo &amp;quot;Hello World at `date +%H:%M:%S`.&amp;quot;; sleep 60; done) &amp;gt;output.txt 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
# Note: The command above is just for illustration. Normally you would just run&lt;br /&gt;
# my_program &amp;gt;output.txt 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
# Tell the shell to wait for background task(s) to finish. &lt;br /&gt;
# Note: This is important because otherwise the parent shell &lt;br /&gt;
# (this script) would proceed (and terminate) without waiting for &lt;br /&gt;
# background task(s) to finish.&lt;br /&gt;
wait&lt;br /&gt;
&lt;br /&gt;
# If we get here, the job did not time out but finished in time.&lt;br /&gt;
&lt;br /&gt;
# Release user defined signal handler for USR1&lt;br /&gt;
trap - USR1&lt;br /&gt;
&lt;br /&gt;
# Do regular cleanup and save files. In this example we simply call &lt;br /&gt;
# the same function that we defined as a signal handler above, but you &lt;br /&gt;
# may implement your own code here. &lt;br /&gt;
finalize_job&lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The number of seconds specified in --signal option must match the runtime of the pre-termination function and must not exceed 65535 seconds.&lt;br /&gt;
&lt;br /&gt;
* Due to the resolution of event handling by Slurm, the signal may be sent a little earlier than specified.&lt;br /&gt;
&lt;br /&gt;
== How to submit a multithreaded batch job? ==&lt;br /&gt;
&lt;br /&gt;
Sample job script template for a job running one multithreaded program instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# Number of cores per program instance&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
# 8 GB memory required per node&lt;br /&gt;
#SBATCH --mem=8G&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=multithreaded_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=multithreaded_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=multithreaded_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
export MKL_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
&lt;br /&gt;
# Run multithreaded program&lt;br /&gt;
./my_multithreaded_program&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for multithreaded program: [[Media:Hello_openmp.c | Hello_openmp.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* In our configuration each physical core is considered a &amp;quot;CPU&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* On JUSTUS 2 it is recommended to specify a number of cores per task (&#039;--cpus-per-task&#039;) that is either an integer divisor of 24 or (at most) 48.&lt;br /&gt;
&lt;br /&gt;
* Required memory can also by specified per allocated CPU with &#039;--mem-per-cpu&#039; option. &lt;br /&gt;
&lt;br /&gt;
* The &#039;--mem&#039; and &#039;--mem-per-cpu&#039; options are mutually exclusive.&lt;br /&gt;
&lt;br /&gt;
==  How to submit an array job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_array -a] (or [https://slurm.schedmd.com/sbatch.html#OPT_array --array]) option, e.g. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -a 1-16%8 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will submit 16 tasks to be executed, each one indexed by SLURM_ARRAY_TASK_ID ranging from 1 to 16, but will limit the number of simultaneously running tasks from this job array to 8.&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an array job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Number of cores per individual array task&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --array=1-16%8&lt;br /&gt;
#SBATCH --mem=4G&lt;br /&gt;
#SBATCH --time=01:00:00&lt;br /&gt;
#SBATCH --job-name=array_job&lt;br /&gt;
#SBATCH --output=array_job-%A_%a.out&lt;br /&gt;
#SBATCH --error=array_job-%A_%a.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# Print the task id.&lt;br /&gt;
echo &amp;quot;My SLURM_ARRAY_TASK_ID: &amp;quot; $SLURM_ARRAY_TASK_ID&lt;br /&gt;
&lt;br /&gt;
# Add lines here to run your computations, e.g.&lt;br /&gt;
# ./my_program &amp;lt;input.$SLURM_ARRAY_TASK_ID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Placeholder %A will be replaced by the master job id, %a will be replaced by the array task id.&lt;br /&gt;
&lt;br /&gt;
* Every sub job in an array job will have its own unique environment variable $SLURM_JOB_ID. Environment variable $SLURM_ARRAY_JOB_ID  will be set to the first job array index value for all tasks.&lt;br /&gt;
&lt;br /&gt;
* The remaining options in the sample job script are the same as the options used in other, non-array jobs. In the example above, we are requesting that each array task be allocated 1 CPU (--ntasks=1) and 4 GB of memory (--mem=4G) for up to one hour (--time=01:00:00).&lt;br /&gt;
&lt;br /&gt;
* More information: https://slurm.schedmd.com/job_array.html&lt;br /&gt;
&lt;br /&gt;
== How to delay the start of a job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_begin -b] (or [https://slurm.schedmd.com/sbatch.html#OPT_begin --begin]) option in order to defer the allocation of the job until the specified time.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch --begin=20:00 ...               # job can start after 8 p.m. &lt;br /&gt;
sbatch --begin=now+1hour ...           # job can start 1 hour after submission&lt;br /&gt;
sbatch --begin=teatime ...             # job can start at teatime (4 p.m.)&lt;br /&gt;
sbatch --begin=2023-12-24T20:00:00 ... # job can start after specified date/time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to submit dependency (chain) jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_dependency -d] (or [https://slurm.schedmd.com/sbatch.html#OPT_dependency --dependency]) option, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -d afterany:123456 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will defer the submitted job until the specified job 123456 has terminated.&lt;br /&gt;
&lt;br /&gt;
Slurm supports a number of different dependency types, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-d after:123456      # job can begin execution after the specified job has begun execution&lt;br /&gt;
-d afterany:123456   # job can begin execution after the specified job has finished&lt;br /&gt;
-d afternotok:123456 # job can begin execution after the specified job has failed (exit code not equal zero)&lt;br /&gt;
-d afterok:123456    # job can begin execution after the specified job has successfully finished (exit code zero)&lt;br /&gt;
-d singleton         # job can begin execution after any previously job with the same job name and user have finished&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Multiple jobs can be specified by separating their job ids by colon characters (:), e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $ sbatch -d afterany:123456:123457 ... &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will defer the submitted job until the specified jobs 123456 and 123457 have both finished.&lt;br /&gt;
&lt;br /&gt;
== How to deal with invalid job dependencies? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_kill-on-invalid-dep --kill-on-invalid-dep=yes] option in order to automatically terminate jobs which can never run due to invalid dependencies. By default the job stays pending with reason &#039;DependencyNeverSatisfied&#039; to allow review and appropriate action by the user.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; A job dependency may also become invalid if a job has been submitted with &#039;-d afterok:&amp;lt;jobid&amp;gt;&#039; but the specified dependency job has failed, e.g. because it timed out (i.e. exceeded its wall time limit).&lt;br /&gt;
&lt;br /&gt;
== How to submit an MPI batch job? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/mpi_guide.html&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an MPI job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate two nodes&lt;br /&gt;
#SBATCH --nodes=2&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=48&lt;br /&gt;
# Allocate 32 GB memory per node&lt;br /&gt;
#SBATCH --mem=32gb&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=mpi_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=mpi_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=mpi_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Add lines here to run your computations, e.g.&lt;br /&gt;
#&lt;br /&gt;
# Option 1: Lauch MPI tasks by using mpirun&lt;br /&gt;
#&lt;br /&gt;
# for OpenMPI and GNU compiler:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/gnu&lt;br /&gt;
# module load mpi/openmpi&lt;br /&gt;
# mpirun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# for Intel MPI and Intel complier:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/intel&lt;br /&gt;
# module load mpi/impi&lt;br /&gt;
# mpirun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# Option 2: Launch MPI tasks by using srun&lt;br /&gt;
#&lt;br /&gt;
# for OpenMPI and GNU compiler:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/gnu&lt;br /&gt;
# module load mpi/openmpi&lt;br /&gt;
# srun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# for Intel MPI and Intel compiler:&lt;br /&gt;
#&lt;br /&gt;
module load compiler/intel&lt;br /&gt;
module load mpi/impi&lt;br /&gt;
srun  ./my_mpi_program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for MPI program: [[Media:Hello_mpi.c | Hello_mpi.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* SchedMD recommends to use srun and many (most?) sites do so as well. The rationale is that srun is more tightly integrated with the scheduler and provides more consistent and reliable resource tracking and accounting for individual jobs and job steps. mpirun may behave differently for different MPI implementations and versions. There are reports that claim &amp;quot;strange behavior&amp;quot; of mpirun especially when using task affinity and core binding. Using srun is supposed to resolve these issues and is therefore highly recommended.&lt;br /&gt;
* Do not run batch jobs that launch a large number (hundreds or thousands) short running (few minutes or less) MPI programs, e.g. from a shell loop. Every single MPI invocation does generate its own job step and sends remote procedure calls to the Slurm controller server. This can result in degradation of performance for both, Slurm and the application, especially if many of that jobs happen to run at the same time. Jobs of that kind can even get stuck without showing any further activity until hitting the wall time limit. For high throughput computing (e.g. processing a large number of files with every single task running independently from each other and very shortly), consider a more appropriate parallelization paradigm that invokes independent serial (non-MPI) processes in parallel at the same time. This approach is sometimes referred to as &amp;quot;[https://en.wikipedia.org/wiki/Embarrassingly_parallel pleasingly parallel]&amp;quot; workload. GNU Parallel is a shell tool that facilitates executing serial tasks in parallel. On JUSTUS 2 this tool is available as a software module &amp;quot;system/parallel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How to submit a hybrid MPI/OpenMP job? ==&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an hybrid job:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Number of nodes to allocate&lt;br /&gt;
#SBATCH --nodes=4&lt;br /&gt;
# Number of MPI instances (ranks) to be executed per node&lt;br /&gt;
#SBATCH --ntasks-per-node=2&lt;br /&gt;
# Number of threads per MPI instance&lt;br /&gt;
#SBATCH --cpus-per-task=24&lt;br /&gt;
# Allocate 8 GB memory per node&lt;br /&gt;
#SBATCH --mem=8gb&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=hybrid_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=hybrid_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=hybrid_job-%j.err&lt;br /&gt;
&lt;br /&gt;
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
export MKL_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
&lt;br /&gt;
module load compiler/intel&lt;br /&gt;
module load mpi/impi&lt;br /&gt;
srun ./my_hybrid_program&lt;br /&gt;
&lt;br /&gt;
# or:&lt;br /&gt;
# mpirun ./my_hybrid_program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for hybrid program: [[Media:Hello_hybrid.c | Hello_hybrid.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* $SLURM_CPUS_PER_TASK is only set if the &#039;--cpus-per-task&#039; option is specified.&lt;br /&gt;
&lt;br /&gt;
== How to request specific node(s) at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_nodelist -w] (or [https://slurm.schedmd.com/sbatch.html#OPT_nodelist --nodelist]) option, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -w &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also see [https://slurm.schedmd.com/sbatch.html#OPT_nodefile -F] (or [https://slurm.schedmd.com/sbatch.html#OPT_nodefile --nodefile]) option.&lt;br /&gt;
&lt;br /&gt;
== How to exclude specific nodes from job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_exclude -x] (or [https://slurm.schedmd.com/sbatch.html#OPT_exclude --exclude]) option, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -x &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get exclusive jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--exclusive&#039; option on job submission. This makes sure that there will be no other jobs running on your nodes. Very useful for benchmarking!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* --exclusive option does &#039;&#039;&#039;not&#039;&#039;&#039; mean that you automatically get full access to all the resources which the node might provide without explicitly requesting them.&lt;br /&gt;
&lt;br /&gt;
== How to avoid sharing nodes with other users? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--exclusive=user&#039; option on job submission. This will still allow multiple jobs of one and the same user on the nodes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Depending on configuration, exclusive=user may (and probably will) be the default node access policy on JUSTUS 2.&lt;br /&gt;
&lt;br /&gt;
==  How to submit batch job without job script? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_wrap --wrap] option.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch --nodes=2 --ntasks-per-node=16 --wrap &amp;quot;sleep 600&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; May be useful for testing purposes.&lt;br /&gt;
&lt;br /&gt;
= JOB MONITORING AND CONTROL =&lt;br /&gt;
&lt;br /&gt;
== How to prevent Slurm performance degradation? ==&lt;br /&gt;
&lt;br /&gt;
Almost every invocation of a Slurm client command (e.g. squeue, sacct, sprio or sshare) sends a remote procedure call (RPC) to the Slurm control daemon and/or database. &lt;br /&gt;
If enough remote procedure calls come in at once, this can result in a degradation of performance of the Slurm services for all users, possibly resulting in a denial of service. &lt;br /&gt;
&lt;br /&gt;
Therefore, &#039;&#039;&#039;do not run Slurm client commands that send remote procedure calls from loops in shell scripts or other programs&#039;&#039;&#039; (such as &#039;watch squeue&#039;). Always ensure to limit calls to squeue, sstat, sacct etc. to the minimum necessary for the information you are trying to gather. &lt;br /&gt;
&lt;br /&gt;
Slurm does collect RPC counts and timing statistics by message type and user for diagnostic purposes.&lt;br /&gt;
&lt;br /&gt;
== How to view information about submitted jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] command, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue                  # all jobs owned by user (all jobs owned by all users for admins)&lt;br /&gt;
$ squeue --me             # all jobs owned by user (same as squeue for regular users)&lt;br /&gt;
$ squeue -u &amp;lt;username&amp;gt;    # jobs of specific user&lt;br /&gt;
$ squeue -t PENDING       # pending jobs only&lt;br /&gt;
$ squeue -t RUNNING       # running jobs only&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* The output format of [https://slurm.schedmd.com/squeue.html squeue] (and most other Slurm commands) is highly configurable to your needs. Look for the --format or --Format options.&lt;br /&gt;
&lt;br /&gt;
* Every invocation of squeue sends a remote procedure call to the Slurm database server. &#039;&#039;&#039;Do not run squeue or other Slurm client commands from loops in shell scripts or other programs&#039;&#039;&#039; as this can result in a degradation of performance. Ensure that programs limit calls to squeue to the minimum necessary for the information you are trying to gather.&lt;br /&gt;
&lt;br /&gt;
== How to cancel jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/scancel.html scancel] command, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scancel &amp;lt;jobid&amp;gt;          # cancel specific job&lt;br /&gt;
$ scancel &amp;lt;jobid&amp;gt;_&amp;lt;index&amp;gt;  # cancel indexed job in a job array&lt;br /&gt;
$ scancel -u &amp;lt;username&amp;gt;    # cancel all jobs of specific user&lt;br /&gt;
$ scancel -u &amp;lt;username&amp;gt; -i # cancel all jobs of specific user interactively&lt;br /&gt;
$ scancel -t PENDING       # cancel pending jobs&lt;br /&gt;
$ scancel -t RUNNING       # cancel running jobs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to show job script of a running job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/scontrol.html scontrol] command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol write batch_script &amp;lt;job_id&amp;gt; &amp;lt;file&amp;gt;&lt;br /&gt;
$ scontrol write batch_script &amp;lt;job_id&amp;gt; -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If file name is omitted default file name will be slurm-&amp;lt;job_id&amp;gt;.sh&lt;br /&gt;
* If file name is - (i.e. dash) job script will be written to stdout.&lt;br /&gt;
&lt;br /&gt;
== How to get estimated start time of a job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ squeue --start&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* Estimated start times are dynamic and can change at any moment. Exact start times of individual jobs are usually unpredictable.&lt;br /&gt;
* Slurm will report N/A for the start time estimate if nodes are not currently being reserved by the scheduler for the job to run on.&lt;br /&gt;
&lt;br /&gt;
== How to show remaining walltime of running jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] with format option &amp;quot;%L&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $ squeue -t r -o &amp;quot;%u %i %L&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to check priority of jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] with format options &amp;quot;%Q&amp;quot; and/or &amp;quot;%p&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue -o &amp;quot;%8i %8u %15a %.10r %.10L %.5D %.10Q&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sprio.html sprio] command to display the priority components (age/fairshare/...) for each job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sprio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;[https://slurm.schedmd.com/sshare.html sshare] command for listing the shares of associations, e.g. accounts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sshare&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to prevent (hold) jobs from being scheduled for execution? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol hold &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to unhold job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol release &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to suspend a running job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol suspend &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to resume a suspended job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol resume &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to requeue (cancel and resubmit) a particular job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol requeue &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to monitor resource usage of running job(s)? ==&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;[https://slurm.schedmd.com/sstat.html sstat] command.&lt;br /&gt;
&lt;br /&gt;
&#039;sstat -e&#039; command shows a list of fields that can be specified with the &#039;--format&#039; option.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sstat --format=JobId,AveCPU,AveRSS,MaxRSS -j &amp;lt;jobid&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will show average CPU time, average and maximum memory consumption of all tasks in the running job.&lt;br /&gt;
Ideally, average CPU time equals the number of cores allocated for the job multiplied by the current run time of the job. &lt;br /&gt;
The maximum memory consumption gives an estimate of the peak amount of memory actually needed so far. This can be compared with the amount of memory requested for the job. Over-requesting memory can result in significant waste of compute resources.       &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Users can also ssh into compute nodes that they have one or more running jobs on. Once logged in, they can use standard Linux process monitoring tools like ps, (h)top, free, vmstat, iostat, du, ...&lt;br /&gt;
&lt;br /&gt;
* Users can also attach an interactive shell under an already allocated job by running the following command: &amp;lt;pre&amp;gt;srun --jobid &amp;lt;job&amp;gt; --overlap --pty /bin/bash&amp;lt;/pre&amp;gt; Once logged in, they can again use standard Linux process monitoring tools like ps, (h)top, free, vmstat, iostat, du, ... For a single node job the user does not even need to know the node that the job is running on. For a multinode job, the user can still use &#039;-w &amp;lt;node&amp;gt;&#039; option to specify a specific node.&lt;br /&gt;
&lt;br /&gt;
== How to get detailed job information ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show job 1234  # For job id 1234&lt;br /&gt;
$ scontrol show jobs      # For all jobs&lt;br /&gt;
$ scontrol -o show jobs   # One line per job&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to modify a pending/running job? ==&lt;br /&gt;
&lt;br /&gt;
Use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ scontrol update JobId=&amp;lt;jobid&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g.: &amp;lt;pre&amp;gt;$ scontrol update JobId=42 TimeLimit=7-0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will modify the time limit of the job to 7 days.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Update requests for &#039;&#039;&#039;running&#039;&#039;&#039; jobs are mostly restricted to Slurm administrators. In particular, only an administrator can increase the TimeLimit of a job.&lt;br /&gt;
&lt;br /&gt;
== How to show accounting data of completed jobs ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sacct.html sacct] command.&lt;br /&gt;
&lt;br /&gt;
&#039;sacct -e&#039; command shows a list of fields that can be&lt;br /&gt;
specified with the &#039;--format&#039; option.&lt;br /&gt;
&lt;br /&gt;
== How to retrieve job history and accounting ==&lt;br /&gt;
&lt;br /&gt;
For a specific job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -j &amp;lt;jobid&amp;gt; --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a specific user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Default time window is the current day.&lt;br /&gt;
&lt;br /&gt;
Starting from a specific date:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; -S 2020-01-15 --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within a time window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; -S 2020-01-15 -E 2020-01-31 --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
You can also set the environment variable $SACCT_FORMAT to specify the default format. To get a general idea of how efficiently a job utilized its resources, the following format can be used:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export SACCT_FORMAT=&amp;quot;JobID,JobName,Elapsed,NCPUs,TotalCPU,CPUTime,ReqMem,MaxRSS,MaxDiskRead,MaxDiskWrite,State,ExitCode&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To find how efficiently the CPUs were used, divide TotalCPU by CPUTime. To find how efficiently memory were used, devide MaxRSS by ReqMem. But be aware that sacct memory usage measurement doesn&#039;t catch very rapid memory spikes. If your job got killed for running out of memory, it &#039;&#039;&#039;did run out of memory&#039;&#039;&#039; even if sacct reports a lower memory usage than would trigger an out-of-memory-kill. A job that reads or writes excessively to disk might be bogged down significantly by I/O operations.&lt;br /&gt;
&lt;br /&gt;
== How to get efficiency information of completed job(s)? ==&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;pre&amp;gt;$ seff &amp;lt;jobid&amp;gt; &amp;lt;/pre&amp;gt; command for some brief information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; It is good practice to have a look at the efficiency of your job(s) on completion &#039;&#039;&#039;and we expect you to do so&#039;&#039;&#039;. This way you can improve your job specifications in the future.&lt;br /&gt;
&lt;br /&gt;
== How to get complete field values from sstat and sacct commands? ==&lt;br /&gt;
&lt;br /&gt;
When using the [https://slurm.schedmd.com/sacct.html#OPT_format --format] option for listing various fields you can put a %NUMBER afterwards to specify how many characters should be printed.&lt;br /&gt;
&lt;br /&gt;
E.g. &#039;--format=User%30&#039; will print 30 characters for the user name (right justified).  A %-30 will print 30 characters left justified.&lt;br /&gt;
&lt;br /&gt;
sstat and sacct also provide the &#039;--parsable&#039; and &#039;--parsable2&#039; option to always print full field values delimited with a pipe &#039;|&#039; character by default.&lt;br /&gt;
The delimiting character can be specified by using the &#039;--delimiter&#039; option, e.g. &#039;--delimiter=&amp;quot;,&amp;quot;&#039; for comma separated values.&lt;br /&gt;
&lt;br /&gt;
== How to retrieve job records for all jobs running/pending at a certain point in time? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sacct.html sacct] with [https://slurm.schedmd.com/sacct.html#OPT_state -s &amp;lt;state&amp;gt;] and [https://slurm.schedmd.com/sacct.html#OPT_starttime -S &amp;lt;start time&amp;gt;] options, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$  sacct -n -a -X -S 2021-04-01T00:00:00 -s R -o JobID,User%15,Account%10,NCPUS,NNodes,NodeList%1500&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; When specifying the state &amp;quot;-s &amp;lt;state&amp;gt;&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the start time &amp;quot;-S &amp;lt;start time&amp;gt;&amp;quot;, the default &lt;br /&gt;
time window will be set to end time &amp;quot;-E&amp;quot; equal to start time. Thus, you will get a snapshot of all running/pending &lt;br /&gt;
jobs at the instance given by &amp;quot;-S &amp;lt;start time&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How to get a parsable list of hostnames from $SLURM_JOB_NODELIST? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show hostnames $SLURM_JOB_NODELIST&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ADMINISTRATION =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Most commands in this section are restricted to system administrators.&lt;br /&gt;
&lt;br /&gt;
== How to stop Slurm from scheduling jobs? ==&lt;br /&gt;
&lt;br /&gt;
You can stop Slurm from scheduling jobs on a per partition basis by&lt;br /&gt;
setting that partition&#039;s state to DOWN. Set its state UP to resume&lt;br /&gt;
scheduling. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update PartitionName=foo State=DOWN&lt;br /&gt;
$ scontrol update PartitionName=foo State=UP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to print actual hardware configuration of a node? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ slurmd -C   # print hardware configuration plus uptime;  &lt;br /&gt;
$ slurmd -G   # print generic resource configuration;       to be run on compute nodes only&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to reboot (all) nodes as soon as they become idle? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol reboot ASAP nextstate=RESUME &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;  # specific nodes&lt;br /&gt;
$ scontrol reboot ASAP nextstate=RESUME ALL              # all nodes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to cancel pending reboot of nodes? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol cancel_reboot &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to check current node status? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show node &amp;lt;node&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to instruct all Slurm daemons to re-read the configuration file ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol reconfigure&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to prevent a user from submitting new jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use the following [https://slurm.schedmd.com/sacctmgr.html sacctmgr] command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr update user &amp;lt;username&amp;gt; set maxsubmitjobs=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Job submission is then rejected with the following message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch job.slurm&lt;br /&gt;
sbatch: error: AssocMaxSubmitJobLimit&lt;br /&gt;
sbatch: error: Batch job submission failed: Job violates accounting/QOS policy (job submit limit, user&#039;s size and/or time limits)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use the following command to release the limit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr update user &amp;lt;username&amp;gt; set maxsubmitjobs=-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to drain node(s)? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update NodeName=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; State=DRAIN Reason=&amp;quot;Some Reason&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Reason is mandatory.&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; just set state DOWN to drain nodes. This will kill any active jobs that may run on that nodes.&lt;br /&gt;
&lt;br /&gt;
== How to list reason for nodes being drained or down? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -R&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to resume node state? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update NodeName=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; State=RESUME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to create a reservation on nodes? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/reservations.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol create reservation user=root starttime=now duration=UNLIMITED flags=maint,ignore_jobs nodes=ALL&lt;br /&gt;
$ scontrol create reservation user=root starttime=2020-12-24T17:00 duration=12:00:00 flags=maint,ignore_jobs nodes=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
$ scontrol show reservation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Add &amp;quot;FLEX&amp;quot; flag to allow jobs that qualify for the reservation to start before the reservation begins (and continue after it starts). &lt;br /&gt;
Add &amp;quot;MAGNETIC&amp;quot; flag to attract jobs that qualify for the reservation to run in that reservation without having requested it at submit time.&lt;br /&gt;
&lt;br /&gt;
== How to create a floating reservation on nodes? ==&lt;br /&gt;
&lt;br /&gt;
Use the flag &amp;quot;TIME_FLOAT&amp;quot; and a start time that is relative to the current time (use the keyword &amp;quot;now&amp;quot;).&lt;br /&gt;
In the example below, the nodes are prevented from starting any jobs exceeding a walltime of 2 days.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol create reservation user=root starttime=now+2days duration=UNLIMITED flags=maint,ignore_jobs,time_float nodes=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Floating reservation are not intended to run jobs, but to prevent long running jobs from being initiated on specific nodes. Attempts by users to make use of a floating reservation will be rejected. When ready to perform the maintenance, place the nodes in DRAIN state and delete the reservation.&lt;br /&gt;
&lt;br /&gt;
== How to use a reservation? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch --reservation=foo_6 ... script.slurm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to delete a reservation? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol delete ReservationName=foo_6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get node oriented information similar to &#039;mdiag -n&#039;? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -N -l&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fields can be individually customized. See [https://slurm.schedmd.com/sinfo.html sinfo] man page. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -N --format=&amp;quot;%8N %12P %.4C %.8O %.6m %.6e %.8T %.20E&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NODELIST PARTITION    CPUS CPU_LOAD MEMORY FREE_M    STATE               REASON&lt;br /&gt;
n0001    standard*    0/16     0.01 128000 120445     idle                 none&lt;br /&gt;
n0002    standard*    0/16     0.01 128000 120438     idle                 none&lt;br /&gt;
n0003    standard*    0/0/      N/A 128000    N/A    down*       Not responding&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get node oriented information similar to &#039;pbsnodes&#039;? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show nodes                     # One paragraph per node (all nodes)&lt;br /&gt;
$ scontrol show nodes &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;     # One paragraph per node (specified nodes) &lt;br /&gt;
$ scontrol -o show nodes                  # One line per node (all nodes)&lt;br /&gt;
$ scontrol -o show nodes &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;  # One line per node (specified nodes)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to update multiple jobs of a user with a single scontrol command? ==&lt;br /&gt;
&lt;br /&gt;
Not possible. But you can e.g. use squeue to build the script taking&lt;br /&gt;
advantage of its filtering and formatting options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue -tpd -h -o &amp;quot;scontrol update jobid=%i priority=1000&amp;quot; &amp;gt;my.script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also identify the list of jobs and add them to the JobID all at once, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update JobID=123 qos=reallylargeqos&lt;br /&gt;
$ scontrol update JobID=123,456,789 qos=reallylargeqos&lt;br /&gt;
$ scontrol update JobID=[123-400],[500-600] qos=reallylargeqos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option is to use the JobName, if all the jobs have the same name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update JobName=&amp;quot;foobar&amp;quot; UserID=johndoe qos=reallylargeqos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, Slurm does not allow the UserID filter alone.&lt;br /&gt;
&lt;br /&gt;
== How to create a new account? ==&lt;br /&gt;
&lt;br /&gt;
Add account at top level in association tree:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add account &amp;lt;accountname&amp;gt; Cluster=justus Description=&amp;quot;Account description&amp;quot; Organization=&amp;quot;none&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add account as child of some parent account in association tree:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add account &amp;lt;accountname&amp;gt; parent=&amp;lt;parent_accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to move account to another parent? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify account name=&amp;lt;accountname&amp;gt; set parent=&amp;lt;new_parent_accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to delete an account? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr delete account name=&amp;lt;accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to add a new user? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; DefaultAccount=&amp;lt;accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to add/remove users from an account? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; account=&amp;lt;accountname&amp;gt;                  # Add user to account&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; account=&amp;lt;accountname2&amp;gt;                 # Add user to a second account&lt;br /&gt;
$ sacctmgr remove user &amp;lt;username&amp;gt; where account=&amp;lt;accountname&amp;gt;         # Remove user from this account&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to change default account of a user? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
$ sacctmgr modify user where user=&amp;lt;username&amp;gt; set DefaultAccount=&amp;lt;default_account&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The user must already be associated with the account you want to set as default.&lt;br /&gt;
&lt;br /&gt;
== How to show account information? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr show assoc&lt;br /&gt;
$ sacctmgr show assoc tree&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
* On JUSTUS 2 registered compute projects (&amp;quot;Rechenvorhaben&amp;quot;) are uniquely mapped to Slurm accounts of the same name.&lt;br /&gt;
&lt;br /&gt;
== How to implement user resource throttling policies? ==&lt;br /&gt;
&lt;br /&gt;
Quoting from https://bugs.schedmd.com/show_bug.cgi?id=3600#c4&lt;br /&gt;
&lt;br /&gt;
 With Slurm, the associations are meant to establish base limits on the&lt;br /&gt;
 defined partitions, accounts and users. Because limits propagate down&lt;br /&gt;
 through the association tree, you only need to define limits at a high&lt;br /&gt;
 level and those limits will be applied to all partitions, accounts and&lt;br /&gt;
 users that are below it (parent to child). You can also override those&lt;br /&gt;
 high level (parent) limits by explicitly setting different limits at&lt;br /&gt;
 any lower level (on the child). So using the association tree is the&lt;br /&gt;
 best way to get some base limits applied that you want for most cases. &lt;br /&gt;
 QOS&#039;s are meant to override any of those base limits for exceptional&lt;br /&gt;
 cases. Like Maui, you can use QOS&#039;s to set a different priority.&lt;br /&gt;
 Again, the QOS would be overriding the base priority that could be set&lt;br /&gt;
 in the associations.&lt;br /&gt;
&lt;br /&gt;
== How to set a resource limit for an individual user? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/resource_limits.html&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set maxjobs=1            # Limit maximum number of running jobs for user&lt;br /&gt;
$ sacctmgr list assoc user=&amp;lt;username&amp;gt; format=user,maxjobs  # Show that limit&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set maxjobs=-1           # Remove that limit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to retrieve historical resource usage for a specific user or account ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sreport.html sreport] command.&lt;br /&gt;
&lt;br /&gt;
Examples: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sreport cluster UserUtilizationByAccount Start=2021-01-01 End=2021-12-31 -t Hours user=&amp;lt;username&amp;gt;    # Report cluster utilization of given user broken down by accounts&lt;br /&gt;
$ sreport cluster AccountUtilizationByUser Start=2021-01-01 End=2021-12-31 -t Hours account=&amp;lt;account&amp;gt;  # Report cluster utilization of given account broken down by users    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* By default CPU resources will be reported. Use &#039;-T&#039; option for other trackable resources, e.g. &#039;-T cpu,mem,gres/gpu,gres/scratch&#039;.&lt;br /&gt;
* On JUSTUS 2 registered compute projects (&amp;quot;Rechenvorhaben&amp;quot;) are uniquely mapped to Slurm accounts of the same name. Thus, &#039;AccountUtilizationByUser&#039; can also be used to report the aggregated cluster utilization of compute projects.&lt;br /&gt;
* Can be executed by regular users as well in which case Slurm will only report their own usage records (but along with the total usage of the associated account in the case of &#039;AccountUtilizationByUser&#039;).&lt;br /&gt;
&lt;br /&gt;
== How to fix/reset a user&#039;s RawUsage value? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; where Account=&amp;lt;account&amp;gt; set RawUsage=&amp;lt;number&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to create/modify/delete QOSes? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/qos.html&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr show qos                                      # Show existing QOSes&lt;br /&gt;
$ sacctmgr add qos verylong                              # Create new QOS verylong&lt;br /&gt;
$ sacctmgr modify qos verylong set MaxWall=28-00:00:00   # Set maximum walltime limit&lt;br /&gt;
$ sacctmgr modify qos verylong set MaxTRESPerUser=cpu=4  # Set maximum maximum number of CPUS a user can allocate at a given time&lt;br /&gt;
$ sacctmgr modify qos verylong set flags=denyonlimit     # Prevent submission if job requests exceed any limits of QOS&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set qos+=verylong      # Add a QOS to a user account&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set qos-=verylong      # Remove a QOS from a user account&lt;br /&gt;
$ sacctmgr delete qos verylong                           # Delete that QOS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to find (and fix) runaway jobs? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sacctmgr show runaway&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* Runaway jobs are orphaned jobs that don&#039;t exist in the Slurm controller but have a start and no end time in the Slurm data base. Runaway jobs mess with accounting and affects new jobs of users who have too many runaway jobs. &lt;br /&gt;
* If there are jobs in this state this command will also provide an option to fix them. This will set the end time for each job to the latest out of the start, eligible, or submit times, and set the state to completed.&lt;br /&gt;
&lt;br /&gt;
== How to show a history of database transactions? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sacctmgr list transactions&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Useful to get timestamps for when a user/account/qos has been created/modified/removed etc.&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwForCluster_JUSTUS_2_Slurm_HOWTO&amp;diff=16424</id>
		<title>BwForCluster JUSTUS 2 Slurm HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwForCluster_JUSTUS_2_Slurm_HOWTO&amp;diff=16424"/>
		<updated>2026-09-17T12:21:50Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* How to show accounting data of completed job(s)? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Justus2}}&lt;br /&gt;
&lt;br /&gt;
This is a collection of howtos and convenient Slurm commands for JUSTUS 2.&lt;br /&gt;
&lt;br /&gt;
Some commands behave slightly different depending on whether they are executed &lt;br /&gt;
by a system administrator or by a regular user, as Slurm prevents regular users from accessing critical system information and viewing job and usage information of other users.  &lt;br /&gt;
&lt;br /&gt;
= GENERAL INFORMATION =&lt;br /&gt;
&lt;br /&gt;
== How to find a general quick start user guide? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/quickstart.html&lt;br /&gt;
&lt;br /&gt;
== How to find Slurm FAQ? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/faq.html&lt;br /&gt;
&lt;br /&gt;
== How to find a Slurm cheat sheet? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/pdfs/summary.pdf&lt;br /&gt;
&lt;br /&gt;
== How to find Slurm tutorials? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/tutorials.html&lt;br /&gt;
&lt;br /&gt;
== How to get more information on Slurm? ==&lt;br /&gt;
&lt;br /&gt;
(Almost) every Slurm command has a man page. Use it.&lt;br /&gt;
&lt;br /&gt;
Online versions: https://slurm.schedmd.com/man_index.html&lt;br /&gt;
&lt;br /&gt;
== How to find hardware specific details about JUSTUS 2? ==&lt;br /&gt;
&lt;br /&gt;
See our Wiki page: [[Hardware and Architecture (bwForCluster JUSTUS 2)|Hardware and Architecture]]&lt;br /&gt;
&lt;br /&gt;
= JOB SUBMISSION =&lt;br /&gt;
&lt;br /&gt;
== How to submit a serial batch job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html sbatch]  command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch &amp;lt;job-script&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample job script template for serial job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# 8 GB memory required per node&lt;br /&gt;
#SBATCH --mem=8G&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=serial_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=serial_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=serial_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# Run serial program&lt;br /&gt;
./my_serial_program&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for serial program: [[Media:Hello_serial.c | Hello_serial.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* --nodes=1 and --ntasks-per-node=1 may be replaced by --ntasks=1.&lt;br /&gt;
* If not specified, stdout and stderr are both written to slurm-%j.out.&lt;br /&gt;
&lt;br /&gt;
== How to find working sample scripts for my program? ==&lt;br /&gt;
&lt;br /&gt;
Most software modules for applications provide working sample batch scripts.&lt;br /&gt;
Check with [[Software_Modules_Lmod#Module_specific_help | module help]] command, e.g. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module help chem/vasp     # display module help for VASP&lt;br /&gt;
$ module help math/matlab   # display module help for Matlab&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to harden job scripts against common errors? ==&lt;br /&gt;
&lt;br /&gt;
The bash shell provides several options that support users in disclosing hidden bugs and writing safer job scripts.&lt;br /&gt;
In order to activate these safeguard settings users can insert the following lines in their scripts (after all #SBATCH directives):    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
set -o errexit   # (or set -e) cause batch script to exit immediately when a command fails.&lt;br /&gt;
set -o pipefail  # cause batch script to exit immediately also when the command that failed is embedded in a pipeline&lt;br /&gt;
set -o nounset   # (or set -u) causes the script to treat unset variables as an error and exit immediately &lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to submit an interactive job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/salloc.html salloc] command, e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ salloc --nodes=1 --ntasks-per-node=8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
In previous Slurm versions &amp;lt; 20.11 the use of [https://slurm.schedmd.com/srun.html srun] has been the recommended way for launching interactive jobs, e.g.:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ srun --nodes=1 --ntasks-per-node=8 --pty bash &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although this still works with current Slurm versions this is considered &#039;&#039;&#039;deprecated &#039;&#039;&#039; for current Slurm versions as it may cause issues when launching additional jobs steps from within the interactive job environment. Use [https://slurm.schedmd.com/salloc.html salloc] command.&lt;br /&gt;
&lt;br /&gt;
== How to enable X11 forwarding for an interactive job? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--x11&#039; flag, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ salloc --nodes=1 --ntasks-per-node=8 --x11     # run shell with X11 forwarding enabled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
* For X11 forwarding to work, you must also enable X11 forwarding for your ssh login from your local computer to the cluster, i.e.:&lt;br /&gt;
 &amp;lt;pre&amp;gt;local&amp;gt; ssh -X &amp;lt;username&amp;gt;@justus2.uni-ulm.de&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to convert Moab batch job scripts to Slurm? ==&lt;br /&gt;
&lt;br /&gt;
Replace Moab/Torque job specification flags and environment variables in your job&lt;br /&gt;
scripts by their corresponding Slurm counterparts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commonly used Moab job specification flags and their Slurm equivalents&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| width=750px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Moab (msub) !! Slurm (sbatch)&lt;br /&gt;
|-&lt;br /&gt;
| Script directive                            || #MSUB                                  || #SBATCH&lt;br /&gt;
|-&lt;br /&gt;
| Job name                                    || -N &amp;lt;name&amp;gt;                              || --job-name=&amp;lt;name&amp;gt;  (-J &amp;lt;name&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Account                                     || -A &amp;lt;account&amp;gt;                           || --account=&amp;lt;account&amp;gt; (-A &amp;lt;account&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Queue                                       || -q &amp;lt;queue&amp;gt;                             || --partition=&amp;lt;partition&amp;gt; (-p &amp;lt;partition&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Wall time limit                             || -l walltime=&amp;lt;hh:mm:ss&amp;gt;                 || --time=&amp;lt;hh:mm:ss&amp;gt; (-t &amp;lt;hh:mm:ss&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Node count                                  || -l nodes=&amp;lt;count&amp;gt;                       || --nodes=&amp;lt;count&amp;gt; (-N &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Core count                                  || -l procs=&amp;lt;count&amp;gt;                       || --ntasks=&amp;lt;count&amp;gt; (-n &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Process count per node                      || -l ppn=&amp;lt;count&amp;gt;                         || --ntasks-per-node=&amp;lt;count&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Core count per process                      ||                                        || --cpus-per-task=&amp;lt;count&amp;gt; (-c &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Memory limit per node                       || -l mem=&amp;lt;limit&amp;gt;                         || --mem=&amp;lt;limit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Memory limit per process                    || -l pmem=&amp;lt;limit&amp;gt;                        || --mem-per-cpu=&amp;lt;limit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Job array                                   || -t &amp;lt;array indices&amp;gt;                     || --array=&amp;lt;indices&amp;gt; (-a &amp;lt;indices&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Node exclusive job                          || -l naccesspolicy=singlejob             || --exclusive&lt;br /&gt;
|-&lt;br /&gt;
| Initial working directory                   || -d &amp;lt;directory&amp;gt; (default: $HOME)        || --chdir=&amp;lt;directory&amp;gt; (-D &amp;lt;directory&amp;gt;) (default: submission directory)&lt;br /&gt;
|-&lt;br /&gt;
| Standard output file                        || -o &amp;lt;file path&amp;gt;                         || --output=&amp;lt;file&amp;gt; (-o &amp;lt;file&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Standard error file                         || -e &amp;lt;file path&amp;gt;                         || --error=&amp;lt;file&amp;gt;  (-e &amp;lt;file&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Combine stdout/stderr to stdout             || -j oe                                  || --output=&amp;lt;combined stdout/stderr file&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mail notification events                    || -m &amp;lt;event&amp;gt;                             || --mail-type=&amp;lt;events&amp;gt; (valid types include: NONE, BEGIN, END, FAIL, ALL)&lt;br /&gt;
|-&lt;br /&gt;
| Export environment to job                   || -V                                     || --export=ALL (default)&lt;br /&gt;
|-&lt;br /&gt;
| Don&#039;t export environment to job             || (default)                              || --export=NONE&lt;br /&gt;
|-&lt;br /&gt;
| Export environment variables to job         || -v &amp;lt;var[=value][,var2=value2[, ...]]&amp;gt;  || --export=&amp;lt;var[=value][,var2=value2[,...]]&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* Default initial job working directory is $HOME for Moab. For Slurm the default working directory is where you submit your job from.&lt;br /&gt;
* By default Moab does not export any environment variables to the job&#039;s runtime environment. With Slurm most of the login environment variables are exported to your job&#039;s runtime environment. This includes environment variables from software modules that were loaded at job submission time (and also $HOSTNAME variable).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commonly used Moab/Torque script environment variables and their Slurm equivalents&lt;br /&gt;
&lt;br /&gt;
{| width=750px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Information                 !! Moab                !! Torque               !! Slurm                                     &lt;br /&gt;
|-&lt;br /&gt;
| Job name                     || $MOAB_JOBNAME        || $PBS_JOBNAME        || $SLURM_JOB_NAME                           &lt;br /&gt;
|-&lt;br /&gt;
| Job ID                       || $MOAB_JOBID          || $PBS_JOBID          || $SLURM_JOB_ID                             &lt;br /&gt;
|-&lt;br /&gt;
| Submit directory             || $MOAB_SUBMITDIR      || $PBS_O_WORKDIR      || $SLURM_SUBMIT_DIR                         &lt;br /&gt;
|-&lt;br /&gt;
| Number of nodes allocated    || $MOAB_NODECOUNT      || $PBS_NUM_NODES      || $SLURM_JOB_NUM_NODES (and: $SLURM_NNODES) &lt;br /&gt;
|-&lt;br /&gt;
| Node list                    || $MOAB_NODELIST       || cat $PBS_NODEFILE   || $SLURM_JOB_NODELIST                       &lt;br /&gt;
|-&lt;br /&gt;
| Number of processes          || $MOAB_PROCCOUNT      || $PBS_TASKNUM        || $SLURM_NTASKS                             &lt;br /&gt;
|-&lt;br /&gt;
| Requested tasks per node     || ---                    || $PBS_NUM_PPN        || $SLURM_NTASKS_PER_NODE                    &lt;br /&gt;
|-&lt;br /&gt;
| Requested CPUs per task      || ---                  || ---                 || $SLURM_CPUS_PER_TASK                      &lt;br /&gt;
|-&lt;br /&gt;
| Job array index              || $MOAB_JOBARRAYINDEX  || $PBS_ARRAY_INDEX    || $SLURM_ARRAY_TASK_ID                      &lt;br /&gt;
|-&lt;br /&gt;
| Job array range              || $MOAB_JOBARRAYRANGE  || -                   || $SLURM_ARRAY_TASK_COUNT                   &lt;br /&gt;
|-&lt;br /&gt;
| Queue name                   || $MOAB_CLASS          || $PBS_QUEUE          || $SLURM_JOB_PARTITION                      &lt;br /&gt;
|-&lt;br /&gt;
| QOS name                     || $MOAB_QOS            || ---                 || $SLURM_JOB_QOS                            &lt;br /&gt;
|-&lt;br /&gt;
| Number of processes per node | ---                   || $PBS_NUM_PPN        || $SLURM_TASKS_PER_NODE                     &lt;br /&gt;
|-&lt;br /&gt;
| Job user                     || $MOAB_USER           || $PBS_O_LOGNAME      || $SLURM_JOB_USER                           &lt;br /&gt;
|-&lt;br /&gt;
| Hostname                     || $MOAB_MACHINE        || $PBS_O_HOST         || $SLURMD_NODENAME                          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* See [https://slurm.schedmd.com/sbatch.html sbatch] man page for a complete list of flags and environment variables.&lt;br /&gt;
&lt;br /&gt;
== How to emulate Moab output file names? ==&lt;br /&gt;
&lt;br /&gt;
Use the following directives:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --output=&amp;quot;%x.o%j&amp;quot;&lt;br /&gt;
#SBATCH --error=&amp;quot;%x.e%j&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to pass command line arguments to the job script? ==&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;pre&amp;gt;$ sbatch &amp;lt;job-script&amp;gt; arg1 arg2 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside the job script the arguments can be accessed as $1, $2, ...&lt;br /&gt;
&lt;br /&gt;
E.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
infile=&amp;quot;$1&amp;quot;&lt;br /&gt;
outfile=&amp;quot;$2&amp;quot;&lt;br /&gt;
./my_serial_program &amp;lt; &amp;quot;$infile&amp;quot; &amp;gt; &amp;quot;$outfile&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; use $1, $2, ... in &amp;quot;#SBATCH&amp;quot; lines. These parameters can be used only within the regular shell script.&lt;br /&gt;
&lt;br /&gt;
== How to request local scratch (SSD/NVMe) at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--gres=scratch:nnn&#039; option to allocate nnn GB of local (i.e. node-local) scratch space for the entire job.&lt;br /&gt;
&lt;br /&gt;
Example: &#039;--gres=scratch:100&#039; will allocate 100 GB scratch space on a locally attached NVMe device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; add any unit (such as --gres=scratch:100G). This would be treated as requesting an amount of 10^9 * 100GB of scratch space.&lt;br /&gt;
&lt;br /&gt;
* Multinode jobs get nnn GB of local scratch space on every node of the job.&lt;br /&gt;
&lt;br /&gt;
* Environment variable &#039;&#039;&#039;$SCRATCH&#039;&#039;&#039; will point to &lt;br /&gt;
** /scratch/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt; when local scratch has been requested. This will be on locally attached SSD/NVMe devices.&lt;br /&gt;
** /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt; when no local scratch has been requested. This will be in memory and, thus, be limited in size.&lt;br /&gt;
&lt;br /&gt;
* Environment variable &#039;&#039;&#039;$TMPDIR&#039;&#039;&#039; always points to /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt;. This will always be in memory and, thus, limited in size.&lt;br /&gt;
&lt;br /&gt;
* For backward compatibility environment variable $RAMDISK always points to /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Scratch space allocation in /scratch will be enforced by quota limits&lt;br /&gt;
&lt;br /&gt;
* Data written to $TMPDIR will always count against allocated memory.&lt;br /&gt;
&lt;br /&gt;
* Data written to local scratch space will automatically be removed at the end of the job.&lt;br /&gt;
&lt;br /&gt;
== How to request GPGPU nodes at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--gres=gpu:&amp;lt;count&amp;gt;&#039; option to allocate 1 or 2 GPUs per node for the entire job.&lt;br /&gt;
&lt;br /&gt;
Example: &#039;--gres=gpu:1&#039; will allocate one GPU per node for this job.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GPGPU nodes are equipped with two Nvidia V100S cards &lt;br /&gt;
&lt;br /&gt;
* Environment variables $CUDA_VISIBLE_DEVICES, $SLURM_JOB_GPUS and $GPU_DEVICE_ORDINAL will denote card(s) allocated for the job.&lt;br /&gt;
&lt;br /&gt;
* CUDA Toolkit is available as software module devel/cuda.&lt;br /&gt;
&lt;br /&gt;
== How to clean-up or save files before a job times out? ==&lt;br /&gt;
&lt;br /&gt;
Possibly you would like to clean up the work directory or save intermediate result files in case a job times out.&lt;br /&gt;
&lt;br /&gt;
The following sample script may serve as a blueprint for implementing a pre-termination function to perform clean-up or file recovery actions. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# 2 GB memory required per node&lt;br /&gt;
#SBATCH --mem=2G&lt;br /&gt;
# Request 10 GB local scratch space&lt;br /&gt;
#SBATCH --gres=scratch:10&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=10:00&lt;br /&gt;
# Send the USR1 signal 120 seconds before end of time limit&lt;br /&gt;
#SBATCH --signal=B:USR1@120&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=signal_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=signal_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=signal_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Define the signal handler function&lt;br /&gt;
# Note: This is not executed here, but rather when the associated &lt;br /&gt;
# signal is received by the shell.&lt;br /&gt;
finalize_job()&lt;br /&gt;
{&lt;br /&gt;
    # Do whatever cleanup you want here. In this example we copy&lt;br /&gt;
    # output file(s) back to $SLURM_SUBMIT_DIR, but you may implement &lt;br /&gt;
    # your own job finalization code here.&lt;br /&gt;
    echo &amp;quot;function finalize_job called at `date`&amp;quot;&lt;br /&gt;
    cd $SCRATCH&lt;br /&gt;
    mkdir -vp &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/results&lt;br /&gt;
    tar czvf &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/results/${SLURM_JOB_ID}.tgz output*.txt&lt;br /&gt;
    exit&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Call finalize_job function as soon as we receive USR1 signal&lt;br /&gt;
trap &#039;finalize_job&#039; USR1&lt;br /&gt;
&lt;br /&gt;
# Copy input files for this job to the scratch directory (if needed).&lt;br /&gt;
# Note: Environment variable $SCRATCH always points to a scratch directory &lt;br /&gt;
# automatically created for this job. Environment variable $SLURM_SUBMIT_DIR &lt;br /&gt;
# points to the path where this script was submitted from.&lt;br /&gt;
# Example:&lt;br /&gt;
# cp -v &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/input*.txt &amp;quot;$SCRATCH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Change working directory to local scratch directory&lt;br /&gt;
cd &amp;quot;$SCRATCH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# This is where the actual work is done. In this case we just create &lt;br /&gt;
# a sample output file for 900 (=15*60) seconds, but since we asked &lt;br /&gt;
# Slurm for 600 seconds only it will not be able finish within this &lt;br /&gt;
# wall time.&lt;br /&gt;
# Note: It is important to run this task in the background &lt;br /&gt;
# by placing the &amp;amp; symbol at the end. Otherwise the signal handler &lt;br /&gt;
# would not be executed until that process has finished, which is not &lt;br /&gt;
# what we want.&lt;br /&gt;
(for i in `seq 15`; do echo &amp;quot;Hello World at `date +%H:%M:%S`.&amp;quot;; sleep 60; done) &amp;gt;output.txt 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
# Note: The command above is just for illustration. Normally you would just run&lt;br /&gt;
# my_program &amp;gt;output.txt 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
# Tell the shell to wait for background task(s) to finish. &lt;br /&gt;
# Note: This is important because otherwise the parent shell &lt;br /&gt;
# (this script) would proceed (and terminate) without waiting for &lt;br /&gt;
# background task(s) to finish.&lt;br /&gt;
wait&lt;br /&gt;
&lt;br /&gt;
# If we get here, the job did not time out but finished in time.&lt;br /&gt;
&lt;br /&gt;
# Release user defined signal handler for USR1&lt;br /&gt;
trap - USR1&lt;br /&gt;
&lt;br /&gt;
# Do regular cleanup and save files. In this example we simply call &lt;br /&gt;
# the same function that we defined as a signal handler above, but you &lt;br /&gt;
# may implement your own code here. &lt;br /&gt;
finalize_job&lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The number of seconds specified in --signal option must match the runtime of the pre-termination function and must not exceed 65535 seconds.&lt;br /&gt;
&lt;br /&gt;
* Due to the resolution of event handling by Slurm, the signal may be sent a little earlier than specified.&lt;br /&gt;
&lt;br /&gt;
== How to submit a multithreaded batch job? ==&lt;br /&gt;
&lt;br /&gt;
Sample job script template for a job running one multithreaded program instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# Number of cores per program instance&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
# 8 GB memory required per node&lt;br /&gt;
#SBATCH --mem=8G&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=multithreaded_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=multithreaded_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=multithreaded_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
export MKL_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
&lt;br /&gt;
# Run multithreaded program&lt;br /&gt;
./my_multithreaded_program&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for multithreaded program: [[Media:Hello_openmp.c | Hello_openmp.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* In our configuration each physical core is considered a &amp;quot;CPU&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* On JUSTUS 2 it is recommended to specify a number of cores per task (&#039;--cpus-per-task&#039;) that is either an integer divisor of 24 or (at most) 48.&lt;br /&gt;
&lt;br /&gt;
* Required memory can also by specified per allocated CPU with &#039;--mem-per-cpu&#039; option. &lt;br /&gt;
&lt;br /&gt;
* The &#039;--mem&#039; and &#039;--mem-per-cpu&#039; options are mutually exclusive.&lt;br /&gt;
&lt;br /&gt;
==  How to submit an array job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_array -a] (or [https://slurm.schedmd.com/sbatch.html#OPT_array --array]) option, e.g. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -a 1-16%8 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will submit 16 tasks to be executed, each one indexed by SLURM_ARRAY_TASK_ID ranging from 1 to 16, but will limit the number of simultaneously running tasks from this job array to 8.&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an array job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Number of cores per individual array task&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --array=1-16%8&lt;br /&gt;
#SBATCH --mem=4G&lt;br /&gt;
#SBATCH --time=01:00:00&lt;br /&gt;
#SBATCH --job-name=array_job&lt;br /&gt;
#SBATCH --output=array_job-%A_%a.out&lt;br /&gt;
#SBATCH --error=array_job-%A_%a.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# Print the task id.&lt;br /&gt;
echo &amp;quot;My SLURM_ARRAY_TASK_ID: &amp;quot; $SLURM_ARRAY_TASK_ID&lt;br /&gt;
&lt;br /&gt;
# Add lines here to run your computations, e.g.&lt;br /&gt;
# ./my_program &amp;lt;input.$SLURM_ARRAY_TASK_ID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Placeholder %A will be replaced by the master job id, %a will be replaced by the array task id.&lt;br /&gt;
&lt;br /&gt;
* Every sub job in an array job will have its own unique environment variable $SLURM_JOB_ID. Environment variable $SLURM_ARRAY_JOB_ID  will be set to the first job array index value for all tasks.&lt;br /&gt;
&lt;br /&gt;
* The remaining options in the sample job script are the same as the options used in other, non-array jobs. In the example above, we are requesting that each array task be allocated 1 CPU (--ntasks=1) and 4 GB of memory (--mem=4G) for up to one hour (--time=01:00:00).&lt;br /&gt;
&lt;br /&gt;
* More information: https://slurm.schedmd.com/job_array.html&lt;br /&gt;
&lt;br /&gt;
== How to delay the start of a job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_begin -b] (or [https://slurm.schedmd.com/sbatch.html#OPT_begin --begin]) option in order to defer the allocation of the job until the specified time.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch --begin=20:00 ...               # job can start after 8 p.m. &lt;br /&gt;
sbatch --begin=now+1hour ...           # job can start 1 hour after submission&lt;br /&gt;
sbatch --begin=teatime ...             # job can start at teatime (4 p.m.)&lt;br /&gt;
sbatch --begin=2023-12-24T20:00:00 ... # job can start after specified date/time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to submit dependency (chain) jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_dependency -d] (or [https://slurm.schedmd.com/sbatch.html#OPT_dependency --dependency]) option, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -d afterany:123456 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will defer the submitted job until the specified job 123456 has terminated.&lt;br /&gt;
&lt;br /&gt;
Slurm supports a number of different dependency types, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-d after:123456      # job can begin execution after the specified job has begun execution&lt;br /&gt;
-d afterany:123456   # job can begin execution after the specified job has finished&lt;br /&gt;
-d afternotok:123456 # job can begin execution after the specified job has failed (exit code not equal zero)&lt;br /&gt;
-d afterok:123456    # job can begin execution after the specified job has successfully finished (exit code zero)&lt;br /&gt;
-d singleton         # job can begin execution after any previously job with the same job name and user have finished&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Multiple jobs can be specified by separating their job ids by colon characters (:), e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $ sbatch -d afterany:123456:123457 ... &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will defer the submitted job until the specified jobs 123456 and 123457 have both finished.&lt;br /&gt;
&lt;br /&gt;
== How to deal with invalid job dependencies? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_kill-on-invalid-dep --kill-on-invalid-dep=yes] option in order to automatically terminate jobs which can never run due to invalid dependencies. By default the job stays pending with reason &#039;DependencyNeverSatisfied&#039; to allow review and appropriate action by the user.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; A job dependency may also become invalid if a job has been submitted with &#039;-d afterok:&amp;lt;jobid&amp;gt;&#039; but the specified dependency job has failed, e.g. because it timed out (i.e. exceeded its wall time limit).&lt;br /&gt;
&lt;br /&gt;
== How to submit an MPI batch job? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/mpi_guide.html&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an MPI job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate two nodes&lt;br /&gt;
#SBATCH --nodes=2&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=48&lt;br /&gt;
# Allocate 32 GB memory per node&lt;br /&gt;
#SBATCH --mem=32gb&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=mpi_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=mpi_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=mpi_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Add lines here to run your computations, e.g.&lt;br /&gt;
#&lt;br /&gt;
# Option 1: Lauch MPI tasks by using mpirun&lt;br /&gt;
#&lt;br /&gt;
# for OpenMPI and GNU compiler:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/gnu&lt;br /&gt;
# module load mpi/openmpi&lt;br /&gt;
# mpirun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# for Intel MPI and Intel complier:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/intel&lt;br /&gt;
# module load mpi/impi&lt;br /&gt;
# mpirun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# Option 2: Launch MPI tasks by using srun&lt;br /&gt;
#&lt;br /&gt;
# for OpenMPI and GNU compiler:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/gnu&lt;br /&gt;
# module load mpi/openmpi&lt;br /&gt;
# srun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# for Intel MPI and Intel compiler:&lt;br /&gt;
#&lt;br /&gt;
module load compiler/intel&lt;br /&gt;
module load mpi/impi&lt;br /&gt;
srun  ./my_mpi_program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for MPI program: [[Media:Hello_mpi.c | Hello_mpi.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* SchedMD recommends to use srun and many (most?) sites do so as well. The rationale is that srun is more tightly integrated with the scheduler and provides more consistent and reliable resource tracking and accounting for individual jobs and job steps. mpirun may behave differently for different MPI implementations and versions. There are reports that claim &amp;quot;strange behavior&amp;quot; of mpirun especially when using task affinity and core binding. Using srun is supposed to resolve these issues and is therefore highly recommended.&lt;br /&gt;
* Do not run batch jobs that launch a large number (hundreds or thousands) short running (few minutes or less) MPI programs, e.g. from a shell loop. Every single MPI invocation does generate its own job step and sends remote procedure calls to the Slurm controller server. This can result in degradation of performance for both, Slurm and the application, especially if many of that jobs happen to run at the same time. Jobs of that kind can even get stuck without showing any further activity until hitting the wall time limit. For high throughput computing (e.g. processing a large number of files with every single task running independently from each other and very shortly), consider a more appropriate parallelization paradigm that invokes independent serial (non-MPI) processes in parallel at the same time. This approach is sometimes referred to as &amp;quot;[https://en.wikipedia.org/wiki/Embarrassingly_parallel pleasingly parallel]&amp;quot; workload. GNU Parallel is a shell tool that facilitates executing serial tasks in parallel. On JUSTUS 2 this tool is available as a software module &amp;quot;system/parallel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How to submit a hybrid MPI/OpenMP job? ==&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an hybrid job:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Number of nodes to allocate&lt;br /&gt;
#SBATCH --nodes=4&lt;br /&gt;
# Number of MPI instances (ranks) to be executed per node&lt;br /&gt;
#SBATCH --ntasks-per-node=2&lt;br /&gt;
# Number of threads per MPI instance&lt;br /&gt;
#SBATCH --cpus-per-task=24&lt;br /&gt;
# Allocate 8 GB memory per node&lt;br /&gt;
#SBATCH --mem=8gb&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=hybrid_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=hybrid_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=hybrid_job-%j.err&lt;br /&gt;
&lt;br /&gt;
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
export MKL_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
&lt;br /&gt;
module load compiler/intel&lt;br /&gt;
module load mpi/impi&lt;br /&gt;
srun ./my_hybrid_program&lt;br /&gt;
&lt;br /&gt;
# or:&lt;br /&gt;
# mpirun ./my_hybrid_program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for hybrid program: [[Media:Hello_hybrid.c | Hello_hybrid.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* $SLURM_CPUS_PER_TASK is only set if the &#039;--cpus-per-task&#039; option is specified.&lt;br /&gt;
&lt;br /&gt;
== How to request specific node(s) at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_nodelist -w] (or [https://slurm.schedmd.com/sbatch.html#OPT_nodelist --nodelist]) option, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -w &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also see [https://slurm.schedmd.com/sbatch.html#OPT_nodefile -F] (or [https://slurm.schedmd.com/sbatch.html#OPT_nodefile --nodefile]) option.&lt;br /&gt;
&lt;br /&gt;
== How to exclude specific nodes from job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_exclude -x] (or [https://slurm.schedmd.com/sbatch.html#OPT_exclude --exclude]) option, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -x &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get exclusive jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--exclusive&#039; option on job submission. This makes sure that there will be no other jobs running on your nodes. Very useful for benchmarking!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* --exclusive option does &#039;&#039;&#039;not&#039;&#039;&#039; mean that you automatically get full access to all the resources which the node might provide without explicitly requesting them.&lt;br /&gt;
&lt;br /&gt;
== How to avoid sharing nodes with other users? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--exclusive=user&#039; option on job submission. This will still allow multiple jobs of one and the same user on the nodes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Depending on configuration, exclusive=user may (and probably will) be the default node access policy on JUSTUS 2.&lt;br /&gt;
&lt;br /&gt;
==  How to submit batch job without job script? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_wrap --wrap] option.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch --nodes=2 --ntasks-per-node=16 --wrap &amp;quot;sleep 600&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; May be useful for testing purposes.&lt;br /&gt;
&lt;br /&gt;
= JOB MONITORING AND CONTROL =&lt;br /&gt;
&lt;br /&gt;
== How to prevent Slurm performance degradation? ==&lt;br /&gt;
&lt;br /&gt;
Almost every invocation of a Slurm client command (e.g. squeue, sacct, sprio or sshare) sends a remote procedure call (RPC) to the Slurm control daemon and/or database. &lt;br /&gt;
If enough remote procedure calls come in at once, this can result in a degradation of performance of the Slurm services for all users, possibly resulting in a denial of service. &lt;br /&gt;
&lt;br /&gt;
Therefore, &#039;&#039;&#039;do not run Slurm client commands that send remote procedure calls from loops in shell scripts or other programs&#039;&#039;&#039; (such as &#039;watch squeue&#039;). Always ensure to limit calls to squeue, sstat, sacct etc. to the minimum necessary for the information you are trying to gather. &lt;br /&gt;
&lt;br /&gt;
Slurm does collect RPC counts and timing statistics by message type and user for diagnostic purposes.&lt;br /&gt;
&lt;br /&gt;
== How to view information about submitted jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] command, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue                  # all jobs owned by user (all jobs owned by all users for admins)&lt;br /&gt;
$ squeue --me             # all jobs owned by user (same as squeue for regular users)&lt;br /&gt;
$ squeue -u &amp;lt;username&amp;gt;    # jobs of specific user&lt;br /&gt;
$ squeue -t PENDING       # pending jobs only&lt;br /&gt;
$ squeue -t RUNNING       # running jobs only&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* The output format of [https://slurm.schedmd.com/squeue.html squeue] (and most other Slurm commands) is highly configurable to your needs. Look for the --format or --Format options.&lt;br /&gt;
&lt;br /&gt;
* Every invocation of squeue sends a remote procedure call to the Slurm database server. &#039;&#039;&#039;Do not run squeue or other Slurm client commands from loops in shell scripts or other programs&#039;&#039;&#039; as this can result in a degradation of performance. Ensure that programs limit calls to squeue to the minimum necessary for the information you are trying to gather.&lt;br /&gt;
&lt;br /&gt;
== How to cancel jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/scancel.html scancel] command, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scancel &amp;lt;jobid&amp;gt;          # cancel specific job&lt;br /&gt;
$ scancel &amp;lt;jobid&amp;gt;_&amp;lt;index&amp;gt;  # cancel indexed job in a job array&lt;br /&gt;
$ scancel -u &amp;lt;username&amp;gt;    # cancel all jobs of specific user&lt;br /&gt;
$ scancel -u &amp;lt;username&amp;gt; -i # cancel all jobs of specific user interactively&lt;br /&gt;
$ scancel -t PENDING       # cancel pending jobs&lt;br /&gt;
$ scancel -t RUNNING       # cancel running jobs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to show job script of a running job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/scontrol.html scontrol] command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol write batch_script &amp;lt;job_id&amp;gt; &amp;lt;file&amp;gt;&lt;br /&gt;
$ scontrol write batch_script &amp;lt;job_id&amp;gt; -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If file name is omitted default file name will be slurm-&amp;lt;job_id&amp;gt;.sh&lt;br /&gt;
* If file name is - (i.e. dash) job script will be written to stdout.&lt;br /&gt;
&lt;br /&gt;
== How to get estimated start time of a job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ squeue --start&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* Estimated start times are dynamic and can change at any moment. Exact start times of individual jobs are usually unpredictable.&lt;br /&gt;
* Slurm will report N/A for the start time estimate if nodes are not currently being reserved by the scheduler for the job to run on.&lt;br /&gt;
&lt;br /&gt;
== How to show remaining walltime of running jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] with format option &amp;quot;%L&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $ squeue -t r -o &amp;quot;%u %i %L&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to check priority of jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] with format options &amp;quot;%Q&amp;quot; and/or &amp;quot;%p&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue -o &amp;quot;%8i %8u %15a %.10r %.10L %.5D %.10Q&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sprio.html sprio] command to display the priority components (age/fairshare/...) for each job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sprio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;[https://slurm.schedmd.com/sshare.html sshare] command for listing the shares of associations, e.g. accounts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sshare&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to prevent (hold) jobs from being scheduled for execution? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol hold &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to unhold job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol release &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to suspend a running job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol suspend &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to resume a suspended job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol resume &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to requeue (cancel and resubmit) a particular job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol requeue &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to monitor resource usage of running job(s)? ==&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;[https://slurm.schedmd.com/sstat.html sstat] command.&lt;br /&gt;
&lt;br /&gt;
&#039;sstat -e&#039; command shows a list of fields that can be specified with the &#039;--format&#039; option.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sstat --format=JobId,AveCPU,AveRSS,MaxRSS -j &amp;lt;jobid&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will show average CPU time, average and maximum memory consumption of all tasks in the running job.&lt;br /&gt;
Ideally, average CPU time equals the number of cores allocated for the job multiplied by the current run time of the job. &lt;br /&gt;
The maximum memory consumption gives an estimate of the peak amount of memory actually needed so far. This can be compared with the amount of memory requested for the job. Over-requesting memory can result in significant waste of compute resources.       &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Users can also ssh into compute nodes that they have one or more running jobs on. Once logged in, they can use standard Linux process monitoring tools like ps, (h)top, free, vmstat, iostat, du, ...&lt;br /&gt;
&lt;br /&gt;
* Users can also attach an interactive shell under an already allocated job by running the following command: &amp;lt;pre&amp;gt;srun --jobid &amp;lt;job&amp;gt; --overlap --pty /bin/bash&amp;lt;/pre&amp;gt; Once logged in, they can again use standard Linux process monitoring tools like ps, (h)top, free, vmstat, iostat, du, ... For a single node job the user does not even need to know the node that the job is running on. For a multinode job, the user can still use &#039;-w &amp;lt;node&amp;gt;&#039; option to specify a specific node.&lt;br /&gt;
&lt;br /&gt;
== How to get detailed job information ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show job 1234  # For job id 1234&lt;br /&gt;
$ scontrol show jobs      # For all jobs&lt;br /&gt;
$ scontrol -o show jobs   # One line per job&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to modify a pending/running job? ==&lt;br /&gt;
&lt;br /&gt;
Use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ scontrol update JobId=&amp;lt;jobid&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g.: &amp;lt;pre&amp;gt;$ scontrol update JobId=42 TimeLimit=7-0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will modify the time limit of the job to 7 days.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Update requests for &#039;&#039;&#039;running&#039;&#039;&#039; jobs are mostly restricted to Slurm administrators. In particular, only an administrator can increase the TimeLimit of a job.&lt;br /&gt;
&lt;br /&gt;
== How to show accounting data of completed jobs ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sacct.html sacct] command.&lt;br /&gt;
&lt;br /&gt;
&#039;sacct -e&#039; command shows a list of fields that can be&lt;br /&gt;
specified with the &#039;--format&#039; option.&lt;br /&gt;
&lt;br /&gt;
== How to retrieve job history and accounting? ==&lt;br /&gt;
&lt;br /&gt;
For a specific job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -j &amp;lt;jobid&amp;gt; --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a specific user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Default time window is the current day.&lt;br /&gt;
&lt;br /&gt;
Starting from a specific date:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; -S 2020-01-15 --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within a time window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; -S 2020-01-15 -E 2020-01-31 --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
You can also set the environment variable $SACCT_FORMAT to specify the default format. To get a general idea of how efficiently a job utilized its resources, the following format can be used:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export SACCT_FORMAT=&amp;quot;JobID,JobName,Elapsed,NCPUs,TotalCPU,CPUTime,ReqMem,MaxRSS,MaxDiskRead,MaxDiskWrite,State,ExitCode&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To find how efficiently the CPUs were used, divide TotalCPU by CPUTime. To find how efficiently memory were used, devide MaxRSS by ReqMem. But be aware that sacct memory usage measurement doesn&#039;t catch very rapid memory spikes. If your job got killed for running out of memory, it &#039;&#039;&#039;did run out of memory&#039;&#039;&#039; even if sacct reports a lower memory usage than would trigger an out-of-memory-kill. A job that reads or writes excessively to disk might be bogged down significantly by I/O operations.&lt;br /&gt;
&lt;br /&gt;
== How to get efficiency information of completed job(s)? ==&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;pre&amp;gt;$ seff &amp;lt;jobid&amp;gt; &amp;lt;/pre&amp;gt; command for some brief information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; It is good practice to have a look at the efficiency of your job(s) on completion &#039;&#039;&#039;and we expect you to do so&#039;&#039;&#039;. This way you can improve your job specifications in the future.&lt;br /&gt;
&lt;br /&gt;
== How to get complete field values from sstat and sacct commands? ==&lt;br /&gt;
&lt;br /&gt;
When using the [https://slurm.schedmd.com/sacct.html#OPT_format --format] option for listing various fields you can put a %NUMBER afterwards to specify how many characters should be printed.&lt;br /&gt;
&lt;br /&gt;
E.g. &#039;--format=User%30&#039; will print 30 characters for the user name (right justified).  A %-30 will print 30 characters left justified.&lt;br /&gt;
&lt;br /&gt;
sstat and sacct also provide the &#039;--parsable&#039; and &#039;--parsable2&#039; option to always print full field values delimited with a pipe &#039;|&#039; character by default.&lt;br /&gt;
The delimiting character can be specified by using the &#039;--delimiter&#039; option, e.g. &#039;--delimiter=&amp;quot;,&amp;quot;&#039; for comma separated values.&lt;br /&gt;
&lt;br /&gt;
== How to retrieve job records for all jobs running/pending at a certain point in time? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sacct.html sacct] with [https://slurm.schedmd.com/sacct.html#OPT_state -s &amp;lt;state&amp;gt;] and [https://slurm.schedmd.com/sacct.html#OPT_starttime -S &amp;lt;start time&amp;gt;] options, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$  sacct -n -a -X -S 2021-04-01T00:00:00 -s R -o JobID,User%15,Account%10,NCPUS,NNodes,NodeList%1500&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; When specifying the state &amp;quot;-s &amp;lt;state&amp;gt;&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the start time &amp;quot;-S &amp;lt;start time&amp;gt;&amp;quot;, the default &lt;br /&gt;
time window will be set to end time &amp;quot;-E&amp;quot; equal to start time. Thus, you will get a snapshot of all running/pending &lt;br /&gt;
jobs at the instance given by &amp;quot;-S &amp;lt;start time&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How to get a parsable list of hostnames from $SLURM_JOB_NODELIST? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show hostnames $SLURM_JOB_NODELIST&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ADMINISTRATION =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Most commands in this section are restricted to system administrators.&lt;br /&gt;
&lt;br /&gt;
== How to stop Slurm from scheduling jobs? ==&lt;br /&gt;
&lt;br /&gt;
You can stop Slurm from scheduling jobs on a per partition basis by&lt;br /&gt;
setting that partition&#039;s state to DOWN. Set its state UP to resume&lt;br /&gt;
scheduling. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update PartitionName=foo State=DOWN&lt;br /&gt;
$ scontrol update PartitionName=foo State=UP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to print actual hardware configuration of a node? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ slurmd -C   # print hardware configuration plus uptime;  &lt;br /&gt;
$ slurmd -G   # print generic resource configuration;       to be run on compute nodes only&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to reboot (all) nodes as soon as they become idle? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol reboot ASAP nextstate=RESUME &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;  # specific nodes&lt;br /&gt;
$ scontrol reboot ASAP nextstate=RESUME ALL              # all nodes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to cancel pending reboot of nodes? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol cancel_reboot &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to check current node status? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show node &amp;lt;node&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to instruct all Slurm daemons to re-read the configuration file ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol reconfigure&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to prevent a user from submitting new jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use the following [https://slurm.schedmd.com/sacctmgr.html sacctmgr] command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr update user &amp;lt;username&amp;gt; set maxsubmitjobs=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Job submission is then rejected with the following message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch job.slurm&lt;br /&gt;
sbatch: error: AssocMaxSubmitJobLimit&lt;br /&gt;
sbatch: error: Batch job submission failed: Job violates accounting/QOS policy (job submit limit, user&#039;s size and/or time limits)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use the following command to release the limit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr update user &amp;lt;username&amp;gt; set maxsubmitjobs=-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to drain node(s)? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update NodeName=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; State=DRAIN Reason=&amp;quot;Some Reason&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Reason is mandatory.&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; just set state DOWN to drain nodes. This will kill any active jobs that may run on that nodes.&lt;br /&gt;
&lt;br /&gt;
== How to list reason for nodes being drained or down? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -R&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to resume node state? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update NodeName=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; State=RESUME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to create a reservation on nodes? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/reservations.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol create reservation user=root starttime=now duration=UNLIMITED flags=maint,ignore_jobs nodes=ALL&lt;br /&gt;
$ scontrol create reservation user=root starttime=2020-12-24T17:00 duration=12:00:00 flags=maint,ignore_jobs nodes=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
$ scontrol show reservation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Add &amp;quot;FLEX&amp;quot; flag to allow jobs that qualify for the reservation to start before the reservation begins (and continue after it starts). &lt;br /&gt;
Add &amp;quot;MAGNETIC&amp;quot; flag to attract jobs that qualify for the reservation to run in that reservation without having requested it at submit time.&lt;br /&gt;
&lt;br /&gt;
== How to create a floating reservation on nodes? ==&lt;br /&gt;
&lt;br /&gt;
Use the flag &amp;quot;TIME_FLOAT&amp;quot; and a start time that is relative to the current time (use the keyword &amp;quot;now&amp;quot;).&lt;br /&gt;
In the example below, the nodes are prevented from starting any jobs exceeding a walltime of 2 days.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol create reservation user=root starttime=now+2days duration=UNLIMITED flags=maint,ignore_jobs,time_float nodes=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Floating reservation are not intended to run jobs, but to prevent long running jobs from being initiated on specific nodes. Attempts by users to make use of a floating reservation will be rejected. When ready to perform the maintenance, place the nodes in DRAIN state and delete the reservation.&lt;br /&gt;
&lt;br /&gt;
== How to use a reservation? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch --reservation=foo_6 ... script.slurm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to delete a reservation? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol delete ReservationName=foo_6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get node oriented information similar to &#039;mdiag -n&#039;? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -N -l&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fields can be individually customized. See [https://slurm.schedmd.com/sinfo.html sinfo] man page. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -N --format=&amp;quot;%8N %12P %.4C %.8O %.6m %.6e %.8T %.20E&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NODELIST PARTITION    CPUS CPU_LOAD MEMORY FREE_M    STATE               REASON&lt;br /&gt;
n0001    standard*    0/16     0.01 128000 120445     idle                 none&lt;br /&gt;
n0002    standard*    0/16     0.01 128000 120438     idle                 none&lt;br /&gt;
n0003    standard*    0/0/      N/A 128000    N/A    down*       Not responding&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get node oriented information similar to &#039;pbsnodes&#039;? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show nodes                     # One paragraph per node (all nodes)&lt;br /&gt;
$ scontrol show nodes &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;     # One paragraph per node (specified nodes) &lt;br /&gt;
$ scontrol -o show nodes                  # One line per node (all nodes)&lt;br /&gt;
$ scontrol -o show nodes &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;  # One line per node (specified nodes)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to update multiple jobs of a user with a single scontrol command? ==&lt;br /&gt;
&lt;br /&gt;
Not possible. But you can e.g. use squeue to build the script taking&lt;br /&gt;
advantage of its filtering and formatting options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue -tpd -h -o &amp;quot;scontrol update jobid=%i priority=1000&amp;quot; &amp;gt;my.script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also identify the list of jobs and add them to the JobID all at once, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update JobID=123 qos=reallylargeqos&lt;br /&gt;
$ scontrol update JobID=123,456,789 qos=reallylargeqos&lt;br /&gt;
$ scontrol update JobID=[123-400],[500-600] qos=reallylargeqos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option is to use the JobName, if all the jobs have the same name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update JobName=&amp;quot;foobar&amp;quot; UserID=johndoe qos=reallylargeqos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, Slurm does not allow the UserID filter alone.&lt;br /&gt;
&lt;br /&gt;
== How to create a new account? ==&lt;br /&gt;
&lt;br /&gt;
Add account at top level in association tree:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add account &amp;lt;accountname&amp;gt; Cluster=justus Description=&amp;quot;Account description&amp;quot; Organization=&amp;quot;none&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add account as child of some parent account in association tree:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add account &amp;lt;accountname&amp;gt; parent=&amp;lt;parent_accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to move account to another parent? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify account name=&amp;lt;accountname&amp;gt; set parent=&amp;lt;new_parent_accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to delete an account? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr delete account name=&amp;lt;accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to add a new user? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; DefaultAccount=&amp;lt;accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to add/remove users from an account? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; account=&amp;lt;accountname&amp;gt;                  # Add user to account&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; account=&amp;lt;accountname2&amp;gt;                 # Add user to a second account&lt;br /&gt;
$ sacctmgr remove user &amp;lt;username&amp;gt; where account=&amp;lt;accountname&amp;gt;         # Remove user from this account&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to change default account of a user? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
$ sacctmgr modify user where user=&amp;lt;username&amp;gt; set DefaultAccount=&amp;lt;default_account&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The user must already be associated with the account you want to set as default.&lt;br /&gt;
&lt;br /&gt;
== How to show account information? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr show assoc&lt;br /&gt;
$ sacctmgr show assoc tree&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
* On JUSTUS 2 registered compute projects (&amp;quot;Rechenvorhaben&amp;quot;) are uniquely mapped to Slurm accounts of the same name.&lt;br /&gt;
&lt;br /&gt;
== How to implement user resource throttling policies? ==&lt;br /&gt;
&lt;br /&gt;
Quoting from https://bugs.schedmd.com/show_bug.cgi?id=3600#c4&lt;br /&gt;
&lt;br /&gt;
 With Slurm, the associations are meant to establish base limits on the&lt;br /&gt;
 defined partitions, accounts and users. Because limits propagate down&lt;br /&gt;
 through the association tree, you only need to define limits at a high&lt;br /&gt;
 level and those limits will be applied to all partitions, accounts and&lt;br /&gt;
 users that are below it (parent to child). You can also override those&lt;br /&gt;
 high level (parent) limits by explicitly setting different limits at&lt;br /&gt;
 any lower level (on the child). So using the association tree is the&lt;br /&gt;
 best way to get some base limits applied that you want for most cases. &lt;br /&gt;
 QOS&#039;s are meant to override any of those base limits for exceptional&lt;br /&gt;
 cases. Like Maui, you can use QOS&#039;s to set a different priority.&lt;br /&gt;
 Again, the QOS would be overriding the base priority that could be set&lt;br /&gt;
 in the associations.&lt;br /&gt;
&lt;br /&gt;
== How to set a resource limit for an individual user? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/resource_limits.html&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set maxjobs=1            # Limit maximum number of running jobs for user&lt;br /&gt;
$ sacctmgr list assoc user=&amp;lt;username&amp;gt; format=user,maxjobs  # Show that limit&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set maxjobs=-1           # Remove that limit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to retrieve historical resource usage for a specific user or account ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sreport.html sreport] command.&lt;br /&gt;
&lt;br /&gt;
Examples: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sreport cluster UserUtilizationByAccount Start=2021-01-01 End=2021-12-31 -t Hours user=&amp;lt;username&amp;gt;    # Report cluster utilization of given user broken down by accounts&lt;br /&gt;
$ sreport cluster AccountUtilizationByUser Start=2021-01-01 End=2021-12-31 -t Hours account=&amp;lt;account&amp;gt;  # Report cluster utilization of given account broken down by users    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* By default CPU resources will be reported. Use &#039;-T&#039; option for other trackable resources, e.g. &#039;-T cpu,mem,gres/gpu,gres/scratch&#039;.&lt;br /&gt;
* On JUSTUS 2 registered compute projects (&amp;quot;Rechenvorhaben&amp;quot;) are uniquely mapped to Slurm accounts of the same name. Thus, &#039;AccountUtilizationByUser&#039; can also be used to report the aggregated cluster utilization of compute projects.&lt;br /&gt;
* Can be executed by regular users as well in which case Slurm will only report their own usage records (but along with the total usage of the associated account in the case of &#039;AccountUtilizationByUser&#039;).&lt;br /&gt;
&lt;br /&gt;
== How to fix/reset a user&#039;s RawUsage value? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; where Account=&amp;lt;account&amp;gt; set RawUsage=&amp;lt;number&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to create/modify/delete QOSes? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/qos.html&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr show qos                                      # Show existing QOSes&lt;br /&gt;
$ sacctmgr add qos verylong                              # Create new QOS verylong&lt;br /&gt;
$ sacctmgr modify qos verylong set MaxWall=28-00:00:00   # Set maximum walltime limit&lt;br /&gt;
$ sacctmgr modify qos verylong set MaxTRESPerUser=cpu=4  # Set maximum maximum number of CPUS a user can allocate at a given time&lt;br /&gt;
$ sacctmgr modify qos verylong set flags=denyonlimit     # Prevent submission if job requests exceed any limits of QOS&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set qos+=verylong      # Add a QOS to a user account&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set qos-=verylong      # Remove a QOS from a user account&lt;br /&gt;
$ sacctmgr delete qos verylong                           # Delete that QOS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to find (and fix) runaway jobs? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sacctmgr show runaway&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* Runaway jobs are orphaned jobs that don&#039;t exist in the Slurm controller but have a start and no end time in the Slurm data base. Runaway jobs mess with accounting and affects new jobs of users who have too many runaway jobs. &lt;br /&gt;
* If there are jobs in this state this command will also provide an option to fix them. This will set the end time for each job to the latest out of the start, eligible, or submit times, and set the state to completed.&lt;br /&gt;
&lt;br /&gt;
== How to show a history of database transactions? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sacctmgr list transactions&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Useful to get timestamps for when a user/account/qos has been created/modified/removed etc.&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwForCluster_JUSTUS_2_Slurm_HOWTO&amp;diff=16423</id>
		<title>BwForCluster JUSTUS 2 Slurm HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwForCluster_JUSTUS_2_Slurm_HOWTO&amp;diff=16423"/>
		<updated>2026-09-17T12:21:22Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* How to retrieve historical resource usage for a specific user or account? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Justus2}}&lt;br /&gt;
&lt;br /&gt;
This is a collection of howtos and convenient Slurm commands for JUSTUS 2.&lt;br /&gt;
&lt;br /&gt;
Some commands behave slightly different depending on whether they are executed &lt;br /&gt;
by a system administrator or by a regular user, as Slurm prevents regular users from accessing critical system information and viewing job and usage information of other users.  &lt;br /&gt;
&lt;br /&gt;
= GENERAL INFORMATION =&lt;br /&gt;
&lt;br /&gt;
== How to find a general quick start user guide? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/quickstart.html&lt;br /&gt;
&lt;br /&gt;
== How to find Slurm FAQ? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/faq.html&lt;br /&gt;
&lt;br /&gt;
== How to find a Slurm cheat sheet? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/pdfs/summary.pdf&lt;br /&gt;
&lt;br /&gt;
== How to find Slurm tutorials? ==&lt;br /&gt;
&lt;br /&gt;
https://slurm.schedmd.com/tutorials.html&lt;br /&gt;
&lt;br /&gt;
== How to get more information on Slurm? ==&lt;br /&gt;
&lt;br /&gt;
(Almost) every Slurm command has a man page. Use it.&lt;br /&gt;
&lt;br /&gt;
Online versions: https://slurm.schedmd.com/man_index.html&lt;br /&gt;
&lt;br /&gt;
== How to find hardware specific details about JUSTUS 2? ==&lt;br /&gt;
&lt;br /&gt;
See our Wiki page: [[Hardware and Architecture (bwForCluster JUSTUS 2)|Hardware and Architecture]]&lt;br /&gt;
&lt;br /&gt;
= JOB SUBMISSION =&lt;br /&gt;
&lt;br /&gt;
== How to submit a serial batch job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html sbatch]  command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch &amp;lt;job-script&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample job script template for serial job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# 8 GB memory required per node&lt;br /&gt;
#SBATCH --mem=8G&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=serial_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=serial_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=serial_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# Run serial program&lt;br /&gt;
./my_serial_program&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for serial program: [[Media:Hello_serial.c | Hello_serial.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* --nodes=1 and --ntasks-per-node=1 may be replaced by --ntasks=1.&lt;br /&gt;
* If not specified, stdout and stderr are both written to slurm-%j.out.&lt;br /&gt;
&lt;br /&gt;
== How to find working sample scripts for my program? ==&lt;br /&gt;
&lt;br /&gt;
Most software modules for applications provide working sample batch scripts.&lt;br /&gt;
Check with [[Software_Modules_Lmod#Module_specific_help | module help]] command, e.g. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module help chem/vasp     # display module help for VASP&lt;br /&gt;
$ module help math/matlab   # display module help for Matlab&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to harden job scripts against common errors? ==&lt;br /&gt;
&lt;br /&gt;
The bash shell provides several options that support users in disclosing hidden bugs and writing safer job scripts.&lt;br /&gt;
In order to activate these safeguard settings users can insert the following lines in their scripts (after all #SBATCH directives):    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
set -o errexit   # (or set -e) cause batch script to exit immediately when a command fails.&lt;br /&gt;
set -o pipefail  # cause batch script to exit immediately also when the command that failed is embedded in a pipeline&lt;br /&gt;
set -o nounset   # (or set -u) causes the script to treat unset variables as an error and exit immediately &lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to submit an interactive job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/salloc.html salloc] command, e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ salloc --nodes=1 --ntasks-per-node=8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
In previous Slurm versions &amp;lt; 20.11 the use of [https://slurm.schedmd.com/srun.html srun] has been the recommended way for launching interactive jobs, e.g.:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ srun --nodes=1 --ntasks-per-node=8 --pty bash &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although this still works with current Slurm versions this is considered &#039;&#039;&#039;deprecated &#039;&#039;&#039; for current Slurm versions as it may cause issues when launching additional jobs steps from within the interactive job environment. Use [https://slurm.schedmd.com/salloc.html salloc] command.&lt;br /&gt;
&lt;br /&gt;
== How to enable X11 forwarding for an interactive job? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--x11&#039; flag, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ salloc --nodes=1 --ntasks-per-node=8 --x11     # run shell with X11 forwarding enabled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
* For X11 forwarding to work, you must also enable X11 forwarding for your ssh login from your local computer to the cluster, i.e.:&lt;br /&gt;
 &amp;lt;pre&amp;gt;local&amp;gt; ssh -X &amp;lt;username&amp;gt;@justus2.uni-ulm.de&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to convert Moab batch job scripts to Slurm? ==&lt;br /&gt;
&lt;br /&gt;
Replace Moab/Torque job specification flags and environment variables in your job&lt;br /&gt;
scripts by their corresponding Slurm counterparts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commonly used Moab job specification flags and their Slurm equivalents&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| width=750px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Moab (msub) !! Slurm (sbatch)&lt;br /&gt;
|-&lt;br /&gt;
| Script directive                            || #MSUB                                  || #SBATCH&lt;br /&gt;
|-&lt;br /&gt;
| Job name                                    || -N &amp;lt;name&amp;gt;                              || --job-name=&amp;lt;name&amp;gt;  (-J &amp;lt;name&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Account                                     || -A &amp;lt;account&amp;gt;                           || --account=&amp;lt;account&amp;gt; (-A &amp;lt;account&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Queue                                       || -q &amp;lt;queue&amp;gt;                             || --partition=&amp;lt;partition&amp;gt; (-p &amp;lt;partition&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Wall time limit                             || -l walltime=&amp;lt;hh:mm:ss&amp;gt;                 || --time=&amp;lt;hh:mm:ss&amp;gt; (-t &amp;lt;hh:mm:ss&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Node count                                  || -l nodes=&amp;lt;count&amp;gt;                       || --nodes=&amp;lt;count&amp;gt; (-N &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Core count                                  || -l procs=&amp;lt;count&amp;gt;                       || --ntasks=&amp;lt;count&amp;gt; (-n &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Process count per node                      || -l ppn=&amp;lt;count&amp;gt;                         || --ntasks-per-node=&amp;lt;count&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Core count per process                      ||                                        || --cpus-per-task=&amp;lt;count&amp;gt; (-c &amp;lt;count&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Memory limit per node                       || -l mem=&amp;lt;limit&amp;gt;                         || --mem=&amp;lt;limit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Memory limit per process                    || -l pmem=&amp;lt;limit&amp;gt;                        || --mem-per-cpu=&amp;lt;limit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Job array                                   || -t &amp;lt;array indices&amp;gt;                     || --array=&amp;lt;indices&amp;gt; (-a &amp;lt;indices&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Node exclusive job                          || -l naccesspolicy=singlejob             || --exclusive&lt;br /&gt;
|-&lt;br /&gt;
| Initial working directory                   || -d &amp;lt;directory&amp;gt; (default: $HOME)        || --chdir=&amp;lt;directory&amp;gt; (-D &amp;lt;directory&amp;gt;) (default: submission directory)&lt;br /&gt;
|-&lt;br /&gt;
| Standard output file                        || -o &amp;lt;file path&amp;gt;                         || --output=&amp;lt;file&amp;gt; (-o &amp;lt;file&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Standard error file                         || -e &amp;lt;file path&amp;gt;                         || --error=&amp;lt;file&amp;gt;  (-e &amp;lt;file&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Combine stdout/stderr to stdout             || -j oe                                  || --output=&amp;lt;combined stdout/stderr file&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mail notification events                    || -m &amp;lt;event&amp;gt;                             || --mail-type=&amp;lt;events&amp;gt; (valid types include: NONE, BEGIN, END, FAIL, ALL)&lt;br /&gt;
|-&lt;br /&gt;
| Export environment to job                   || -V                                     || --export=ALL (default)&lt;br /&gt;
|-&lt;br /&gt;
| Don&#039;t export environment to job             || (default)                              || --export=NONE&lt;br /&gt;
|-&lt;br /&gt;
| Export environment variables to job         || -v &amp;lt;var[=value][,var2=value2[, ...]]&amp;gt;  || --export=&amp;lt;var[=value][,var2=value2[,...]]&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* Default initial job working directory is $HOME for Moab. For Slurm the default working directory is where you submit your job from.&lt;br /&gt;
* By default Moab does not export any environment variables to the job&#039;s runtime environment. With Slurm most of the login environment variables are exported to your job&#039;s runtime environment. This includes environment variables from software modules that were loaded at job submission time (and also $HOSTNAME variable).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commonly used Moab/Torque script environment variables and their Slurm equivalents&lt;br /&gt;
&lt;br /&gt;
{| width=750px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Information                 !! Moab                !! Torque               !! Slurm                                     &lt;br /&gt;
|-&lt;br /&gt;
| Job name                     || $MOAB_JOBNAME        || $PBS_JOBNAME        || $SLURM_JOB_NAME                           &lt;br /&gt;
|-&lt;br /&gt;
| Job ID                       || $MOAB_JOBID          || $PBS_JOBID          || $SLURM_JOB_ID                             &lt;br /&gt;
|-&lt;br /&gt;
| Submit directory             || $MOAB_SUBMITDIR      || $PBS_O_WORKDIR      || $SLURM_SUBMIT_DIR                         &lt;br /&gt;
|-&lt;br /&gt;
| Number of nodes allocated    || $MOAB_NODECOUNT      || $PBS_NUM_NODES      || $SLURM_JOB_NUM_NODES (and: $SLURM_NNODES) &lt;br /&gt;
|-&lt;br /&gt;
| Node list                    || $MOAB_NODELIST       || cat $PBS_NODEFILE   || $SLURM_JOB_NODELIST                       &lt;br /&gt;
|-&lt;br /&gt;
| Number of processes          || $MOAB_PROCCOUNT      || $PBS_TASKNUM        || $SLURM_NTASKS                             &lt;br /&gt;
|-&lt;br /&gt;
| Requested tasks per node     || ---                    || $PBS_NUM_PPN        || $SLURM_NTASKS_PER_NODE                    &lt;br /&gt;
|-&lt;br /&gt;
| Requested CPUs per task      || ---                  || ---                 || $SLURM_CPUS_PER_TASK                      &lt;br /&gt;
|-&lt;br /&gt;
| Job array index              || $MOAB_JOBARRAYINDEX  || $PBS_ARRAY_INDEX    || $SLURM_ARRAY_TASK_ID                      &lt;br /&gt;
|-&lt;br /&gt;
| Job array range              || $MOAB_JOBARRAYRANGE  || -                   || $SLURM_ARRAY_TASK_COUNT                   &lt;br /&gt;
|-&lt;br /&gt;
| Queue name                   || $MOAB_CLASS          || $PBS_QUEUE          || $SLURM_JOB_PARTITION                      &lt;br /&gt;
|-&lt;br /&gt;
| QOS name                     || $MOAB_QOS            || ---                 || $SLURM_JOB_QOS                            &lt;br /&gt;
|-&lt;br /&gt;
| Number of processes per node | ---                   || $PBS_NUM_PPN        || $SLURM_TASKS_PER_NODE                     &lt;br /&gt;
|-&lt;br /&gt;
| Job user                     || $MOAB_USER           || $PBS_O_LOGNAME      || $SLURM_JOB_USER                           &lt;br /&gt;
|-&lt;br /&gt;
| Hostname                     || $MOAB_MACHINE        || $PBS_O_HOST         || $SLURMD_NODENAME                          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* See [https://slurm.schedmd.com/sbatch.html sbatch] man page for a complete list of flags and environment variables.&lt;br /&gt;
&lt;br /&gt;
== How to emulate Moab output file names? ==&lt;br /&gt;
&lt;br /&gt;
Use the following directives:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --output=&amp;quot;%x.o%j&amp;quot;&lt;br /&gt;
#SBATCH --error=&amp;quot;%x.e%j&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to pass command line arguments to the job script? ==&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;pre&amp;gt;$ sbatch &amp;lt;job-script&amp;gt; arg1 arg2 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside the job script the arguments can be accessed as $1, $2, ...&lt;br /&gt;
&lt;br /&gt;
E.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
infile=&amp;quot;$1&amp;quot;&lt;br /&gt;
outfile=&amp;quot;$2&amp;quot;&lt;br /&gt;
./my_serial_program &amp;lt; &amp;quot;$infile&amp;quot; &amp;gt; &amp;quot;$outfile&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; use $1, $2, ... in &amp;quot;#SBATCH&amp;quot; lines. These parameters can be used only within the regular shell script.&lt;br /&gt;
&lt;br /&gt;
== How to request local scratch (SSD/NVMe) at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--gres=scratch:nnn&#039; option to allocate nnn GB of local (i.e. node-local) scratch space for the entire job.&lt;br /&gt;
&lt;br /&gt;
Example: &#039;--gres=scratch:100&#039; will allocate 100 GB scratch space on a locally attached NVMe device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; add any unit (such as --gres=scratch:100G). This would be treated as requesting an amount of 10^9 * 100GB of scratch space.&lt;br /&gt;
&lt;br /&gt;
* Multinode jobs get nnn GB of local scratch space on every node of the job.&lt;br /&gt;
&lt;br /&gt;
* Environment variable &#039;&#039;&#039;$SCRATCH&#039;&#039;&#039; will point to &lt;br /&gt;
** /scratch/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt; when local scratch has been requested. This will be on locally attached SSD/NVMe devices.&lt;br /&gt;
** /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt; when no local scratch has been requested. This will be in memory and, thus, be limited in size.&lt;br /&gt;
&lt;br /&gt;
* Environment variable &#039;&#039;&#039;$TMPDIR&#039;&#039;&#039; always points to /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt;. This will always be in memory and, thus, limited in size.&lt;br /&gt;
&lt;br /&gt;
* For backward compatibility environment variable $RAMDISK always points to /tmp/&amp;lt;user&amp;gt;.&amp;lt;jobid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Scratch space allocation in /scratch will be enforced by quota limits&lt;br /&gt;
&lt;br /&gt;
* Data written to $TMPDIR will always count against allocated memory.&lt;br /&gt;
&lt;br /&gt;
* Data written to local scratch space will automatically be removed at the end of the job.&lt;br /&gt;
&lt;br /&gt;
== How to request GPGPU nodes at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--gres=gpu:&amp;lt;count&amp;gt;&#039; option to allocate 1 or 2 GPUs per node for the entire job.&lt;br /&gt;
&lt;br /&gt;
Example: &#039;--gres=gpu:1&#039; will allocate one GPU per node for this job.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GPGPU nodes are equipped with two Nvidia V100S cards &lt;br /&gt;
&lt;br /&gt;
* Environment variables $CUDA_VISIBLE_DEVICES, $SLURM_JOB_GPUS and $GPU_DEVICE_ORDINAL will denote card(s) allocated for the job.&lt;br /&gt;
&lt;br /&gt;
* CUDA Toolkit is available as software module devel/cuda.&lt;br /&gt;
&lt;br /&gt;
== How to clean-up or save files before a job times out? ==&lt;br /&gt;
&lt;br /&gt;
Possibly you would like to clean up the work directory or save intermediate result files in case a job times out.&lt;br /&gt;
&lt;br /&gt;
The following sample script may serve as a blueprint for implementing a pre-termination function to perform clean-up or file recovery actions. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# 2 GB memory required per node&lt;br /&gt;
#SBATCH --mem=2G&lt;br /&gt;
# Request 10 GB local scratch space&lt;br /&gt;
#SBATCH --gres=scratch:10&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=10:00&lt;br /&gt;
# Send the USR1 signal 120 seconds before end of time limit&lt;br /&gt;
#SBATCH --signal=B:USR1@120&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=signal_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=signal_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=signal_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Define the signal handler function&lt;br /&gt;
# Note: This is not executed here, but rather when the associated &lt;br /&gt;
# signal is received by the shell.&lt;br /&gt;
finalize_job()&lt;br /&gt;
{&lt;br /&gt;
    # Do whatever cleanup you want here. In this example we copy&lt;br /&gt;
    # output file(s) back to $SLURM_SUBMIT_DIR, but you may implement &lt;br /&gt;
    # your own job finalization code here.&lt;br /&gt;
    echo &amp;quot;function finalize_job called at `date`&amp;quot;&lt;br /&gt;
    cd $SCRATCH&lt;br /&gt;
    mkdir -vp &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/results&lt;br /&gt;
    tar czvf &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/results/${SLURM_JOB_ID}.tgz output*.txt&lt;br /&gt;
    exit&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Call finalize_job function as soon as we receive USR1 signal&lt;br /&gt;
trap &#039;finalize_job&#039; USR1&lt;br /&gt;
&lt;br /&gt;
# Copy input files for this job to the scratch directory (if needed).&lt;br /&gt;
# Note: Environment variable $SCRATCH always points to a scratch directory &lt;br /&gt;
# automatically created for this job. Environment variable $SLURM_SUBMIT_DIR &lt;br /&gt;
# points to the path where this script was submitted from.&lt;br /&gt;
# Example:&lt;br /&gt;
# cp -v &amp;quot;$SLURM_SUBMIT_DIR&amp;quot;/input*.txt &amp;quot;$SCRATCH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Change working directory to local scratch directory&lt;br /&gt;
cd &amp;quot;$SCRATCH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# This is where the actual work is done. In this case we just create &lt;br /&gt;
# a sample output file for 900 (=15*60) seconds, but since we asked &lt;br /&gt;
# Slurm for 600 seconds only it will not be able finish within this &lt;br /&gt;
# wall time.&lt;br /&gt;
# Note: It is important to run this task in the background &lt;br /&gt;
# by placing the &amp;amp; symbol at the end. Otherwise the signal handler &lt;br /&gt;
# would not be executed until that process has finished, which is not &lt;br /&gt;
# what we want.&lt;br /&gt;
(for i in `seq 15`; do echo &amp;quot;Hello World at `date +%H:%M:%S`.&amp;quot;; sleep 60; done) &amp;gt;output.txt 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
# Note: The command above is just for illustration. Normally you would just run&lt;br /&gt;
# my_program &amp;gt;output.txt 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
# Tell the shell to wait for background task(s) to finish. &lt;br /&gt;
# Note: This is important because otherwise the parent shell &lt;br /&gt;
# (this script) would proceed (and terminate) without waiting for &lt;br /&gt;
# background task(s) to finish.&lt;br /&gt;
wait&lt;br /&gt;
&lt;br /&gt;
# If we get here, the job did not time out but finished in time.&lt;br /&gt;
&lt;br /&gt;
# Release user defined signal handler for USR1&lt;br /&gt;
trap - USR1&lt;br /&gt;
&lt;br /&gt;
# Do regular cleanup and save files. In this example we simply call &lt;br /&gt;
# the same function that we defined as a signal handler above, but you &lt;br /&gt;
# may implement your own code here. &lt;br /&gt;
finalize_job&lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The number of seconds specified in --signal option must match the runtime of the pre-termination function and must not exceed 65535 seconds.&lt;br /&gt;
&lt;br /&gt;
* Due to the resolution of event handling by Slurm, the signal may be sent a little earlier than specified.&lt;br /&gt;
&lt;br /&gt;
== How to submit a multithreaded batch job? ==&lt;br /&gt;
&lt;br /&gt;
Sample job script template for a job running one multithreaded program instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate one node&lt;br /&gt;
#SBATCH --nodes=1&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
# Number of cores per program instance&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
# 8 GB memory required per node&lt;br /&gt;
#SBATCH --mem=8G&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=multithreaded_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=multithreaded_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=multithreaded_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
export MKL_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
&lt;br /&gt;
# Run multithreaded program&lt;br /&gt;
./my_multithreaded_program&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for multithreaded program: [[Media:Hello_openmp.c | Hello_openmp.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* In our configuration each physical core is considered a &amp;quot;CPU&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* On JUSTUS 2 it is recommended to specify a number of cores per task (&#039;--cpus-per-task&#039;) that is either an integer divisor of 24 or (at most) 48.&lt;br /&gt;
&lt;br /&gt;
* Required memory can also by specified per allocated CPU with &#039;--mem-per-cpu&#039; option. &lt;br /&gt;
&lt;br /&gt;
* The &#039;--mem&#039; and &#039;--mem-per-cpu&#039; options are mutually exclusive.&lt;br /&gt;
&lt;br /&gt;
==  How to submit an array job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_array -a] (or [https://slurm.schedmd.com/sbatch.html#OPT_array --array]) option, e.g. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -a 1-16%8 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will submit 16 tasks to be executed, each one indexed by SLURM_ARRAY_TASK_ID ranging from 1 to 16, but will limit the number of simultaneously running tasks from this job array to 8.&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an array job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Number of cores per individual array task&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --array=1-16%8&lt;br /&gt;
#SBATCH --mem=4G&lt;br /&gt;
#SBATCH --time=01:00:00&lt;br /&gt;
#SBATCH --job-name=array_job&lt;br /&gt;
#SBATCH --output=array_job-%A_%a.out&lt;br /&gt;
#SBATCH --error=array_job-%A_%a.err&lt;br /&gt;
&lt;br /&gt;
# Load software modules as needed, e.g.&lt;br /&gt;
# module load foo/bar&lt;br /&gt;
&lt;br /&gt;
# Print the task id.&lt;br /&gt;
echo &amp;quot;My SLURM_ARRAY_TASK_ID: &amp;quot; $SLURM_ARRAY_TASK_ID&lt;br /&gt;
&lt;br /&gt;
# Add lines here to run your computations, e.g.&lt;br /&gt;
# ./my_program &amp;lt;input.$SLURM_ARRAY_TASK_ID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Placeholder %A will be replaced by the master job id, %a will be replaced by the array task id.&lt;br /&gt;
&lt;br /&gt;
* Every sub job in an array job will have its own unique environment variable $SLURM_JOB_ID. Environment variable $SLURM_ARRAY_JOB_ID  will be set to the first job array index value for all tasks.&lt;br /&gt;
&lt;br /&gt;
* The remaining options in the sample job script are the same as the options used in other, non-array jobs. In the example above, we are requesting that each array task be allocated 1 CPU (--ntasks=1) and 4 GB of memory (--mem=4G) for up to one hour (--time=01:00:00).&lt;br /&gt;
&lt;br /&gt;
* More information: https://slurm.schedmd.com/job_array.html&lt;br /&gt;
&lt;br /&gt;
== How to delay the start of a job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_begin -b] (or [https://slurm.schedmd.com/sbatch.html#OPT_begin --begin]) option in order to defer the allocation of the job until the specified time.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch --begin=20:00 ...               # job can start after 8 p.m. &lt;br /&gt;
sbatch --begin=now+1hour ...           # job can start 1 hour after submission&lt;br /&gt;
sbatch --begin=teatime ...             # job can start at teatime (4 p.m.)&lt;br /&gt;
sbatch --begin=2023-12-24T20:00:00 ... # job can start after specified date/time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to submit dependency (chain) jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_dependency -d] (or [https://slurm.schedmd.com/sbatch.html#OPT_dependency --dependency]) option, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -d afterany:123456 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will defer the submitted job until the specified job 123456 has terminated.&lt;br /&gt;
&lt;br /&gt;
Slurm supports a number of different dependency types, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-d after:123456      # job can begin execution after the specified job has begun execution&lt;br /&gt;
-d afterany:123456   # job can begin execution after the specified job has finished&lt;br /&gt;
-d afternotok:123456 # job can begin execution after the specified job has failed (exit code not equal zero)&lt;br /&gt;
-d afterok:123456    # job can begin execution after the specified job has successfully finished (exit code zero)&lt;br /&gt;
-d singleton         # job can begin execution after any previously job with the same job name and user have finished&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Multiple jobs can be specified by separating their job ids by colon characters (:), e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $ sbatch -d afterany:123456:123457 ... &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will defer the submitted job until the specified jobs 123456 and 123457 have both finished.&lt;br /&gt;
&lt;br /&gt;
== How to deal with invalid job dependencies? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_kill-on-invalid-dep --kill-on-invalid-dep=yes] option in order to automatically terminate jobs which can never run due to invalid dependencies. By default the job stays pending with reason &#039;DependencyNeverSatisfied&#039; to allow review and appropriate action by the user.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; A job dependency may also become invalid if a job has been submitted with &#039;-d afterok:&amp;lt;jobid&amp;gt;&#039; but the specified dependency job has failed, e.g. because it timed out (i.e. exceeded its wall time limit).&lt;br /&gt;
&lt;br /&gt;
== How to submit an MPI batch job? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/mpi_guide.html&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an MPI job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Allocate two nodes&lt;br /&gt;
#SBATCH --nodes=2&lt;br /&gt;
# Number of program instances to be executed&lt;br /&gt;
#SBATCH --ntasks-per-node=48&lt;br /&gt;
# Allocate 32 GB memory per node&lt;br /&gt;
#SBATCH --mem=32gb&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=mpi_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=mpi_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=mpi_job-%j.err&lt;br /&gt;
&lt;br /&gt;
# Add lines here to run your computations, e.g.&lt;br /&gt;
#&lt;br /&gt;
# Option 1: Lauch MPI tasks by using mpirun&lt;br /&gt;
#&lt;br /&gt;
# for OpenMPI and GNU compiler:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/gnu&lt;br /&gt;
# module load mpi/openmpi&lt;br /&gt;
# mpirun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# for Intel MPI and Intel complier:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/intel&lt;br /&gt;
# module load mpi/impi&lt;br /&gt;
# mpirun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# Option 2: Launch MPI tasks by using srun&lt;br /&gt;
#&lt;br /&gt;
# for OpenMPI and GNU compiler:&lt;br /&gt;
#&lt;br /&gt;
# module load compiler/gnu&lt;br /&gt;
# module load mpi/openmpi&lt;br /&gt;
# srun ./my_mpi_program&lt;br /&gt;
#&lt;br /&gt;
# for Intel MPI and Intel compiler:&lt;br /&gt;
#&lt;br /&gt;
module load compiler/intel&lt;br /&gt;
module load mpi/impi&lt;br /&gt;
srun  ./my_mpi_program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for MPI program: [[Media:Hello_mpi.c | Hello_mpi.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* SchedMD recommends to use srun and many (most?) sites do so as well. The rationale is that srun is more tightly integrated with the scheduler and provides more consistent and reliable resource tracking and accounting for individual jobs and job steps. mpirun may behave differently for different MPI implementations and versions. There are reports that claim &amp;quot;strange behavior&amp;quot; of mpirun especially when using task affinity and core binding. Using srun is supposed to resolve these issues and is therefore highly recommended.&lt;br /&gt;
* Do not run batch jobs that launch a large number (hundreds or thousands) short running (few minutes or less) MPI programs, e.g. from a shell loop. Every single MPI invocation does generate its own job step and sends remote procedure calls to the Slurm controller server. This can result in degradation of performance for both, Slurm and the application, especially if many of that jobs happen to run at the same time. Jobs of that kind can even get stuck without showing any further activity until hitting the wall time limit. For high throughput computing (e.g. processing a large number of files with every single task running independently from each other and very shortly), consider a more appropriate parallelization paradigm that invokes independent serial (non-MPI) processes in parallel at the same time. This approach is sometimes referred to as &amp;quot;[https://en.wikipedia.org/wiki/Embarrassingly_parallel pleasingly parallel]&amp;quot; workload. GNU Parallel is a shell tool that facilitates executing serial tasks in parallel. On JUSTUS 2 this tool is available as a software module &amp;quot;system/parallel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How to submit a hybrid MPI/OpenMP job? ==&lt;br /&gt;
&lt;br /&gt;
Sample job script template for an hybrid job:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Number of nodes to allocate&lt;br /&gt;
#SBATCH --nodes=4&lt;br /&gt;
# Number of MPI instances (ranks) to be executed per node&lt;br /&gt;
#SBATCH --ntasks-per-node=2&lt;br /&gt;
# Number of threads per MPI instance&lt;br /&gt;
#SBATCH --cpus-per-task=24&lt;br /&gt;
# Allocate 8 GB memory per node&lt;br /&gt;
#SBATCH --mem=8gb&lt;br /&gt;
# Maximum run time of job&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
# Give job a reasonable name&lt;br /&gt;
#SBATCH --job-name=hybrid_job&lt;br /&gt;
# File name for standard output (%j will be replaced by job id)&lt;br /&gt;
#SBATCH --output=hybrid_job-%j.out&lt;br /&gt;
# File name for error output&lt;br /&gt;
#SBATCH --error=hybrid_job-%j.err&lt;br /&gt;
&lt;br /&gt;
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
export MKL_NUM_THREADS=${SLURM_CPUS_PER_TASK}&lt;br /&gt;
&lt;br /&gt;
module load compiler/intel&lt;br /&gt;
module load mpi/impi&lt;br /&gt;
srun ./my_hybrid_program&lt;br /&gt;
&lt;br /&gt;
# or:&lt;br /&gt;
# mpirun ./my_hybrid_program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample code for hybrid program: [[Media:Hello_hybrid.c | Hello_hybrid.c]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* $SLURM_CPUS_PER_TASK is only set if the &#039;--cpus-per-task&#039; option is specified.&lt;br /&gt;
&lt;br /&gt;
== How to request specific node(s) at job submission? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_nodelist -w] (or [https://slurm.schedmd.com/sbatch.html#OPT_nodelist --nodelist]) option, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -w &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also see [https://slurm.schedmd.com/sbatch.html#OPT_nodefile -F] (or [https://slurm.schedmd.com/sbatch.html#OPT_nodefile --nodefile]) option.&lt;br /&gt;
&lt;br /&gt;
== How to exclude specific nodes from job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_exclude -x] (or [https://slurm.schedmd.com/sbatch.html#OPT_exclude --exclude]) option, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch -x &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get exclusive jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--exclusive&#039; option on job submission. This makes sure that there will be no other jobs running on your nodes. Very useful for benchmarking!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* --exclusive option does &#039;&#039;&#039;not&#039;&#039;&#039; mean that you automatically get full access to all the resources which the node might provide without explicitly requesting them.&lt;br /&gt;
&lt;br /&gt;
== How to avoid sharing nodes with other users? ==&lt;br /&gt;
&lt;br /&gt;
Use &#039;--exclusive=user&#039; option on job submission. This will still allow multiple jobs of one and the same user on the nodes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Depending on configuration, exclusive=user may (and probably will) be the default node access policy on JUSTUS 2.&lt;br /&gt;
&lt;br /&gt;
==  How to submit batch job without job script? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sbatch.html#OPT_wrap --wrap] option.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch --nodes=2 --ntasks-per-node=16 --wrap &amp;quot;sleep 600&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; May be useful for testing purposes.&lt;br /&gt;
&lt;br /&gt;
= JOB MONITORING AND CONTROL =&lt;br /&gt;
&lt;br /&gt;
== How to prevent Slurm performance degradation? ==&lt;br /&gt;
&lt;br /&gt;
Almost every invocation of a Slurm client command (e.g. squeue, sacct, sprio or sshare) sends a remote procedure call (RPC) to the Slurm control daemon and/or database. &lt;br /&gt;
If enough remote procedure calls come in at once, this can result in a degradation of performance of the Slurm services for all users, possibly resulting in a denial of service. &lt;br /&gt;
&lt;br /&gt;
Therefore, &#039;&#039;&#039;do not run Slurm client commands that send remote procedure calls from loops in shell scripts or other programs&#039;&#039;&#039; (such as &#039;watch squeue&#039;). Always ensure to limit calls to squeue, sstat, sacct etc. to the minimum necessary for the information you are trying to gather. &lt;br /&gt;
&lt;br /&gt;
Slurm does collect RPC counts and timing statistics by message type and user for diagnostic purposes.&lt;br /&gt;
&lt;br /&gt;
== How to view information about submitted jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] command, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue                  # all jobs owned by user (all jobs owned by all users for admins)&lt;br /&gt;
$ squeue --me             # all jobs owned by user (same as squeue for regular users)&lt;br /&gt;
$ squeue -u &amp;lt;username&amp;gt;    # jobs of specific user&lt;br /&gt;
$ squeue -t PENDING       # pending jobs only&lt;br /&gt;
$ squeue -t RUNNING       # running jobs only&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* The output format of [https://slurm.schedmd.com/squeue.html squeue] (and most other Slurm commands) is highly configurable to your needs. Look for the --format or --Format options.&lt;br /&gt;
&lt;br /&gt;
* Every invocation of squeue sends a remote procedure call to the Slurm database server. &#039;&#039;&#039;Do not run squeue or other Slurm client commands from loops in shell scripts or other programs&#039;&#039;&#039; as this can result in a degradation of performance. Ensure that programs limit calls to squeue to the minimum necessary for the information you are trying to gather.&lt;br /&gt;
&lt;br /&gt;
== How to cancel jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/scancel.html scancel] command, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scancel &amp;lt;jobid&amp;gt;          # cancel specific job&lt;br /&gt;
$ scancel &amp;lt;jobid&amp;gt;_&amp;lt;index&amp;gt;  # cancel indexed job in a job array&lt;br /&gt;
$ scancel -u &amp;lt;username&amp;gt;    # cancel all jobs of specific user&lt;br /&gt;
$ scancel -u &amp;lt;username&amp;gt; -i # cancel all jobs of specific user interactively&lt;br /&gt;
$ scancel -t PENDING       # cancel pending jobs&lt;br /&gt;
$ scancel -t RUNNING       # cancel running jobs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to show job script of a running job? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/scontrol.html scontrol] command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol write batch_script &amp;lt;job_id&amp;gt; &amp;lt;file&amp;gt;&lt;br /&gt;
$ scontrol write batch_script &amp;lt;job_id&amp;gt; -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If file name is omitted default file name will be slurm-&amp;lt;job_id&amp;gt;.sh&lt;br /&gt;
* If file name is - (i.e. dash) job script will be written to stdout.&lt;br /&gt;
&lt;br /&gt;
== How to get estimated start time of a job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ squeue --start&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* Estimated start times are dynamic and can change at any moment. Exact start times of individual jobs are usually unpredictable.&lt;br /&gt;
* Slurm will report N/A for the start time estimate if nodes are not currently being reserved by the scheduler for the job to run on.&lt;br /&gt;
&lt;br /&gt;
== How to show remaining walltime of running jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] with format option &amp;quot;%L&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $ squeue -t r -o &amp;quot;%u %i %L&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to check priority of jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/squeue.html squeue] with format options &amp;quot;%Q&amp;quot; and/or &amp;quot;%p&amp;quot;, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue -o &amp;quot;%8i %8u %15a %.10r %.10L %.5D %.10Q&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sprio.html sprio] command to display the priority components (age/fairshare/...) for each job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sprio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;[https://slurm.schedmd.com/sshare.html sshare] command for listing the shares of associations, e.g. accounts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sshare&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to prevent (hold) jobs from being scheduled for execution? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol hold &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to unhold job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol release &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to suspend a running job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol suspend &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to resume a suspended job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol resume &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to requeue (cancel and resubmit) a particular job? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol requeue &amp;lt;job_id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to monitor resource usage of running job(s)? ==&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;[https://slurm.schedmd.com/sstat.html sstat] command.&lt;br /&gt;
&lt;br /&gt;
&#039;sstat -e&#039; command shows a list of fields that can be specified with the &#039;--format&#039; option.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sstat --format=JobId,AveCPU,AveRSS,MaxRSS -j &amp;lt;jobid&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will show average CPU time, average and maximum memory consumption of all tasks in the running job.&lt;br /&gt;
Ideally, average CPU time equals the number of cores allocated for the job multiplied by the current run time of the job. &lt;br /&gt;
The maximum memory consumption gives an estimate of the peak amount of memory actually needed so far. This can be compared with the amount of memory requested for the job. Over-requesting memory can result in significant waste of compute resources.       &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Users can also ssh into compute nodes that they have one or more running jobs on. Once logged in, they can use standard Linux process monitoring tools like ps, (h)top, free, vmstat, iostat, du, ...&lt;br /&gt;
&lt;br /&gt;
* Users can also attach an interactive shell under an already allocated job by running the following command: &amp;lt;pre&amp;gt;srun --jobid &amp;lt;job&amp;gt; --overlap --pty /bin/bash&amp;lt;/pre&amp;gt; Once logged in, they can again use standard Linux process monitoring tools like ps, (h)top, free, vmstat, iostat, du, ... For a single node job the user does not even need to know the node that the job is running on. For a multinode job, the user can still use &#039;-w &amp;lt;node&amp;gt;&#039; option to specify a specific node.&lt;br /&gt;
&lt;br /&gt;
== How to get detailed job information ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show job 1234  # For job id 1234&lt;br /&gt;
$ scontrol show jobs      # For all jobs&lt;br /&gt;
$ scontrol -o show jobs   # One line per job&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to modify a pending/running job? ==&lt;br /&gt;
&lt;br /&gt;
Use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ scontrol update JobId=&amp;lt;jobid&amp;gt; ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g.: &amp;lt;pre&amp;gt;$ scontrol update JobId=42 TimeLimit=7-0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will modify the time limit of the job to 7 days.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Update requests for &#039;&#039;&#039;running&#039;&#039;&#039; jobs are mostly restricted to Slurm administrators. In particular, only an administrator can increase the TimeLimit of a job.&lt;br /&gt;
&lt;br /&gt;
== How to show accounting data of completed job(s)? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sacct.html sacct] command.&lt;br /&gt;
&lt;br /&gt;
&#039;sacct -e&#039; command shows a list of fields that can be&lt;br /&gt;
specified with the &#039;--format&#039; option.&lt;br /&gt;
&lt;br /&gt;
== How to retrieve job history and accounting? ==&lt;br /&gt;
&lt;br /&gt;
For a specific job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -j &amp;lt;jobid&amp;gt; --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a specific user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Default time window is the current day.&lt;br /&gt;
&lt;br /&gt;
Starting from a specific date:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; -S 2020-01-15 --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within a time window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacct -u &amp;lt;user&amp;gt; -S 2020-01-15 -E 2020-01-31 --format=User,JobID,Jobname,partition,state,time,start,end,elapsed,MaxRss,MaxVMSize,nnodes,ncpus,nodelist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
You can also set the environment variable $SACCT_FORMAT to specify the default format. To get a general idea of how efficiently a job utilized its resources, the following format can be used:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export SACCT_FORMAT=&amp;quot;JobID,JobName,Elapsed,NCPUs,TotalCPU,CPUTime,ReqMem,MaxRSS,MaxDiskRead,MaxDiskWrite,State,ExitCode&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To find how efficiently the CPUs were used, divide TotalCPU by CPUTime. To find how efficiently memory were used, devide MaxRSS by ReqMem. But be aware that sacct memory usage measurement doesn&#039;t catch very rapid memory spikes. If your job got killed for running out of memory, it &#039;&#039;&#039;did run out of memory&#039;&#039;&#039; even if sacct reports a lower memory usage than would trigger an out-of-memory-kill. A job that reads or writes excessively to disk might be bogged down significantly by I/O operations.&lt;br /&gt;
&lt;br /&gt;
== How to get efficiency information of completed job(s)? ==&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;pre&amp;gt;$ seff &amp;lt;jobid&amp;gt; &amp;lt;/pre&amp;gt; command for some brief information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; It is good practice to have a look at the efficiency of your job(s) on completion &#039;&#039;&#039;and we expect you to do so&#039;&#039;&#039;. This way you can improve your job specifications in the future.&lt;br /&gt;
&lt;br /&gt;
== How to get complete field values from sstat and sacct commands? ==&lt;br /&gt;
&lt;br /&gt;
When using the [https://slurm.schedmd.com/sacct.html#OPT_format --format] option for listing various fields you can put a %NUMBER afterwards to specify how many characters should be printed.&lt;br /&gt;
&lt;br /&gt;
E.g. &#039;--format=User%30&#039; will print 30 characters for the user name (right justified).  A %-30 will print 30 characters left justified.&lt;br /&gt;
&lt;br /&gt;
sstat and sacct also provide the &#039;--parsable&#039; and &#039;--parsable2&#039; option to always print full field values delimited with a pipe &#039;|&#039; character by default.&lt;br /&gt;
The delimiting character can be specified by using the &#039;--delimiter&#039; option, e.g. &#039;--delimiter=&amp;quot;,&amp;quot;&#039; for comma separated values.&lt;br /&gt;
&lt;br /&gt;
== How to retrieve job records for all jobs running/pending at a certain point in time? ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sacct.html sacct] with [https://slurm.schedmd.com/sacct.html#OPT_state -s &amp;lt;state&amp;gt;] and [https://slurm.schedmd.com/sacct.html#OPT_starttime -S &amp;lt;start time&amp;gt;] options, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$  sacct -n -a -X -S 2021-04-01T00:00:00 -s R -o JobID,User%15,Account%10,NCPUS,NNodes,NodeList%1500&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; When specifying the state &amp;quot;-s &amp;lt;state&amp;gt;&amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; the start time &amp;quot;-S &amp;lt;start time&amp;gt;&amp;quot;, the default &lt;br /&gt;
time window will be set to end time &amp;quot;-E&amp;quot; equal to start time. Thus, you will get a snapshot of all running/pending &lt;br /&gt;
jobs at the instance given by &amp;quot;-S &amp;lt;start time&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How to get a parsable list of hostnames from $SLURM_JOB_NODELIST? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show hostnames $SLURM_JOB_NODELIST&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ADMINISTRATION =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Most commands in this section are restricted to system administrators.&lt;br /&gt;
&lt;br /&gt;
== How to stop Slurm from scheduling jobs? ==&lt;br /&gt;
&lt;br /&gt;
You can stop Slurm from scheduling jobs on a per partition basis by&lt;br /&gt;
setting that partition&#039;s state to DOWN. Set its state UP to resume&lt;br /&gt;
scheduling. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update PartitionName=foo State=DOWN&lt;br /&gt;
$ scontrol update PartitionName=foo State=UP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to print actual hardware configuration of a node? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ slurmd -C   # print hardware configuration plus uptime;  &lt;br /&gt;
$ slurmd -G   # print generic resource configuration;       to be run on compute nodes only&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to reboot (all) nodes as soon as they become idle? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol reboot ASAP nextstate=RESUME &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;  # specific nodes&lt;br /&gt;
$ scontrol reboot ASAP nextstate=RESUME ALL              # all nodes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to cancel pending reboot of nodes? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol cancel_reboot &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to check current node status? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show node &amp;lt;node&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to instruct all Slurm daemons to re-read the configuration file ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol reconfigure&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to prevent a user from submitting new jobs? ==&lt;br /&gt;
&lt;br /&gt;
Use the following [https://slurm.schedmd.com/sacctmgr.html sacctmgr] command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr update user &amp;lt;username&amp;gt; set maxsubmitjobs=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Job submission is then rejected with the following message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch job.slurm&lt;br /&gt;
sbatch: error: AssocMaxSubmitJobLimit&lt;br /&gt;
sbatch: error: Batch job submission failed: Job violates accounting/QOS policy (job submit limit, user&#039;s size and/or time limits)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use the following command to release the limit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr update user &amp;lt;username&amp;gt; set maxsubmitjobs=-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to drain node(s)? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update NodeName=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; State=DRAIN Reason=&amp;quot;Some Reason&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Reason is mandatory.&lt;br /&gt;
&lt;br /&gt;
* Do &#039;&#039;&#039;not&#039;&#039;&#039; just set state DOWN to drain nodes. This will kill any active jobs that may run on that nodes.&lt;br /&gt;
&lt;br /&gt;
== How to list reason for nodes being drained or down? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -R&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to resume node state? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update NodeName=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt; State=RESUME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to create a reservation on nodes? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/reservations.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol create reservation user=root starttime=now duration=UNLIMITED flags=maint,ignore_jobs nodes=ALL&lt;br /&gt;
$ scontrol create reservation user=root starttime=2020-12-24T17:00 duration=12:00:00 flags=maint,ignore_jobs nodes=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
$ scontrol show reservation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Add &amp;quot;FLEX&amp;quot; flag to allow jobs that qualify for the reservation to start before the reservation begins (and continue after it starts). &lt;br /&gt;
Add &amp;quot;MAGNETIC&amp;quot; flag to attract jobs that qualify for the reservation to run in that reservation without having requested it at submit time.&lt;br /&gt;
&lt;br /&gt;
== How to create a floating reservation on nodes? ==&lt;br /&gt;
&lt;br /&gt;
Use the flag &amp;quot;TIME_FLOAT&amp;quot; and a start time that is relative to the current time (use the keyword &amp;quot;now&amp;quot;).&lt;br /&gt;
In the example below, the nodes are prevented from starting any jobs exceeding a walltime of 2 days.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol create reservation user=root starttime=now+2days duration=UNLIMITED flags=maint,ignore_jobs,time_float nodes=&amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Floating reservation are not intended to run jobs, but to prevent long running jobs from being initiated on specific nodes. Attempts by users to make use of a floating reservation will be rejected. When ready to perform the maintenance, place the nodes in DRAIN state and delete the reservation.&lt;br /&gt;
&lt;br /&gt;
== How to use a reservation? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sbatch --reservation=foo_6 ... script.slurm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to delete a reservation? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol delete ReservationName=foo_6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get node oriented information similar to &#039;mdiag -n&#039;? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -N -l&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fields can be individually customized. See [https://slurm.schedmd.com/sinfo.html sinfo] man page. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sinfo -N --format=&amp;quot;%8N %12P %.4C %.8O %.6m %.6e %.8T %.20E&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NODELIST PARTITION    CPUS CPU_LOAD MEMORY FREE_M    STATE               REASON&lt;br /&gt;
n0001    standard*    0/16     0.01 128000 120445     idle                 none&lt;br /&gt;
n0002    standard*    0/16     0.01 128000 120438     idle                 none&lt;br /&gt;
n0003    standard*    0/0/      N/A 128000    N/A    down*       Not responding&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to get node oriented information similar to &#039;pbsnodes&#039;? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show nodes                     # One paragraph per node (all nodes)&lt;br /&gt;
$ scontrol show nodes &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;     # One paragraph per node (specified nodes) &lt;br /&gt;
$ scontrol -o show nodes                  # One line per node (all nodes)&lt;br /&gt;
$ scontrol -o show nodes &amp;lt;node1&amp;gt;,&amp;lt;node2&amp;gt;  # One line per node (specified nodes)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to update multiple jobs of a user with a single scontrol command? ==&lt;br /&gt;
&lt;br /&gt;
Not possible. But you can e.g. use squeue to build the script taking&lt;br /&gt;
advantage of its filtering and formatting options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue -tpd -h -o &amp;quot;scontrol update jobid=%i priority=1000&amp;quot; &amp;gt;my.script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also identify the list of jobs and add them to the JobID all at once, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update JobID=123 qos=reallylargeqos&lt;br /&gt;
$ scontrol update JobID=123,456,789 qos=reallylargeqos&lt;br /&gt;
$ scontrol update JobID=[123-400],[500-600] qos=reallylargeqos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option is to use the JobName, if all the jobs have the same name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol update JobName=&amp;quot;foobar&amp;quot; UserID=johndoe qos=reallylargeqos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, Slurm does not allow the UserID filter alone.&lt;br /&gt;
&lt;br /&gt;
== How to create a new account? ==&lt;br /&gt;
&lt;br /&gt;
Add account at top level in association tree:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add account &amp;lt;accountname&amp;gt; Cluster=justus Description=&amp;quot;Account description&amp;quot; Organization=&amp;quot;none&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add account as child of some parent account in association tree:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add account &amp;lt;accountname&amp;gt; parent=&amp;lt;parent_accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to move account to another parent? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify account name=&amp;lt;accountname&amp;gt; set parent=&amp;lt;new_parent_accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to delete an account? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr delete account name=&amp;lt;accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to add a new user? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; DefaultAccount=&amp;lt;accountname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to add/remove users from an account? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; account=&amp;lt;accountname&amp;gt;                  # Add user to account&lt;br /&gt;
$ sacctmgr add user &amp;lt;username&amp;gt; account=&amp;lt;accountname2&amp;gt;                 # Add user to a second account&lt;br /&gt;
$ sacctmgr remove user &amp;lt;username&amp;gt; where account=&amp;lt;accountname&amp;gt;         # Remove user from this account&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to change default account of a user? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
$ sacctmgr modify user where user=&amp;lt;username&amp;gt; set DefaultAccount=&amp;lt;default_account&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The user must already be associated with the account you want to set as default.&lt;br /&gt;
&lt;br /&gt;
== How to show account information? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr show assoc&lt;br /&gt;
$ sacctmgr show assoc tree&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; &lt;br /&gt;
* On JUSTUS 2 registered compute projects (&amp;quot;Rechenvorhaben&amp;quot;) are uniquely mapped to Slurm accounts of the same name.&lt;br /&gt;
&lt;br /&gt;
== How to implement user resource throttling policies? ==&lt;br /&gt;
&lt;br /&gt;
Quoting from https://bugs.schedmd.com/show_bug.cgi?id=3600#c4&lt;br /&gt;
&lt;br /&gt;
 With Slurm, the associations are meant to establish base limits on the&lt;br /&gt;
 defined partitions, accounts and users. Because limits propagate down&lt;br /&gt;
 through the association tree, you only need to define limits at a high&lt;br /&gt;
 level and those limits will be applied to all partitions, accounts and&lt;br /&gt;
 users that are below it (parent to child). You can also override those&lt;br /&gt;
 high level (parent) limits by explicitly setting different limits at&lt;br /&gt;
 any lower level (on the child). So using the association tree is the&lt;br /&gt;
 best way to get some base limits applied that you want for most cases. &lt;br /&gt;
 QOS&#039;s are meant to override any of those base limits for exceptional&lt;br /&gt;
 cases. Like Maui, you can use QOS&#039;s to set a different priority.&lt;br /&gt;
 Again, the QOS would be overriding the base priority that could be set&lt;br /&gt;
 in the associations.&lt;br /&gt;
&lt;br /&gt;
== How to set a resource limit for an individual user? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/resource_limits.html&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set maxjobs=1            # Limit maximum number of running jobs for user&lt;br /&gt;
$ sacctmgr list assoc user=&amp;lt;username&amp;gt; format=user,maxjobs  # Show that limit&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set maxjobs=-1           # Remove that limit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to retrieve historical resource usage for a specific user or account ==&lt;br /&gt;
&lt;br /&gt;
Use [https://slurm.schedmd.com/sreport.html sreport] command.&lt;br /&gt;
&lt;br /&gt;
Examples: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sreport cluster UserUtilizationByAccount Start=2021-01-01 End=2021-12-31 -t Hours user=&amp;lt;username&amp;gt;    # Report cluster utilization of given user broken down by accounts&lt;br /&gt;
$ sreport cluster AccountUtilizationByUser Start=2021-01-01 End=2021-12-31 -t Hours account=&amp;lt;account&amp;gt;  # Report cluster utilization of given account broken down by users    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* By default CPU resources will be reported. Use &#039;-T&#039; option for other trackable resources, e.g. &#039;-T cpu,mem,gres/gpu,gres/scratch&#039;.&lt;br /&gt;
* On JUSTUS 2 registered compute projects (&amp;quot;Rechenvorhaben&amp;quot;) are uniquely mapped to Slurm accounts of the same name. Thus, &#039;AccountUtilizationByUser&#039; can also be used to report the aggregated cluster utilization of compute projects.&lt;br /&gt;
* Can be executed by regular users as well in which case Slurm will only report their own usage records (but along with the total usage of the associated account in the case of &#039;AccountUtilizationByUser&#039;).&lt;br /&gt;
&lt;br /&gt;
== How to fix/reset a user&#039;s RawUsage value? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; where Account=&amp;lt;account&amp;gt; set RawUsage=&amp;lt;number&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to create/modify/delete QOSes? ==&lt;br /&gt;
&lt;br /&gt;
Suggested reading: https://slurm.schedmd.com/qos.html&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sacctmgr show qos                                      # Show existing QOSes&lt;br /&gt;
$ sacctmgr add qos verylong                              # Create new QOS verylong&lt;br /&gt;
$ sacctmgr modify qos verylong set MaxWall=28-00:00:00   # Set maximum walltime limit&lt;br /&gt;
$ sacctmgr modify qos verylong set MaxTRESPerUser=cpu=4  # Set maximum maximum number of CPUS a user can allocate at a given time&lt;br /&gt;
$ sacctmgr modify qos verylong set flags=denyonlimit     # Prevent submission if job requests exceed any limits of QOS&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set qos+=verylong      # Add a QOS to a user account&lt;br /&gt;
$ sacctmgr modify user &amp;lt;username&amp;gt; set qos-=verylong      # Remove a QOS from a user account&lt;br /&gt;
$ sacctmgr delete qos verylong                           # Delete that QOS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to find (and fix) runaway jobs? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sacctmgr show runaway&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039; &lt;br /&gt;
* Runaway jobs are orphaned jobs that don&#039;t exist in the Slurm controller but have a start and no end time in the Slurm data base. Runaway jobs mess with accounting and affects new jobs of users who have too many runaway jobs. &lt;br /&gt;
* If there are jobs in this state this command will also provide an option to fix them. This will set the end time for each job to the latest out of the start, eligible, or submit times, and set the state to completed.&lt;br /&gt;
&lt;br /&gt;
== How to show a history of database transactions? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sacctmgr list transactions&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Useful to get timestamps for when a user/account/qos has been created/modified/removed etc.&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=When_to_use_an_HPC_Cluster&amp;diff=16421</id>
		<title>When to use an HPC Cluster</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=When_to_use_an_HPC_Cluster&amp;diff=16421"/>
		<updated>2026-09-14T11:32:21Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* When not to use HPC computers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have calculations to do - should I try using one of the bwHPC clusters for my tasks?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== When to use HPC computers ==&lt;br /&gt;
&lt;br /&gt;
You can benefit from an HPC-Cluster if:&lt;br /&gt;
&lt;br /&gt;
#  You can run many separate calculations in parallel&lt;br /&gt;
#  Software can efficiently divide your problem into many smaller problems that run in parallel&lt;br /&gt;
#  You need more RAM (memory) than your computer can provide&lt;br /&gt;
#  You need more GPUs and have no other source&lt;br /&gt;
#  You need to process large amounts of data that do not fit on your computer&lt;br /&gt;
&lt;br /&gt;
== When &#039;&#039;&#039;not&#039;&#039;&#039; to use HPC computers ==&lt;br /&gt;
&lt;br /&gt;
You will probably not have a big benefit from using HPC when:&lt;br /&gt;
&lt;br /&gt;
* Your calculation runs in serial (only on one compute core is used, things cannot run in parallel) and you have few calculations&lt;br /&gt;
* Your workflow requires that you run one calculation, then retrieve data to analyze it locally, then run the next calculation&lt;br /&gt;
* You have different computational needs than raw computing power. &lt;br /&gt;
&lt;br /&gt;
Except 3) or 4) of &amp;quot;when to use a cluster&amp;quot; force you to use the clusters anyway.&lt;br /&gt;
&lt;br /&gt;
If you need other computational tasks of the likes of &lt;br /&gt;
&lt;br /&gt;
* hosting a web server&lt;br /&gt;
* hosting a database&lt;br /&gt;
* having a test bed for software development&lt;br /&gt;
* having systems for university courses on linux, programming languages, etc&lt;br /&gt;
* having an environment for student projects or theses,&lt;br /&gt;
&lt;br /&gt;
then the bwCloud offering virtual machines might be the right thing for you&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;amp;rarr; https://bwcloud-os.de/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Misconceptions == &lt;br /&gt;
=== &amp;quot;Everything will be faster&amp;quot; ===&lt;br /&gt;
[[File:BwUniCluster_2.0_Feb2020_1024x423.jpg|right|thumb|alt=bwUniCluster2.0 |upright=1| many compute cores: Every &amp;quot;tray&amp;quot; in these racks contains 1-4 computers, every computer typically has 50-200 compute cores. ]]&lt;br /&gt;
&lt;br /&gt;
The performance of a single compute core is not higher than that of your typical desktop computer. The main things we can offer are:&lt;br /&gt;
&lt;br /&gt;
* Many compute cores &lt;br /&gt;
* Much RAM (memory) &lt;br /&gt;
* GPUs&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;It&#039;s just a computer, I know how to use a computer&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
While the clusters are indeed &amp;quot;just&amp;quot; many Linux computers, they are also multi-million Euro instruments. So while they may have many similarities with a Linux desktop, in some respects, it is better to think of them like of other expensive instruments you may use in your research. HPC clusters have hardware components you may have never heard of in the consumer market, they typically have more than one CPU socket (making among other things memory management more complicated), etc. etc. etc.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;I want to host servers on bwHPC&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
On the bwHPC clusters, you submit jobs to a supercomputer that get scheduled and processed over time. It is not the place for permanent server hosting. If you need self-service virtual machines, check out [https://bwcloud-os.de/en/ bwCloud-OS], which offers an OpenStack-based [https://en.wikipedia.org/wiki/Infrastructure_as_a_service IaaS] platform for research, teaching, and administration in Baden-Württemberg.&lt;br /&gt;
&lt;br /&gt;
== What are the Costs? ==&lt;br /&gt;
&lt;br /&gt;
=== Monetary ===&lt;br /&gt;
&lt;br /&gt;
No cost to you as the end-user&lt;br /&gt;
&lt;br /&gt;
(But of course the HPC systems are bought for millions of Euro and the power cost of running calculations is in the same order of magnitude as buying the systems)  &lt;br /&gt;
&lt;br /&gt;
=== Effort / Time ===&lt;br /&gt;
&lt;br /&gt;
There is quite a learning curve to start calculating. &lt;br /&gt;
&lt;br /&gt;
* Linux shell knowledge is a major part&lt;br /&gt;
* HPC-specific knowledge:&lt;br /&gt;
** Software module system - software supplied by the cluster maintainers (vide infra)&lt;br /&gt;
** How to use the scheduler / write job scripts: how to send calculations to a computer on the cluster (vide infra)&lt;br /&gt;
* Wait times: a good cluster is always busy. Expect a waiting time betwween 1h and 2 days until your calculation(s) start&lt;br /&gt;
&lt;br /&gt;
=== Compute Workflow ===&lt;br /&gt;
&lt;br /&gt;
A short description of the workflow how running calculation works can be found under [[Running Calculations]] and can give you a general idea.&lt;br /&gt;
&lt;br /&gt;
=== Software === &lt;br /&gt;
&lt;br /&gt;
Basic usage is very simple: you run &amp;lt;code&amp;gt; module load module_name &amp;lt;/code&amp;gt; and use the software, but important documentation and examples are also built into the modules. &lt;br /&gt;
&lt;br /&gt;
The usage of the software on the cluster is described in [[Environment Modules]]&lt;br /&gt;
&lt;br /&gt;
== Still With Us? ==&lt;br /&gt;
&lt;br /&gt;
If you feel your calculations meet the requirements and you will save a lot of time despite some learning overhead, proceed to the [[Registration]] page.&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=When_to_use_an_HPC_Cluster&amp;diff=16420</id>
		<title>When to use an HPC Cluster</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=When_to_use_an_HPC_Cluster&amp;diff=16420"/>
		<updated>2026-09-14T11:31:58Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* When not to use HPC computers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have calculations to do - should I try using one of the bwHPC clusters for my tasks?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== When to use HPC computers ==&lt;br /&gt;
&lt;br /&gt;
You can benefit from an HPC-Cluster if:&lt;br /&gt;
&lt;br /&gt;
#  You can run many separate calculations in parallel&lt;br /&gt;
#  Software can efficiently divide your problem into many smaller problems that run in parallel&lt;br /&gt;
#  You need more RAM (memory) than your computer can provide&lt;br /&gt;
#  You need more GPUs and have no other source&lt;br /&gt;
#  You need to process large amounts of data that do not fit on your computer&lt;br /&gt;
&lt;br /&gt;
== When &#039;&#039;&#039;not&#039;&#039;&#039; to use HPC computers ==&lt;br /&gt;
&lt;br /&gt;
You will probably not have a big benefit from using HPC when:&lt;br /&gt;
&lt;br /&gt;
* Your calculation runs in serial (only on one compute core is used, things cannot run in parallel) and you have few calculations&lt;br /&gt;
* Your workflow requires that you run one calculation, then retrieve data to analyze it locally, then run the next calculation&lt;br /&gt;
* You have different computational needs than raw computing power. &lt;br /&gt;
&lt;br /&gt;
Except 3) or 4) of &amp;quot;when to use a cluster&amp;quot; force you to use the clusters anyway.&lt;br /&gt;
&lt;br /&gt;
If you need other computational tasks of the likes of &lt;br /&gt;
&lt;br /&gt;
* hosting a web server&lt;br /&gt;
* hosting a database&lt;br /&gt;
* having a test bed for software development&lt;br /&gt;
* having systems for university courses on linux, programming languages, etc&lt;br /&gt;
* having an environment for student projects or theses,&lt;br /&gt;
&lt;br /&gt;
then the bwCloud offering virtual machines might be the right thing for you&lt;br /&gt;
&lt;br /&gt;
```&amp;amp;rarr; https://bwcloud-os.de/```&lt;br /&gt;
&lt;br /&gt;
== Misconceptions == &lt;br /&gt;
=== &amp;quot;Everything will be faster&amp;quot; ===&lt;br /&gt;
[[File:BwUniCluster_2.0_Feb2020_1024x423.jpg|right|thumb|alt=bwUniCluster2.0 |upright=1| many compute cores: Every &amp;quot;tray&amp;quot; in these racks contains 1-4 computers, every computer typically has 50-200 compute cores. ]]&lt;br /&gt;
&lt;br /&gt;
The performance of a single compute core is not higher than that of your typical desktop computer. The main things we can offer are:&lt;br /&gt;
&lt;br /&gt;
* Many compute cores &lt;br /&gt;
* Much RAM (memory) &lt;br /&gt;
* GPUs&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;It&#039;s just a computer, I know how to use a computer&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
While the clusters are indeed &amp;quot;just&amp;quot; many Linux computers, they are also multi-million Euro instruments. So while they may have many similarities with a Linux desktop, in some respects, it is better to think of them like of other expensive instruments you may use in your research. HPC clusters have hardware components you may have never heard of in the consumer market, they typically have more than one CPU socket (making among other things memory management more complicated), etc. etc. etc.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;I want to host servers on bwHPC&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
On the bwHPC clusters, you submit jobs to a supercomputer that get scheduled and processed over time. It is not the place for permanent server hosting. If you need self-service virtual machines, check out [https://bwcloud-os.de/en/ bwCloud-OS], which offers an OpenStack-based [https://en.wikipedia.org/wiki/Infrastructure_as_a_service IaaS] platform for research, teaching, and administration in Baden-Württemberg.&lt;br /&gt;
&lt;br /&gt;
== What are the Costs? ==&lt;br /&gt;
&lt;br /&gt;
=== Monetary ===&lt;br /&gt;
&lt;br /&gt;
No cost to you as the end-user&lt;br /&gt;
&lt;br /&gt;
(But of course the HPC systems are bought for millions of Euro and the power cost of running calculations is in the same order of magnitude as buying the systems)  &lt;br /&gt;
&lt;br /&gt;
=== Effort / Time ===&lt;br /&gt;
&lt;br /&gt;
There is quite a learning curve to start calculating. &lt;br /&gt;
&lt;br /&gt;
* Linux shell knowledge is a major part&lt;br /&gt;
* HPC-specific knowledge:&lt;br /&gt;
** Software module system - software supplied by the cluster maintainers (vide infra)&lt;br /&gt;
** How to use the scheduler / write job scripts: how to send calculations to a computer on the cluster (vide infra)&lt;br /&gt;
* Wait times: a good cluster is always busy. Expect a waiting time betwween 1h and 2 days until your calculation(s) start&lt;br /&gt;
&lt;br /&gt;
=== Compute Workflow ===&lt;br /&gt;
&lt;br /&gt;
A short description of the workflow how running calculation works can be found under [[Running Calculations]] and can give you a general idea.&lt;br /&gt;
&lt;br /&gt;
=== Software === &lt;br /&gt;
&lt;br /&gt;
Basic usage is very simple: you run &amp;lt;code&amp;gt; module load module_name &amp;lt;/code&amp;gt; and use the software, but important documentation and examples are also built into the modules. &lt;br /&gt;
&lt;br /&gt;
The usage of the software on the cluster is described in [[Environment Modules]]&lt;br /&gt;
&lt;br /&gt;
== Still With Us? ==&lt;br /&gt;
&lt;br /&gt;
If you feel your calculations meet the requirements and you will save a lot of time despite some learning overhead, proceed to the [[Registration]] page.&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Registration/bwForCluster/RV&amp;diff=16389</id>
		<title>Registration/bwForCluster/RV</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Registration/bwForCluster/RV&amp;diff=16389"/>
		<updated>2026-09-01T14:04:56Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Step B: Apply for a Rechenvorhaben/Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=  Step B: Apply for a Rechenvorhaben/Project =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rechenvorhaben/Projects (RV)&#039;&#039;&#039; are required for assignment to a bwForCluster.&lt;br /&gt;
[[File:RV-my.png|right|frame|My RVs.]]&lt;br /&gt;
&lt;br /&gt;
To get access to an RV, answer the following question: &lt;br /&gt;
* Does your work group (or the collaborative project that you are part of) already have an RV?&lt;br /&gt;
** &#039;&#039;&#039;Yes &amp;amp;rarr; [[#Become_Coworker_of_an_RV|Become Coworker of an RV]]&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;No &amp;amp;rarr; [[#Register_a_new_RV|Have the group register a new RV]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can see your RV memberships at the central application site ZAS under [https://zas.bwhpc.de/shib/en/info_rv.php &#039;&#039;&#039;My RVs&#039;&#039;&#039;].&lt;br /&gt;
&lt;br /&gt;
== Become Coworker of an RV ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
You can only sign up for an RV once.&lt;br /&gt;
If you are an inactive member of an RV, either because you de-registered yourself or a manager deactivated you, only an RV manager can reactivate you.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;RV responsible&amp;quot; will provide you with the following data on the RV:&lt;br /&gt;
* RV acronym&lt;br /&gt;
* RV password&lt;br /&gt;
&lt;br /&gt;
If this information is lost, please let the &amp;quot;RV responsible&amp;quot; [[Registration/bwForCluster/RV/Management#Renew_RV_Password|renew the password]] for the RV.&lt;br /&gt;
&lt;br /&gt;
To become coworker of an RV, follow these steps:&lt;br /&gt;
# Please visit the [https://zas.bwhpc.de/shib/en/bwforcluster_collaboration.php &#039;&#039;&#039;RV collaboration&#039;&#039;&#039;] web form at the [https://zas.bwhpc.de ZAS].&lt;br /&gt;
# Select your home organization from the list on the main page and click &#039;&#039;&#039;Proceed&#039;&#039;&#039; or &#039;&#039;&#039;Fortfahren&#039;&#039;&#039;.&lt;br /&gt;
# You will be directed to the &#039;&#039;Identity Provider&#039;&#039; of your home organization. Enter the username and password of your &#039;&#039;&#039;home organization&#039;&#039;&#039; (usually these credentials are also used for other services like email) and click &#039;&#039;&#039;Login/Einloggen&#039;&#039;&#039;.&lt;br /&gt;
# You will be redirected back to the RV collaboration form &#039;&#039;&#039;https://zas.bwhpc.de/shib/en/bwforcluster_collaboration.php&#039;&#039;&#039;.&lt;br /&gt;
# Enter &#039;&#039;&#039;RV Acronym&#039;&#039;&#039;, &#039;&#039;&#039;RV Password&#039;&#039;&#039; and &#039;&#039;&#039;Institute&#039;&#039;&#039; into the form and check both &amp;quot;Terms of Use&amp;quot;. Click &#039;&#039;&#039;Send&#039;&#039;&#039;.&lt;br /&gt;
# You will be assigned to the RV as a new member. &lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-left:18px;&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:Attention.svg|left|15px]]&lt;br /&gt;
In case of the &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;error&amp;lt;/span&amp;gt; &amp;quot;This project is not currently renewed&amp;quot;, please ask the RV responsible to apply for a prolongation of the RV. As soon as the prolongation was accepted, you can join the RV.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After submitting the request you will receive an email from ZAS about the further steps.&lt;br /&gt;
RV owner and RV managers will be notified automatically.&lt;br /&gt;
&lt;br /&gt;
== Register a new RV ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
* An RV is valid for &#039;&#039;&#039;one year&#039;&#039;&#039;. After that, the RV responsible must apply for an extension of the RV for it to be renewed for another year.&lt;br /&gt;
* &#039;&#039;&#039;Creating multiple RVs on the same cluster is not necessary.&#039;&#039;&#039; Being part of multiple RVs on the same cluster does not grant any additional computing resources. The resource specifications (e.g. CPU hours) in an RV are used solely for cluster (tier) routing — to help assign your project to the most suitable cluster (tier). &#039;&#039;&#039;They do not represent a budget that is consumed, and they do not impose any limits on your usage.&#039;&#039;&#039; Every cluster user has full access to all available cluster resources regardless of how many RVs they belong to.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An RV should be registered by a leader or senior scientist of a research group/collaboration.&lt;br /&gt;
&lt;br /&gt;
You must:&lt;br /&gt;
* be able to be held accountable for the coworkers in the RV (and will be)&lt;br /&gt;
* manage access to the RV (add and remove/inactivate RV members) or delegate the responsibility to an RV manager&lt;br /&gt;
* help write the reports required by the DFG for their funding of bwForClusters&lt;br /&gt;
* make sure publications that used bwHPC resources properly cite the use in the [[acknowledgement]]&lt;br /&gt;
* report publications which used bwHPC resources at least once a year&lt;br /&gt;
* be willing and able to support a future DFG grant proposal for a new bwForCluster  with a &amp;quot;wissenschaftliches Beiblatt&amp;quot;.&lt;br /&gt;
* ensure that research results of all co-workers are transferred from the cluster in a timely manner, especially before a co-worker leaves and loses access. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some hints:&#039;&#039;&#039; &lt;br /&gt;
* Any number of coworkers can join the RV to work with the cluster. They need to be provided with the RV password and acronym.&lt;br /&gt;
* There is no need to register more than one RV per group. Just include all intended compute activities in the abstract to one RV. &lt;br /&gt;
* Research topic abstracts are updated when the RV is renewed for another year. Please include new or changed compute activities at that time.&lt;br /&gt;
* To be notified about important issues via the cluster&#039;s mailing list, it is necessary to finish all three registration steps. If you don&#039;t plan to work with the cluster yourself, we recommend to either register nevertheless or ask a colleague who is going to use the cluster to keep you updated. For better transparency, that colleague could receive the &#039;&#039;RV manager&#039;&#039; role from you. &lt;br /&gt;
* The [https://www.bwhpc.de/bwhpc-domains.php research area] of the group as well as the software and hardware requirements are taken into account.&lt;br /&gt;
*: Please look carefully through the scientific fields and research domains to find the field that fits best to your research focus and experience. This way, you&#039;ll be assigned to the cluster that can support you best. If in doubt, you can check the [https://www.dfg.de/resource/blob/175334/89ba4a3464c99aaea40fdef47367e7b2/fachsystematik-2020-2024-de-grafik-data.pdf DFG classification] as well.&lt;br /&gt;
&lt;br /&gt;
* Getting access to two different clusters is only possible if specific software or hardware needs demand access for both. &lt;br /&gt;
&lt;br /&gt;
[[File:RV-reg.png|right|frame|Register a new RV.]]&lt;br /&gt;
[[File:BwIDM-login.png|right|250px|thumb|Select your home organization]]&lt;br /&gt;
&#039;&#039;&#039;To apply for a new RV, follow these steps:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Please visit the [https://zas.bwhpc.de/shib/en/bwforcluster_proposal.php &#039;&#039;&#039;RV registration&#039;&#039;&#039;] web form at the [https://zas.bwhpc.de ZAS].&lt;br /&gt;
# Select your home organization from the list on the main page and click &#039;&#039;&#039;Proceed&#039;&#039;&#039; or &#039;&#039;&#039;Fortfahren&#039;&#039;&#039;.&lt;br /&gt;
# You will be directed to the &#039;&#039;Identity Provider&#039;&#039; of your home organization. Enter the username and password of your &#039;&#039;&#039;home organization&#039;&#039;&#039; (usually these credentials are also used for other services like email) and click &#039;&#039;&#039;Login/Einloggen&#039;&#039;&#039;.&lt;br /&gt;
# You will be redirected back to the RV registration form &#039;&#039;&#039;https://zas.bwhpc.de/shib/en/bwforcluster_proposal.php&#039;&#039;&#039;.&lt;br /&gt;
# Fill in all mandatory fields of the form and tick the two &amp;quot;Terms of use&amp;quot;. Detailed information on the individual fields can be found in the section [[Registration/bwForCluster/RV#Registration_Form_Details|Registration Form Details]]. Click &#039;&#039;&#039;Preview&#039;&#039;&#039;.&lt;br /&gt;
# If the information is correct, click &#039;&#039;&#039;Submit&#039;&#039;&#039;, otherwise you can customize your application.&lt;br /&gt;
# Go to section [[Registration/bwForCluster/RV#Registration_Response|Registration Response]] for the next steps.&lt;br /&gt;
&lt;br /&gt;
Please note that for your convenience you can also switch to the [https://zas.bwhpc.de/shib/bwforcluster_proposal.php German version] of the web form.&lt;br /&gt;
The submitter of the RV will be assigned the role &amp;quot;RV responsible&amp;quot; (see [[Registration/bwForCluster/RV/Management|Roles in an RV]]).&lt;br /&gt;
&lt;br /&gt;
=== Registration Form Details ===&lt;br /&gt;
&lt;br /&gt;
The web form consists of the following fields.&lt;br /&gt;
Note that the fields - name, given name, organization, mail, and EPPN - are auto-filled and can not be changed.&lt;br /&gt;
These are your credentials as given by your home organization.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%;border:3px solid darkgray; margin: 1em auto 1em auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:20%;padding:2px;margin:3px; background:#AAA; font-size:100%; font-weight:bold; border:1px solid #BBBBBB; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot;| Field&lt;br /&gt;
! style=&amp;quot;padding:2px;margin:3px; background:#AAA; font-size:100%; font-weight:bold; border:1px solid #BBBBBB; text-align:left; color:#000; padding:0.2em 0.4em;&amp;quot; | Explanation&lt;br /&gt;
|rowspan=&amp;quot;15&amp;quot;| [[File:RV-form.png|center|400px|thumb|Registering a new RV.]]&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| RV Title&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | Define a short title of your planned compute activities, maximum of 255 characters including spaces.&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| RV Description&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | Write a short abstract about your planned compute activities (maximum of 2048 characters including spaces). Research groups that contributed to the DFG grant proposal (Art. 91b GG) of the corresponding bwForCluster only need to give reference to that particular proposal.&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Scientific field&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | Tick one or several scientific fields. Once all bwForClusters are up and running the full list of given scientific fields are supported and hence for RV applicable. If your RV does not match any given scientific field, please state your scientific field in the given text box. Grayed out scientific fields indicate that the corresponding bwForCluster(s) is/are not operational yet.&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Field of activity&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | Define if your RV is primarily for research and/or teaching. If not applicable, use text box.&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Parallel paradigm&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | State what parallel paradigm your code or application uses. Multiple ticks are allowed. Further information can be provided via text box. If you are not sure about it, please state the software you are using.&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Programming language&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | State the programming language(s) of your code or application.&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Numerical methods&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | State the numerical or &amp;quot;calculation&amp;quot; methods your code or application utilizes. If you do not know, write &amp;quot;unknown&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Software packages&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | State all software package you will or want to use for your RV. Also include compiler, MPI and numerical packages (e.g. MKL, FFTW).&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Estimated requested computing resources&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | Roughly estimate how many CPU hours are required to finish your RV. To calculate &amp;quot;CPU hours&amp;quot; multiply &amp;quot;elapsed parallel computing time&amp;quot; with &amp;quot;number of CPU core&amp;quot; per job. &lt;br /&gt;
&#039;&#039;Example: Your code uses 4 CPU cores and has a wall time of 1h. This makes 4 CPU hours.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Planned maximum number of parallel used CPU cores per job&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | Give an upper limit of how many CPU cores per job are required. Please cross-check with your statement about parallel paradigm. &lt;br /&gt;
&#039;&#039;Obviously, a sequential code can only use 1 CPU core per job.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Estimated maximal memory requirements per CPU core&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | Give an upper limit of how much RAM per CPU core your jobs require. Please give a value in Gigabytes.&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Estimated requested persistent disk space for the RV&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | State how much disk space in total you need for your RV. Please give a value in Gigabytes. &lt;br /&gt;
&#039;&#039;Example: If your RV has 4 more coworker and each of you produces until the end of your RV 20 Gigabyte of output, your maximum disk space is 100 Gigabyte.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Estimated maximal temporary disk space per job&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | State how much space your intermediate files require during a job run. Please give a value in Gigabytes. &lt;br /&gt;
&#039;&#039;Example: Your final output of your job is 0.1 Gigabyte, but during your job 10 temporary files, each with a size of 1 Gigabyte, are written to disk, hence your correct answer is 10 Gigabyte.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;column&amp;quot; {{Lightgray_small}}| Institute&lt;br /&gt;
|scope=&amp;quot;column&amp;quot; {{Tab element}} | State the full name of your Institute.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Registration Response ===&lt;br /&gt;
&lt;br /&gt;
After submitting you will get an email from the ZAS confirming your submission.&lt;br /&gt;
With this email you are given an unique&lt;br /&gt;
* RV acronym&lt;br /&gt;
* RV password&lt;br /&gt;
&lt;br /&gt;
Please keep the password enclosed.&lt;br /&gt;
With RV acronym and password, [[Registration/bwForCluster/RV#Become_Coworker_of_a_RV| coworkers ]] can already associate themselves to the RV.&lt;br /&gt;
If this information is lost, please [[Registration/bwForCluster/RV#Renew_RV_Password|renew the password]] for the RV.&lt;br /&gt;
&lt;br /&gt;
The cluster assignment team assigns a bwForCluster to your RV based on your submitted data, including the [https://www.bwhpc.de/bwhpc-domains.php research area] as well as the software and hardware requirements.&lt;br /&gt;
The ZAS notifies you in an email about your assigned bwForCluster and provides website details for [[Registration/bwForCluster/Service| Step C]]. Later on you can find details about the roles and management possibilities at the [[Registration/bwForCluster/RV/Management | RV Management]] page.&lt;br /&gt;
&lt;br /&gt;
=== Duration of an RV ===&lt;br /&gt;
&lt;br /&gt;
An RV is valid for &#039;&#039;&#039;one year&#039;&#039;&#039;.&lt;br /&gt;
After that, the RV responsible must apply for an extension of the RV for it to be renewed for another year.&lt;br /&gt;
&lt;br /&gt;
=== RV Management for RV Responsibles and Managers  ===&lt;br /&gt;
&lt;br /&gt;
RV responsible or manager can [[Registration/bwForCluster/RV/Management|manage and modify Rechenvorhaben/projects]]. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:right;&amp;quot;&amp;gt;[[Registration/bwForCluster/Service | Go to step C]]&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3&amp;diff=16382</id>
		<title>Justus3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3&amp;diff=16382"/>
		<updated>2026-08-31T08:16:21Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Justus3}}&lt;br /&gt;
&amp;lt;!-- [[File:Justus3_pre.jpg|right|frameless|thumb|alt=Justus3 |upright=0.4| Justus 3 ]] --&amp;gt;&lt;br /&gt;
&amp;lt;!--[[File:JUSTUS2_header.png|700px]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;bwForCluster Justus 3&#039;&#039;&#039; is the state-wide high-performance compute cluster dedicated to &#039;&#039;&#039;Computational Chemistry and Quantum Sciences&#039;&#039;&#039; in Baden-Württemberg. &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;  background:#FEF4AB; width:100%;&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding:8px; background:#FFE856; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | News&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
* 2026-06-16: Cooling installations for the new cluster has been enabled&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;  background:#eeeefe; width:100%;&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding:8px; background:#dedefe; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | Training &amp;amp; Support&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
* [[Justus3/Migration_from_J2|Migration Guide from JUSTUS2]]&lt;br /&gt;
----&lt;br /&gt;
* [[Justus3/Getting Started|Getting Started]]&lt;br /&gt;
* Online Tutorial [https://hpc-wiki.info/hpc/Introduction_to_Linux_in_HPC Introduction to Linux in HPC] (external link)&lt;br /&gt;
* Contact and Support: [[BwSupportPortal]]&lt;br /&gt;
* Send [[Feedback|Feedback]] about Wiki pages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;  background:#deffee; width:100%;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:8px; background:#cef2e0; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | User Documentation&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* [[Registration/bwForCluster|Registration]]&lt;br /&gt;
* [[Justus3/Policy Agreement|Policy Agreement]]&lt;br /&gt;
&lt;br /&gt;
* [[Justus3/Login|Login]]&lt;br /&gt;
* [[Justus3/System Description|System Description]] &lt;br /&gt;
* [[Justus3/File Systems|File Systems]] &lt;br /&gt;
&lt;br /&gt;
* [[Justus3/Software|Software]]&lt;br /&gt;
* [[Justus3/Jobscripts: Running Your Calculations|Jobscripts: Running Your Calculations]]&lt;br /&gt;
** [[bwForCluster Justus 3 Slurm HOWTO|Slurm HOWTO]]&lt;br /&gt;
* [[Justus3/Visualization|Visualisation]] &lt;br /&gt;
* [[Development]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;  background:#e6e9eb; width:100%;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:8px; background:#d1dadf; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | Cluster Funding&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* Please &#039;&#039;&#039;[[Justus3/Acknowledgement|acknowledge]]&#039;&#039;&#039; the Justus 3 cluster in your publications.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Registration/bwUniCluster&amp;diff=16326</id>
		<title>Registration/bwUniCluster</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Registration/bwUniCluster&amp;diff=16326"/>
		<updated>2026-08-26T08:08:15Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registration bwUniCluster =&lt;br /&gt;
&lt;br /&gt;
The bwUniCluster is the universal cluster for tier 3 high performance computing (HPC) in Baden-Württemberg.&lt;br /&gt;
It is co-financed by the Ministry of Science, Research and the Arts Baden-Württemberg and the shareholders.&lt;br /&gt;
&lt;br /&gt;
All members of the shareholder universities can apply for an account:&lt;br /&gt;
&lt;br /&gt;
* Universität Freiburg&lt;br /&gt;
* Universität Heidelberg&lt;br /&gt;
* Universität Hohenheim&lt;br /&gt;
* Karlsruhe Institute of Technology (KIT)&lt;br /&gt;
* Universität Konstanz&lt;br /&gt;
* Universität Mannheim&lt;br /&gt;
* Universität Stuttgart&lt;br /&gt;
* Universität Tübingen&lt;br /&gt;
* Universität Ulm&lt;br /&gt;
* [[Registration/HAW|HAW BW e.V.]] (an association of several universities of applied sciences in Baden-Württemberg)&lt;br /&gt;
&lt;br /&gt;
The use of the bwUniCluster is free of charge.&lt;br /&gt;
&lt;br /&gt;
== Video Guide ==&lt;br /&gt;
&lt;br /&gt;
Video guide through the steps at https://av.tib.eu/media/73017&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Three Steps for Registration ==&lt;br /&gt;
&lt;br /&gt;
[[File:bwUniCluster-Registration.png|thumb|right|upright=1.3|bwUniCluster Registration Process]]&lt;br /&gt;
&lt;br /&gt;
The registration process for the bwUniCluster is divided into three steps:&lt;br /&gt;
&lt;br /&gt;
* Step A: You need to get the &#039;&#039;&#039;bwUniCluster Entitlement&#039;&#039;&#039; from your university/college.&amp;lt;br /&amp;gt;&amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwUniCluster/Entitlement|Step A: bwUniCluster Entitlement]]&lt;br /&gt;
* Step B: You need to fill out the &#039;&#039;&#039;bwUniCluster questionnaire&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwUniCluster/Questionnaire|Step B: bwUniCluster Questionnaire]]&lt;br /&gt;
&amp;lt;!--{|style=&amp;quot;background:#deffee; width:100%;&amp;quot;&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#cef2e0; text-align:left&amp;quot;|&lt;br /&gt;
[[Image:Attention.svg|center|25px]]&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#cef2e0; text-align:left&amp;quot;|&lt;br /&gt;
Please fill out the bwUniCluster questionnaire within 14 days after registration. Otherwise your login to the cluster will be deactivated.&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Step C: You need to &#039;&#039;&#039;register for the service bwUniCluster&#039;&#039;&#039; (create an account on the cluster).&amp;lt;br /&amp;gt;&amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwUniCluster/Service|Step C: bwUniCluster Registration]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After finishing Step C, you are done with registration. &lt;br /&gt;
&lt;br /&gt;
* To &#039;&#039;&#039;login&#039;&#039;&#039; to the bwUniCluster, see our &amp;lt;br /&amp;gt; &amp;amp;rarr; &#039;&#039;&#039;[[Registration/Login|Login Guide]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Information for registered users ==&lt;br /&gt;
&lt;br /&gt;
* Please refer to cluster-specific pages for &#039;&#039;&#039;[[bwUniCluster3.0]]&#039;&#039;&#039; (also accessible via the overview links on the left).&lt;br /&gt;
* If you want to check if your &#039;&#039;&#039;account&#039;&#039;&#039; is still valid on the bwUniCluster, please refer to the general &amp;lt;br /&amp;gt; &amp;amp;rarr; &#039;&#039;&#039;[[Registration/Account|Account Guide]]&#039;&#039;&#039;&lt;br /&gt;
* If you want to &#039;&#039;&#039;create a second factor&#039;&#039;&#039;, please refer to &amp;lt;br /&amp;gt; &amp;amp;rarr; &#039;&#039;&#039;[[Registration/2FA|Generate a Second Factor (2FA)]]&#039;&#039;&#039;&lt;br /&gt;
* If you need to &#039;&#039;&#039;change or forgot your password&#039;&#039;&#039; for the bwUniCluster, please refer to the general &amp;lt;br /&amp;gt; &amp;amp;rarr; &#039;&#039;&#039;[[Registration/Password|Password Guide]]&#039;&#039;&#039;&lt;br /&gt;
* If you want to &#039;&#039;&#039;use SSH keys&#039;&#039;&#039; on the bwUniCluster, please refer to &amp;lt;br /&amp;gt; &amp;amp;rarr; &#039;&#039;&#039;[[Registration/SSH|Registering SSH Keys with your Cluster]]&#039;&#039;&#039;&lt;br /&gt;
* If you want do &#039;&#039;&#039;de-register your user account&#039;&#039;&#039; from the bwUniCluster, please refer to the general &amp;lt;br /&amp;gt;&amp;amp;rarr; &#039;&#039;&#039;[[Registration/Deregistration|De-registration Guide]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Contact / Support ==&lt;br /&gt;
&lt;br /&gt;
If you have questions or problems concerning the bwUniCluster registration, please [[BwUniCluster3.0/Support|contact your local hotline]].&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Environment_Modules&amp;diff=16318</id>
		<title>Environment Modules</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Environment_Modules&amp;diff=16318"/>
		<updated>2026-08-25T13:54:13Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;background:#deffee; width:100%;&amp;quot;&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#cef2e0; text-align:left&amp;quot;|&lt;br /&gt;
[[Image:Info.svg|center|25px]]&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#cef2e0; text-align:left&amp;quot;|&lt;br /&gt;
External software search over all bwHPC clusters on our webpage: https://www.bwhpc.de/software.html&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Software on the bwHPC Clusters is provided as &#039;&#039;&#039;Software Environment Modules&#039;&#039;&#039;, or short &#039;&#039;&#039;Modules&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Modules make it possible to have different versions of a software installed at a the same time. &lt;br /&gt;
The complete environments for the software package, compilers and libraries and  needed by this specific version is then loaded by a single command. This happens usually in the beginning of the jobscript.&lt;br /&gt;
&lt;br /&gt;
Full documentation: &amp;lt;code&amp;gt;module help&amp;lt;/code&amp;gt; and [https://lmod.readthedocs.io/en/latest/ Environment Modules Website]&lt;br /&gt;
&lt;br /&gt;
= Basic Usage =&lt;br /&gt;
&lt;br /&gt;
== Module categories, versions  and defaults ==&lt;br /&gt;
The bwHPC clusters categorize &#039;&#039;Modules&#039;&#039;, each software can exist in different versions: &lt;br /&gt;
&lt;br /&gt;
 category/softwarename/version&lt;br /&gt;
&lt;br /&gt;
e.g. if julia is installed, it is in the module &amp;lt;code&amp;gt;math/julia&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can load it in the default version just specifying math/julia or a specific version  &amp;lt;code&amp;gt; math/julia/1.11.0 &amp;lt;/code&amp;gt;&lt;br /&gt;
Please note, that software may be &#039;&#039;&#039;hidden&#039;&#039;&#039; from default view using a dot in front of the version; i.e.&lt;br /&gt;
the software is still available but not visible in &amp;lt;code&amp;gt;module avail&amp;lt;/code&amp;gt; but may still be loaded,&lt;br /&gt;
e.g. &amp;lt;code&amp;gt; math/julia/.1.10.0 &amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currently all bwHPC software packages are assigned to one of the following &#039;&#039;Module&#039;&#039; categories:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; bio cae chem compiler devel lib math mpi numlib phys system vis &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Display and search available Modules ==&lt;br /&gt;
&#039;&#039;Modules&#039;&#039; are modulefiles that can be loaded by the user. A &#039;&#039;Module&#039;&#039; must be loaded before it provides changes to your environment. You can display the currently available &#039;&#039;Modules&#039;&#039; on the system by executing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Some modules may be hidden and only become visible when compiler versions/libraries they depend on are loaded.&lt;br /&gt;
&lt;br /&gt;
A complete list of all available modules can be displayed using:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module spider&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can selectively list software in one of those categories using, e.g. for the category &amp;quot;compiler&amp;quot;, or just all versions of a certain module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module avail compiler/&lt;br /&gt;
$ module avail compiler/gnu&lt;br /&gt;
&lt;br /&gt;
$ module spider compiler/&lt;br /&gt;
$ module spider compiler/gnu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== module help ==&lt;br /&gt;
A help message for a specific &#039;&#039;Module&#039;&#039; can be displayed with &#039;&#039;&#039;&#039;module help category/softwarename/version&#039;&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The help message usually contains additional information about the software and points to the software website and documentation.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module help system/example/1.0 &lt;br /&gt;
----------------- Module Specific Help for &amp;quot;system/example/1.0&amp;quot; ---------------------------&lt;br /&gt;
&amp;quot;This module provides a bwhpc-examples job that works on every cluster.&lt;br /&gt;
&lt;br /&gt;
[... rest of the output is omitted in the Wiki for clarity ...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Loading Modules and Check they are loaded ==&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;background:#deffee; width:100%;&amp;quot;&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#cef2e0; text-align:left&amp;quot;|&lt;br /&gt;
[[Image:Attention.svg|center|25px]]&lt;br /&gt;
|style=&amp;quot;padding:5px; background:#cef2e0; text-align:left&amp;quot;|&lt;br /&gt;
Don&#039;t use module load in .bashrc → see [[.bashrc Do&#039;s and Don&#039;ts]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To load a software &#039;&#039;Module&#039;&#039; and display all loaded modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module list&lt;br /&gt;
No Modulefiles Currently Loaded.&lt;br /&gt;
$ module load system/example/1.0&lt;br /&gt;
$ module list&lt;br /&gt;
Currently Loaded Modulefiles:&lt;br /&gt;
  1) system/example/1.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modules make software available only in your current shell. Whenever you login in, you have to load the software again. Please do not auto-load modules in ~/.bashrc, this can lead to problems with system software or other modules you may load later.&lt;br /&gt;
&lt;br /&gt;
= Software job examples =&lt;br /&gt;
bwHPC provides example job scripts for most installed software modules.&lt;br /&gt;
&lt;br /&gt;
For a Software &#039;&#039;Module&#039;&#039; with the sofware called &#039;&#039;&#039;SOMESOFTWARE&#039;&#039;&#039;, you can find the example directory by:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd  $SOMESOFTWARE_EXA_DIR&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Copy the whole example folder to your $HOME directory, so you can edit those job examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
$ mkdir softwarename_examples&lt;br /&gt;
$ echo $SOMESOFTWARE_EXA_DIR&lt;br /&gt;
# Please do not proceed if the command above does not provide any text !&lt;br /&gt;
# Otherwise you will start to copy all system data (the directory &amp;quot;/&amp;quot;).&lt;br /&gt;
$ cp -r $SOMESOFTWARE_EXA_DIR/ softwarename_examples/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your specific software isn&#039;t installed, there is a dummy software example module &amp;quot;system/example&amp;quot; present on all clusters. For this module, the process looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Load the example module&lt;br /&gt;
$ module load system/example/1.0&lt;br /&gt;
&lt;br /&gt;
# Run example in a temporary directory&lt;br /&gt;
$ mkdir tmp_example_dir&lt;br /&gt;
$ cp -r $EXAMPLE_EXA_DIR/ softwarename_examples/&lt;br /&gt;
$ cd tmp_example_dir/bwhpc-examples&lt;br /&gt;
&lt;br /&gt;
# Example jobscript for clusters using the SLURM batch system&lt;br /&gt;
sbatch examples-1.0.slurm&lt;br /&gt;
# Example jobscript for clusters using PBS&lt;br /&gt;
qsub examples-1.0.pbs&lt;br /&gt;
&lt;br /&gt;
# Print the results&lt;br /&gt;
cat examples_result.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Additional Usage  Recommendations = &lt;br /&gt;
&lt;br /&gt;
=== Loading conflicts ===&lt;br /&gt;
By default you can not load different versions of same software &#039;&#039;Module&#039;&#039; in same session. Loading for example Intel compiler version X while Intel compiler version Y is loaded results in error message as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Module &#039;compiler/intel/X&#039; conflicts with the currently loaded module(s) &#039;compiler/intel/Y&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The solution is [[#Unloading Modules|unloading]] or switching &#039;&#039;Modules&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Showing the changes introduced by a Module ===&lt;br /&gt;
Loading a &#039;&#039;Module&#039;&#039; will change the environment of the current shell session. For instance the $PATH variable will be expanded by the software&#039;s binary directory. Other &#039;&#039;Module&#039;&#039; variables may even change the behavior of the current shell session or the software program(s) in a more drastic way. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Loaded &#039;&#039;Modules&#039;&#039; may also invoke an additional set of environment variables, which e.g. point to directories or destinations of documentation and examples. Their nomenclature is systematic: &lt;br /&gt;
{| width=600px class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Pointing to&lt;br /&gt;
|-&lt;br /&gt;
| $SWN_HOME&lt;br /&gt;
| Root directory of the software package&lt;br /&gt;
|-&lt;br /&gt;
| $SWN_DOC_DIR&lt;br /&gt;
| Documentation&lt;br /&gt;
|-&lt;br /&gt;
| $SWN_EXA_DIR&lt;br /&gt;
| Examples&lt;br /&gt;
|-&lt;br /&gt;
| $SWN_BPR_URL&lt;br /&gt;
| URL of software&#039;s Wiki article&lt;br /&gt;
|-&lt;br /&gt;
| and many many more...&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
with SWN being the place holder of the software &#039;&#039;Module&#039;&#039; name.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
All the changes to the current shell session to be invoked by loading the &#039;&#039;Module&#039;&#039; can be reviewed using &#039;&#039;&#039;&#039;module show category/softwarename/version&#039;&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module show system/example/1.0&lt;br /&gt;
---------------------------------------------------------------------------------------------------&lt;br /&gt;
   /opt/bwhpc/common/modulefiles/Core/system/example/1.0.lua:&lt;br /&gt;
---------------------------------------------------------------------------------------------------&lt;br /&gt;
whatis(&amp;quot;A generic module containing a working bwhpc-examples job.&amp;quot;)&lt;br /&gt;
setenv(&amp;quot;EXAMPLE_VERSION&amp;quot;,&amp;quot;1.0&amp;quot;)&lt;br /&gt;
setenv(&amp;quot;EXAMPLE_HOME&amp;quot;,&amp;quot;/opt/bwhpc/common/system/example/1.0&amp;quot;)&lt;br /&gt;
setenv(&amp;quot;EXAMPLE_BIN_DIR&amp;quot;,&amp;quot;/opt/bwhpc/common/system/example/1.0/bin&amp;quot;)&lt;br /&gt;
setenv(&amp;quot;EXAMPLE_EXA_DIR&amp;quot;,&amp;quot;/opt/bwhpc/common/system/example/1.0/bwhpc-examples&amp;quot;)&lt;br /&gt;
prepend_path(&amp;quot;PATH&amp;quot;,&amp;quot;/opt/bwhpc/common/system/example/1.0/bin&amp;quot;)&lt;br /&gt;
help([[&amp;quot;This module provides a bwhpc-examples job that works on every cluster.&lt;br /&gt;
The module is used as example in the bwHPC-Wiki and therefore should be installed on every cluster,&lt;br /&gt;
such that users can try the commands out.&lt;br /&gt;
&lt;br /&gt;
* The executable of this module can be found in the folder&lt;br /&gt;
  $EXAMPLE_BIN_DIR&lt;br /&gt;
  Upon loading the module, the binaries are added to PATH.&lt;br /&gt;
&lt;br /&gt;
* Further documentation for using the example can be found in&lt;br /&gt;
  https://wiki.bwhpc.de/e/Environment_Modules&lt;br /&gt;
&lt;br /&gt;
* Examples are located at:&lt;br /&gt;
  $EXAMPLE_EXA_DIR&lt;br /&gt;
]])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modules depending on Modules ===&lt;br /&gt;
Some program &#039;&#039;Modules&#039;&#039; depend on libraries to be loaded to the user environment. Therefore the&lt;br /&gt;
corresponding &#039;&#039;Modules&#039;&#039; of the software must be loaded together with the &#039;&#039;Modules&#039;&#039; of &lt;br /&gt;
the libraries. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
By default such software &#039;&#039;Modules&#039;&#039; try to load required &#039;&#039;Modules&#039;&#039; and corresponding versions automatically. However, automatic loading might fail if a different version of that required &#039;&#039;Module&#039;&#039; &lt;br /&gt;
is already loaded (cf. [[#Loading conflicts|Loading conflicts]]).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unloading Modules ==&lt;br /&gt;
To unload or to remove a software &#039;&#039;Module&#039;&#039; execute:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module unload category/softwarename/version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Unloading all loaded modules ===&lt;br /&gt;
In order to remove all previously loaded software modules from your environment issue the command &#039;module purge&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module list&lt;br /&gt;
Currently Loaded Modulefiles:&lt;br /&gt;
  1) devel/gdb/7.7&lt;br /&gt;
  2) compiler/intel/14.0&lt;br /&gt;
  3) mpi/openmpi/1.8-intel-14.0(default)&lt;br /&gt;
$&lt;br /&gt;
$ module purge&lt;br /&gt;
$ module list&lt;br /&gt;
No Modulefiles Currently Loaded.&lt;br /&gt;
$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Module commands ==&lt;br /&gt;
=== module whatis ===&lt;br /&gt;
A short description for a specific &#039;&#039;Module&#039;&#039; can be displayed with &#039;&#039;&#039;&#039;module whatis category/softwarename/version&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module whatis system/example/1.0 &lt;br /&gt;
system/example/1.0  : A generic module containing a working bwhpc-examples job.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3&amp;diff=16313</id>
		<title>Justus3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3&amp;diff=16313"/>
		<updated>2026-08-25T09:49:25Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Justus3}}&lt;br /&gt;
&amp;lt;!-- [[File:Justus3_pre.jpg|right|frameless|thumb|alt=Justus3 |upright=0.4| Justus 3 ]] --&amp;gt;&lt;br /&gt;
&amp;lt;!--[[File:JUSTUS2_header.png|700px]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;bwForCluster Justus 3&#039;&#039;&#039; is the state-wide high-performance compute cluster dedicated to &#039;&#039;&#039;Computational Chemistry and Quantum Sciences&#039;&#039;&#039; in Baden-Württemberg. &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;  background:#FEF4AB; width:100%;&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding:8px; background:#FFE856; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | News&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
* 2026-06-16: Cooling installations for the new cluster has been enabled&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;  background:#eeeefe; width:100%;&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding:8px; background:#dedefe; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | Training &amp;amp; Support&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
* [[Justus3/Migration_from_J2|Migration Guide from JUSTUS2]]&lt;br /&gt;
* [[Justus3/Getting Started|Getting Started]]&lt;br /&gt;
* Online Tutorial [https://hpc-wiki.info/hpc/Introduction_to_Linux_in_HPC Introduction to Linux in HPC] (external link)&lt;br /&gt;
* Contact and Support: [[BwSupportPortal]]&lt;br /&gt;
* Send [[Feedback|Feedback]] about Wiki pages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;  background:#deffee; width:100%;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:8px; background:#cef2e0; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | User Documentation&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* [[Registration/bwForCluster|Registration]]&lt;br /&gt;
* [[Justus3/Policy Agreement|Policy Agreement]]&lt;br /&gt;
&lt;br /&gt;
* [[Justus3/Login|Login]]&lt;br /&gt;
* [[Justus3/Hardware|Hardware and Architecture]] &lt;br /&gt;
** [[Justus3/Hardware#Node_Specifications|Node Specifications]]&lt;br /&gt;
** [[Justus3/Hardware#Storage_Architecture|File Systems and Workspaces]] &lt;br /&gt;
&lt;br /&gt;
* [[Justus3/Software|Software]]&lt;br /&gt;
* [[Justus3/Jobscripts: Running Your Calculations|Jobscripts: Running Your Calculations]]&lt;br /&gt;
** [[bwForCluster Justus 3 Slurm HOWTO|Slurm HOWTO]]&lt;br /&gt;
* [[Justus3/Visualization|Visualisation]] &lt;br /&gt;
* [[Development]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;  background:#e6e9eb; width:100%;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:8px; background:#d1dadf; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | Cluster Funding&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* Please &#039;&#039;&#039;[[Justus3/Acknowledgement|acknowledge]]&#039;&#039;&#039; the Justus 3 cluster in your publications.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16312</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16312"/>
		<updated>2026-08-25T09:47:37Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Please choose the correct HPC-cluster queue as shown below. Failing to do so will delay the answer to your ticket. &lt;br /&gt;
&lt;br /&gt;
If your issue is a missing entitlement, please do  not use the BwSupportPortal, but contact your university.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Login Issues due to Missing Entitlements ==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university&#039;s help desk, as this can only be addressed at the university which you are a member of.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login at &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;https://www.bwhpc.de/supportportal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16311</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16311"/>
		<updated>2026-08-25T09:47:28Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Please choose the correct HPC-cluster queue as shown below. Failing to do so will delay the answer to your ticket. If your issue is a missing entitlement, please do  not use the BwSupportPortal, but contact your university.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Login Issues due to Missing Entitlements ==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university&#039;s help desk, as this can only be addressed at the university which you are a member of.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login at &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;https://www.bwhpc.de/supportportal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16310</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16310"/>
		<updated>2026-08-25T09:44:28Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 5px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please choose the correct cluster queue as shown below. &lt;br /&gt;
&lt;br /&gt;
[https://www.bwhpc.de/supportportal &#039;&#039;&#039;Direct link to the bwSupportPortal&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Login Issues due to Missing Entitlements ==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university&#039;s help desk, as this can only be addressed at the university which you are a member of.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login at &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;https://www.bwhpc.de/supportportal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16309</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16309"/>
		<updated>2026-08-25T09:42:35Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Creating a ticket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Help, support and any other HPC related request can be addressed to the bwHPC cluster and competence center teams via the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 5px 0;&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.bwhpc.de/supportportal &#039;&#039;&#039;Create a ticket at the bwSupportPortal&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Login Issues due to Missing Entitlements ==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university&#039;s help desk, as this can only be addressed at the university which you are a member of.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login at &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;https://www.bwhpc.de/supportportal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16308</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16308"/>
		<updated>2026-08-25T09:42:04Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Creating a ticket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Help, support and any other HPC related request can be addressed to the bwHPC cluster and competence center teams via the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 5px 0;&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.bwhpc.de/supportportal &#039;&#039;&#039;Create a ticket at the bwSupportPortal&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Login Issues due to Missing Entitlements ==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university&#039;s help desk, as this can only be addressed at the university which you are a member of.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login: at &#039;&#039;&#039;https://www.bwhpc.de/supportportal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16307</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16307"/>
		<updated>2026-08-25T09:40:51Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Login Issues due to Missing Entitlements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Help, support and any other HPC related request can be addressed to the bwHPC cluster and competence center teams via the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 5px 0;&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.bwhpc.de/supportportal &#039;&#039;&#039;Create a ticket at the bwSupportPortal&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Login Issues due to Missing Entitlements ==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university&#039;s help desk, as this can only be addressed at the university which you are a member of.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login:&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=JUSTUS2/Support&amp;diff=16306</id>
		<title>JUSTUS2/Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=JUSTUS2/Support&amp;diff=16306"/>
		<updated>2026-08-25T09:40:02Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Entitlement==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university&#039;s help desk, as this can only be adressed at the university which you are a member of.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Registration and HPC Support==&lt;br /&gt;
&lt;br /&gt;
In case of registration problems or questions about using JUSTUS 2, please submit a trouble ticket at the &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[BwSupportPortal]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16305</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16305"/>
		<updated>2026-08-25T09:39:38Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Login Issues due to Missing Entitlements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Help, support and any other HPC related request can be addressed to the bwHPC cluster and competence center teams via the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 5px 0;&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.bwhpc.de/supportportal &#039;&#039;&#039;Create a ticket at the bwSupportPortal&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Login Issues due to Missing Entitlements ==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university&#039;s help desk, as this can only be adressed at the university which you are a member of.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login:&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16304</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16304"/>
		<updated>2026-08-25T09:39:12Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Login Issues due to Missing Entitlements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Help, support and any other HPC related request can be addressed to the bwHPC cluster and competence center teams via the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 5px 0;&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.bwhpc.de/supportportal &#039;&#039;&#039;Create a ticket at the bwSupportPortal&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Login Issues due to Missing Entitlements ==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university first level help desk, as this can only be adressed at the university which you are a member of.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login:&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16303</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16303"/>
		<updated>2026-08-25T09:38:36Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Missing Entitlements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Help, support and any other HPC related request can be addressed to the bwHPC cluster and competence center teams via the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 5px 0;&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.bwhpc.de/supportportal &#039;&#039;&#039;Create a ticket at the bwSupportPortal&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Login Issues due to Missing Entitlements ==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university first level help desk.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login:&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16302</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16302"/>
		<updated>2026-08-25T09:37:38Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Entitlement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Help, support and any other HPC related request can be addressed to the bwHPC cluster and competence center teams via the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 5px 0;&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.bwhpc.de/supportportal &#039;&#039;&#039;Create a ticket at the bwSupportPortal&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Missing Entitlements ==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university first level help desk.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login:&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16300</id>
		<title>BwSupportPortal</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=BwSupportPortal&amp;diff=16300"/>
		<updated>2026-08-25T09:37:13Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Help, support and any other HPC related request can be addressed to the bwHPC cluster and competence center teams via the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px solid #28a745; padding: 15px; background-color: #d4edda; margin: 5px 0;&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.bwhpc.de/supportportal &#039;&#039;&#039;Create a ticket at the bwSupportPortal&#039;&#039;&#039;]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Entitlement==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university first level help desk.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Creating a ticket =&lt;br /&gt;
&lt;br /&gt;
Tickets can be created and assigned to a support unit through the following steps after login:&lt;br /&gt;
&lt;br /&gt;
== Select New Ticket ==&lt;br /&gt;
&lt;br /&gt;
A new ticket can be created by clicking on the &amp;quot;+&amp;quot;-Symbol in the bottom left:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigate the Support Groups ==&lt;br /&gt;
&lt;br /&gt;
Navigate the support groups by using &#039;&#039;&#039;the arrows&#039;&#039;&#039; or use the &#039;&#039;&#039;search bar&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step2.png]]&lt;br /&gt;
&lt;br /&gt;
== Choose a Support Unit ==&lt;br /&gt;
&lt;br /&gt;
Choose a specific support group:&lt;br /&gt;
&lt;br /&gt;
[[File:BwHelpdesk Step3.png]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=JUSTUS2/Support&amp;diff=16299</id>
		<title>JUSTUS2/Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=JUSTUS2/Support&amp;diff=16299"/>
		<updated>2026-08-25T09:34:59Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Entitlement==&lt;br /&gt;
&lt;br /&gt;
In case of questions or problems regarding your entitlement for using any bwForCluster, please&lt;br /&gt;
contact your local university first level help desk.&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr; &#039;&#039;&#039;[[Registration/bwForCluster/Entitlement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Registration and HPC Support==&lt;br /&gt;
&lt;br /&gt;
In case of registration problems or questions about using JUSTUS 2, please submit a trouble ticket at the &lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; &#039;&#039;&#039;[[BwSupportPortal]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Policy_Agreement&amp;diff=16285</id>
		<title>Justus3/Policy Agreement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Policy_Agreement&amp;diff=16285"/>
		<updated>2026-08-24T09:45:05Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== DRAFT DOCUMENT ==&lt;br /&gt;
&lt;br /&gt;
== Justus3 Policy - Agreement - V0 ==&lt;br /&gt;
&lt;br /&gt;
For all users of bwForCluster Justus3 for Computational Chemistry and Quantum Sciences the [https://www.uni-ulm.de/fileadmin/website_uni_ulm/kiz/wir_ueber_uns/kiz-bo.pdf terms of use for services of the Communication and Information Center (kiz) of Ulm University] apply.&lt;br /&gt;
&lt;br /&gt;
When registering for the service, you comply with aforementioned terms of use. Additionally you have the following obligations. You...&lt;br /&gt;
&lt;br /&gt;
=== DFG Grant Reporting Obligations ===&lt;br /&gt;
&lt;br /&gt;
*    agree to use the cluster only for research in accordance with DFG funding conditions&lt;br /&gt;
*    agree to acknowledge the bwForCluster Justus3 in your publications&lt;br /&gt;
*    agree to send us references to all publications with contributions by Justus3&lt;br /&gt;
*    agree to contribute to reports for the DFG&lt;br /&gt;
&lt;br /&gt;
See &amp;amp;rarr;  [[Justus3/Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
=== Legal Obligations ===&lt;br /&gt;
&lt;br /&gt;
*    comply with the terms of use of the software manufacturers&lt;br /&gt;
*    assure that your compute activities comply with the German Foreign Trade Act (Außenwirtschaftsgesetz - AWG) and German Foreign Trade Regulations (Außenwirtschaftsverordnung - AWV), see https://www.bafa.de/DE/Aussenwirtschaft/Ausfuhrkontrolle/Academia/academia_node.html&lt;br /&gt;
&lt;br /&gt;
=== Compliant Cluster Usage ===&lt;br /&gt;
&lt;br /&gt;
*    agree to report any problem that might endanger the cluster operations&lt;br /&gt;
*    agree to use the resources carefully (without wasting cores, memory or disk space)&lt;br /&gt;
*    accept that the system is monitored to prevent misuse&lt;br /&gt;
*    accept that job and software usage statistics are collected for improving the service and reporting to the DFG&lt;br /&gt;
*    will avoid swap file I/O operations or any other intense I/O to HOME - swap files of single-node jobs must use the node local disk space&lt;br /&gt;
*    will not run long cpu/memory intense calculations on login/vis nodes - those nodes are for interactive use, compiling and short tests only&lt;br /&gt;
*    will not mass-submit very short (minutes) jobs to the batch system&lt;br /&gt;
&lt;br /&gt;
=== Data Storage Compliance ===&lt;br /&gt;
&lt;br /&gt;
*    acknowledge that your home directory and work spaces will be deleted after expiration of your account (thus you are responsible to backup your files before your account expires)&lt;br /&gt;
*    will not store important results in workspaces, since they are not included in any backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also see&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; [[.bashrc Do&#039;s and Don&#039;ts]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Policy_Agreement&amp;diff=16284</id>
		<title>Justus3/Policy Agreement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Policy_Agreement&amp;diff=16284"/>
		<updated>2026-08-24T09:36:13Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Compliant Cluster Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== DRAFT DOCUMENT ==&lt;br /&gt;
&lt;br /&gt;
== Justus3 Policy - Agreement - V0 ==&lt;br /&gt;
&lt;br /&gt;
For all users of bwForCluster Justus3 for Computational Chemistry and Quantum Sciences the [https://www.uni-ulm.de/fileadmin/website_uni_ulm/kiz/wir_ueber_uns/kiz-bo.pdf terms of use for services of the Communication- and Information Center (kiz) of Ulm University] apply.&lt;br /&gt;
&lt;br /&gt;
When registering for the service, you comply with above mentioned terms of use. Additionally you have the following obligations. You...&lt;br /&gt;
&lt;br /&gt;
=== DFG Grant Reporting Obligations ===&lt;br /&gt;
&lt;br /&gt;
*    agree to use the cluster only for research in accordance with DFG funding conditions&lt;br /&gt;
*    agree to acknowledge the bwForCluster Justus3 in your publications&lt;br /&gt;
*    agree to send us references to all publications with contributions by Justus3&lt;br /&gt;
*    agree to contribute to reports for the DFG&lt;br /&gt;
&lt;br /&gt;
=== Legal Obligations ===&lt;br /&gt;
&lt;br /&gt;
*    comply with the terms of use of the software manufacturers&lt;br /&gt;
*    assure that your compute activities comply with the German Foreign Trade Act (Außenwirtschaftsgesetz - AWG) und German Foreign Trade Regulations (Außenwirtschaftsverordnung - AWV), see https://www.bafa.de/DE/Aussenwirtschaft/Ausfuhrkontrolle/Academia/academia_node.html&lt;br /&gt;
&lt;br /&gt;
=== Compliant Cluster Usage ===&lt;br /&gt;
&lt;br /&gt;
*    agree to report any problem that might endanger the cluster operations&lt;br /&gt;
*    agree to use the resources carefully (without wasting cores, memory or disk space)&lt;br /&gt;
*    accept that the system is monitored to prevent misuse&lt;br /&gt;
*    accept that job and software usage statistics are collected for improving the service and reporting to the DFG&lt;br /&gt;
*    will avoid swap file I/O operations or any other intense I/O to HOME - swap files of single-node jobs must use the node local disk space&lt;br /&gt;
*    will not run long cpu/memory intense calculations on login/vis nodes - those nodes are for interactive use, compiling and short tests only&lt;br /&gt;
*    will not mass-submit very short (minutes) jobs to the batch system&lt;br /&gt;
&lt;br /&gt;
=== Data Storage Compliance ===&lt;br /&gt;
&lt;br /&gt;
*    acknowledge that your home directory and work spaces will be deleted after expiration of your account (thus you are responsible to backup your files before your account expires)&lt;br /&gt;
*    will not store important results in workspaces, since they are not included in any backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also see&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; [[.bashrc Do&#039;s and Don&#039;ts]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Policy_Agreement&amp;diff=16283</id>
		<title>Justus3/Policy Agreement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Policy_Agreement&amp;diff=16283"/>
		<updated>2026-08-24T09:35:58Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: Created page with &amp;quot;== DRAFT DOCUMENT ==  == Justus3 Policy - Agreement - V0 ==  For all users of bwForCluster Justus3 for Computational Chemistry and Quantum Sciences the [https://www.uni-ulm.de/fileadmin/website_uni_ulm/kiz/wir_ueber_uns/kiz-bo.pdf terms of use for services of the Communication- and Information Center (kiz) of Ulm University] apply.  When registering for the service, you comply with above mentioned terms of use. Additionally you have the following obligations. You...  ===...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== DRAFT DOCUMENT ==&lt;br /&gt;
&lt;br /&gt;
== Justus3 Policy - Agreement - V0 ==&lt;br /&gt;
&lt;br /&gt;
For all users of bwForCluster Justus3 for Computational Chemistry and Quantum Sciences the [https://www.uni-ulm.de/fileadmin/website_uni_ulm/kiz/wir_ueber_uns/kiz-bo.pdf terms of use for services of the Communication- and Information Center (kiz) of Ulm University] apply.&lt;br /&gt;
&lt;br /&gt;
When registering for the service, you comply with above mentioned terms of use. Additionally you have the following obligations. You...&lt;br /&gt;
&lt;br /&gt;
=== DFG Grant Reporting Obligations ===&lt;br /&gt;
&lt;br /&gt;
*    agree to use the cluster only for research in accordance with DFG funding conditions&lt;br /&gt;
*    agree to acknowledge the bwForCluster Justus3 in your publications&lt;br /&gt;
*    agree to send us references to all publications with contributions by Justus3&lt;br /&gt;
*    agree to contribute to reports for the DFG&lt;br /&gt;
&lt;br /&gt;
=== Legal Obligations ===&lt;br /&gt;
&lt;br /&gt;
*    comply with the terms of use of the software manufacturers&lt;br /&gt;
*    assure that your compute activities comply with the German Foreign Trade Act (Außenwirtschaftsgesetz - AWG) und German Foreign Trade Regulations (Außenwirtschaftsverordnung - AWV), see https://www.bafa.de/DE/Aussenwirtschaft/Ausfuhrkontrolle/Academia/academia_node.html&lt;br /&gt;
&lt;br /&gt;
== Compliant Cluster Usage ==&lt;br /&gt;
&lt;br /&gt;
*    agree to report any problem that might endanger the cluster operations&lt;br /&gt;
*    agree to use the resources carefully (without wasting cores, memory or disk space)&lt;br /&gt;
*    accept that the system is monitored to prevent misuse&lt;br /&gt;
*    accept that job and software usage statistics are collected for improving the service and reporting to the DFG&lt;br /&gt;
*    will avoid swap file I/O operations or any other intense I/O to HOME - swap files of single-node jobs must use the node local disk space&lt;br /&gt;
*    will not run long cpu/memory intense calculations on login/vis nodes - those nodes are for interactive use, compiling and short tests only&lt;br /&gt;
*    will not mass-submit very short (minutes) jobs to the batch system&lt;br /&gt;
&lt;br /&gt;
=== Data Storage Compliance ===&lt;br /&gt;
&lt;br /&gt;
*    acknowledge that your home directory and work spaces will be deleted after expiration of your account (thus you are responsible to backup your files before your account expires)&lt;br /&gt;
*    will not store important results in workspaces, since they are not included in any backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also see&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr; [[.bashrc Do&#039;s and Don&#039;ts]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3&amp;diff=16280</id>
		<title>Justus3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3&amp;diff=16280"/>
		<updated>2026-08-20T15:23:55Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Justus3}}&lt;br /&gt;
&amp;lt;!-- [[File:Justus3_pre.jpg|right|frameless|thumb|alt=Justus3 |upright=0.4| Justus 3 ]] --&amp;gt;&lt;br /&gt;
&amp;lt;!--[[File:JUSTUS2_header.png|700px]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;bwForCluster Justus 3&#039;&#039;&#039; is the state-wide high-performance compute cluster dedicated to &#039;&#039;&#039;Computational Chemistry and Quantum Sciences&#039;&#039;&#039; in Baden-Württemberg. &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;  background:#FEF4AB; width:100%;&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding:8px; background:#FFE856; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | News&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
* 2026-06-16: Cooling installations for the new cluster has been enabled&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;  background:#eeeefe; width:100%;&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding:8px; background:#dedefe; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | Training &amp;amp; Support&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
* [[Justus3/Migration_from_J2|Migration Guide from JUSTUS2]]&lt;br /&gt;
* [[Justus3/Getting Started|Getting Started]]&lt;br /&gt;
* Online Tutorial [https://hpc-wiki.info/hpc/Introduction_to_Linux_in_HPC Introduction to Linux in HPC] (external link)&lt;br /&gt;
* [[Justus3/Support|Contact and Support]]&lt;br /&gt;
* Send [[Feedback|Feedback]] about Wiki pages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;  background:#deffee; width:100%;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:8px; background:#cef2e0; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | User Documentation&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* [[Registration/bwForCluster|Registration]]&lt;br /&gt;
* [[Justus3/Policy Agreement|Policy Agreement]]&lt;br /&gt;
&lt;br /&gt;
* [[Justus3/Login|Login]]&lt;br /&gt;
* [[Justus3/Hardware|Hardware and Architecture]] &lt;br /&gt;
** [[Justus3/Hardware#Node_Specifications|Node Specifications]]&lt;br /&gt;
** [[Justus3/Hardware#Storage_Architecture|File Systems and Workspaces]] &lt;br /&gt;
&lt;br /&gt;
* [[Justus3/Software|Software]]&lt;br /&gt;
* [[Justus3/Jobscripts: Running Your Calculations|Jobscripts: Running Your Calculations]]&lt;br /&gt;
** [[bwForCluster Justus 3 Slurm HOWTO|Slurm HOWTO]]&lt;br /&gt;
* [[Justus3/Visualization|Visualisation]] &lt;br /&gt;
* [[Development]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;  background:#e6e9eb; width:100%;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:8px; background:#d1dadf; font-size:120%; font-weight:bold;  text-align:left&amp;quot; | Cluster Funding&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* Please &#039;&#039;&#039;[[Justus3/Acknowledgement|acknowledge]]&#039;&#039;&#039; the Justus 3 cluster in your publications.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=.bashrc_Do%27s_and_Don%27ts&amp;diff=16193</id>
		<title>.bashrc Do&#039;s and Don&#039;ts</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=.bashrc_Do%27s_and_Don%27ts&amp;diff=16193"/>
		<updated>2026-06-29T15:39:55Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.bashrc and .profiles are files that are sourced when you log in, they set some important variables that make your shell function at a specific site setup. &lt;br /&gt;
&lt;br /&gt;
You can add commands that you want to run every time at login and when starting a job by adding lines to these files, but you can also make mistakes that make your life or the life of the cluster teams harder.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;ts ==&lt;br /&gt;
&lt;br /&gt;
* don&#039;t forget to test your changes before you log out (log in on a second shell)&lt;br /&gt;
* don&#039;t put &amp;lt;code&amp;gt; module load &amp;lt;/code&amp;gt; commands in .bashrc, modules may make changes that break the default system environment&lt;br /&gt;
* don&#039;t put LD_PRELOAD or LIBRARY_PATH in your .bashrc, unless you know exactly what you&#039;re doing&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== Do&#039;s == &lt;br /&gt;
* make a copy of your .bashrc before making large changes&lt;br /&gt;
* &#039;&#039;&#039;test&#039;&#039;&#039; your changes to .bashrc before you log out&lt;br /&gt;
* add command aliases or bash functions in .bashrc - example: &amp;lt;code&amp;gt; alias l=&#039;ls -la&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
* add a local ~/bin or similar to $PATH if needed&lt;br /&gt;
* improve your terminal command history experience:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
shopt -s histappend                    # append to the history file, don&#039;t overwrite it&lt;br /&gt;
shopt -s direxpand                     # expand dirs before trying to expand filenames&lt;br /&gt;
HISTSIZE=1000000                       # number of commands stored in one terminal session&lt;br /&gt;
HISTFILESIZE=20000000                  # number of commmands stored in file&lt;br /&gt;
HISTFILE=&amp;quot;$HOME&amp;quot;/.bash_history_$USER   # prevent file truncation by bash sessions that did not read in .bashrc&lt;br /&gt;
PROMPT_COMMAND=&amp;quot;history -a&amp;quot;            # save history after every command&lt;br /&gt;
HISTCONTROL=ignoreboth:erasedups       # dont store duplicates and ignore lines starting with white space&lt;br /&gt;
HISTIGNORE=&amp;quot;?:??&amp;quot;                      # dont store one and two letter commands&lt;br /&gt;
export HISTTIMEFORMAT=&amp;quot;%F %H:%M:%S   &amp;quot; # show dates on history&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* maybe make your rm / cp commands safer by aliasing to -i &amp;lt;code&amp;gt; alias rm &#039;rm -i&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Autoedits / Conda ==&lt;br /&gt;
&lt;br /&gt;
There is some software (e.g. Conda) that automatically modifies .bashrc. These modifications may interfere with the proper functioning of e.g. Python from Lmod modules or the Jupyter modules. Make sure you have a copy of your .bashrc and test it after installing such software.&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Data_Transfer/SSHFS&amp;diff=16192</id>
		<title>Data Transfer/SSHFS</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Data_Transfer/SSHFS&amp;diff=16192"/>
		<updated>2026-06-29T13:30:11Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sshfs is a network protocol for mounting data. It uses [[Data Transfer/SFTP|sftp]] under the hood.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
For the necessary installations follow this link:&amp;lt;br /&amp;gt; [https://linuxize.com/post/how-to-use-sshfs-to-mount-remote-directories-over-ssh/ How to use SSHFS to Mount Remote Directories over SSH].&amp;lt;br /&amp;gt;&lt;br /&gt;
a) &#039;&#039;&#039;MacOS after the installation&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
To enable sshfs on your Mac go to: System Preferences -&amp;amp;gt; General tab -&amp;amp;gt; Allow Extensions button&amp;lt;br /&amp;gt;&lt;br /&gt;
Then follow the instructions that pop up (make sure that you remember the instructions before shutting down your computer).&amp;lt;br /&amp;gt;&lt;br /&gt;
b) &#039;&#039;&#039;Linux installation short commands&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Debian/Ubuntu: &amp;lt;code&amp;gt;apt-get install sshfs&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CentOS/RedHat: &amp;lt;code&amp;gt;dnf install fuse-sshfs&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you want to use /etc/fstab, you can do this with the following entry:&lt;br /&gt;
&amp;lt;pre&amp;gt;sshfs#&amp;amp;lt;username&amp;amp;gt;@&amp;amp;lt;hostname&amp;amp;gt;:    &amp;amp;lt;your_local_mountpoint&amp;amp;gt;   fuse   defaults,user,noauto,exec        0       0 &amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
=== Caveat: Unmounting ===&lt;br /&gt;
&lt;br /&gt;
Note that this creates a virtual drive on your system just as if you would plug in an external drive that stays active until you unmount it. Disk mounts happen on a low level of operating systems, so it is important to unmount the virtual drive cleanly whenever possible.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MacOS &amp;amp; Linux:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
If the connection to the cluster broke and you want to remount, you often have to use umount first. Try to remember to always unmount first before retrying. Otherwise it can happen that unmounting is not possible anymore by cmd. Usually the error message in this case tells you that the process is currently busy and therefore cannot umount. &lt;br /&gt;
&lt;br /&gt;
You should be able to find the process(es) that use the file system with &amp;lt;code&amp;gt;fuser -m &amp;amp;lt;your_local_mountpoint&amp;amp;gt;&amp;lt;/code&amp;gt; and kill/exit the processes that block unmounting or can kill them directly using &amp;lt;code&amp;gt;fuser -k -m &amp;amp;lt;your_local_mountpoint&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
In case this fails, you may have to restart your computer which automatically unmounts everything.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash&lt;br /&gt;
umount -f &amp;amp;lt;localPath&amp;amp;gt;&lt;br /&gt;
# For example&lt;br /&gt;
umount -f /Users/&amp;amp;lt;username&amp;amp;gt;/Documents/mounted&lt;br /&gt;
# or use&lt;br /&gt;
fusermount -u &amp;amp;lt;localPath&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; MacOS &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
An automatic umount is highly recommended, because MacOS finder can make thousands of insuccessful login attempts in the worst case leading to you being blocked from the cluster system or even from everything that uses the same OTP.&lt;br /&gt;
&lt;br /&gt;
Example for enabling automatic umount per &amp;quot;sleepwatcher&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install sleepwatcher&lt;br /&gt;
brew services start sleepwatcher&lt;br /&gt;
brew services info sleepwatcher&lt;br /&gt;
cat &amp;gt; ~/.sleep &amp;lt;&amp;lt;EOT&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umount -f ~/mountCluster 2&amp;gt;/dev/null&lt;br /&gt;
EOT&lt;br /&gt;
chmod a+x ~/.sleep&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows&#039;&#039;&#039;&lt;br /&gt;
You should be able to click on the drive and choose &amp;quot;eject&amp;quot; or &amp;quot;unmount&amp;quot;. If this is not the case, you can use &lt;br /&gt;
 net use X: /delete&lt;br /&gt;
or if this does not work&lt;br /&gt;
 taskkill /f /im sshfs.exe &lt;br /&gt;
(from: [https://stackoverflow.com/questions/62031900/how-to-unmount-close-the-mount-for-sshfs-windows stackoverflow])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&#039;&#039;Caution: sshfs on Windows doesn&#039;t work with 2FA. An alternative is [[Data_Transfer/Rclone | Rclone with sftp]] + [[Registration/SSH | ssh key]].&#039;&#039;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to &amp;amp;quot;This PC&amp;amp;quot; and select &amp;amp;quot;Connect network drive&amp;amp;quot; (&amp;amp;quot;Netzlaufwerk verbinden&amp;amp;quot;)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select a drive (W:) and click on &amp;amp;quot;connect with webpage on which you can save documents and images&amp;amp;quot; (Verbindung mit website herstellen, auf der Sie Dokumente und Bilder speichern können)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enter the following as address, to connect to the home or root folder:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;\sshfs\&amp;lt;username&amp;gt;@&amp;lt;hostname&amp;gt;/&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If you would want to go two folders up, you would add “&#039;&#039;../../&#039;&#039;” at the end.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS &amp;amp; Linux ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create an empty directory. The cluster/storage folder is going to be mounted to this directory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Mount a folder from the cluster/storage:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Home folder&lt;br /&gt;
sshfs &amp;lt;username&amp;gt;@&amp;lt;hostname&amp;gt;: &amp;lt;localPath&amp;gt;&lt;br /&gt;
# subfolderX&lt;br /&gt;
sshfs &amp;lt;username&amp;gt;@&amp;lt;hostname&amp;gt;:subfolderX &amp;lt;localPath&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Data_Transfer/SSHFS&amp;diff=16191</id>
		<title>Data Transfer/SSHFS</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Data_Transfer/SSHFS&amp;diff=16191"/>
		<updated>2026-06-29T11:36:56Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* MacOS &amp;amp; Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sshfs is a network protocol for mounting data. It uses [[Data Transfer/SFTP|sftp]] under the hood.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
For the necessary installations follow this link:&amp;lt;br /&amp;gt; [https://linuxize.com/post/how-to-use-sshfs-to-mount-remote-directories-over-ssh/ How to use SSHFS to Mount Remote Directories over SSH].&amp;lt;br /&amp;gt;&lt;br /&gt;
a) &#039;&#039;&#039;MacOS after the installation&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
To enable sshfs on your Mac go to: System Preferences -&amp;amp;gt; General tab -&amp;amp;gt; Allow Extensions button&amp;lt;br /&amp;gt;&lt;br /&gt;
Then follow the instructions that pop up (make sure that you remember the instructions before shutting down your computer).&amp;lt;br /&amp;gt;&lt;br /&gt;
b) &#039;&#039;&#039;Linux installation short commands&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Debian/Ubuntu: &amp;lt;code&amp;gt;apt-get install sshfs&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CentOS/RedHat: &amp;lt;code&amp;gt;dnf install fuse-sshfs&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you want to use /etc/fstab, you can do this with the following entry:&lt;br /&gt;
&amp;lt;pre&amp;gt;sshfs#&amp;amp;lt;username&amp;amp;gt;@&amp;amp;lt;hostname&amp;amp;gt;:    &amp;amp;lt;your_local_mountpoint&amp;amp;gt;   fuse   defaults,user,noauto,exec        0       0 &amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
=== Caveat: Unmounting ===&lt;br /&gt;
&lt;br /&gt;
Note that this creates a virtual drive on your system just as if you would plug in an external drive that stays active until you unmount it. Disk mounts happen on a low level of operating systems, so it is important to unmount the virtual drive cleanly whenever possible.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MacOS &amp;amp; Linux:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
If the connection to the cluster broke and you want to remount, you often have to use umount first. Try to remember to always unmount first before retrying. Otherwise it can happen that unmounting is not possible anymore by cmd. Usually the error message in this case tells you that the process is currently busy and therefore cannot umount. &lt;br /&gt;
&lt;br /&gt;
You should be able to find the process(es) that use the file system with &amp;lt;code&amp;gt;fuser -m &amp;amp;lt;your_local_mountpoint&amp;amp;gt;&amp;lt;/code&amp;gt; and kill/exit the processes that block unmounting or can kill them directly using &amp;lt;code&amp;gt;fuser -k -m &amp;amp;lt;your_local_mountpoint&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
In case this fails, you may have to restart your computer which automatically unmounts everything.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash&lt;br /&gt;
umount -f &amp;amp;lt;localPath&amp;amp;gt;&lt;br /&gt;
# For example&lt;br /&gt;
umount -f /Users/&amp;amp;lt;username&amp;amp;gt;/Documents/mounted&lt;br /&gt;
# or use&lt;br /&gt;
fusermount -u &amp;amp;lt;localPath&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows&#039;&#039;&#039;&lt;br /&gt;
You should be able to click on the drive and choose &amp;quot;eject&amp;quot; or &amp;quot;unmount&amp;quot;. If this is not the case, you can use &lt;br /&gt;
 net use X: /delete&lt;br /&gt;
or if this does not work&lt;br /&gt;
 taskkill /f /im sshfs.exe &lt;br /&gt;
(from: [https://stackoverflow.com/questions/62031900/how-to-unmount-close-the-mount-for-sshfs-windows stackoverflow])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&#039;&#039;Caution: sshfs on Windows doesn&#039;t work with 2FA. An alternative is [[Data_Transfer/Rclone | Rclone with sftp]] + [[Registration/SSH | ssh key]].&#039;&#039;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to &amp;amp;quot;This PC&amp;amp;quot; and select &amp;amp;quot;Connect network drive&amp;amp;quot; (&amp;amp;quot;Netzlaufwerk verbinden&amp;amp;quot;)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select a drive (W:) and click on &amp;amp;quot;connect with webpage on which you can save documents and images&amp;amp;quot; (Verbindung mit website herstellen, auf der Sie Dokumente und Bilder speichern können)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enter the following as address, to connect to the home or root folder:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;\sshfs\&amp;lt;username&amp;gt;@&amp;lt;hostname&amp;gt;/&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If you would want to go two folders up, you would add “&#039;&#039;../../&#039;&#039;” at the end.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOS &amp;amp; Linux ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create an empty directory. The cluster/storage folder is going to be mounted to this directory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Mount a folder from the cluster/storage:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Home folder&lt;br /&gt;
sshfs &amp;lt;username&amp;gt;@&amp;lt;hostname&amp;gt;: &amp;lt;localPath&amp;gt;&lt;br /&gt;
# subfolderX&lt;br /&gt;
sshfs &amp;lt;username&amp;gt;@&amp;lt;hostname&amp;gt;:subfolderX &amp;lt;localPath&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MacOS ==&lt;br /&gt;
&lt;br /&gt;
An automatic umount is highly recommended, because MacOS finder can make thousands of insuccessful login attempts in the worst case leading to you being blocked from the cluster system or even from everything that uses the same OTP.&lt;br /&gt;
&lt;br /&gt;
Example for enabling automatic umount per &amp;quot;sleepwatcher&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install sleepwatcher&lt;br /&gt;
brew services start sleepwatcher&lt;br /&gt;
brew services info sleepwatcher&lt;br /&gt;
cat &amp;gt; ~/.sleep &amp;lt;&amp;lt;EOT&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umount -f ~/mountCluster 2&amp;gt;/dev/null&lt;br /&gt;
EOT&lt;br /&gt;
chmod a+x ~/.sleep&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Getting_Started&amp;diff=16190</id>
		<title>Justus3/Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Getting_Started&amp;diff=16190"/>
		<updated>2026-06-26T13:58:30Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Here is a short list of things you may need to do first when you get onto the cluster&lt;br /&gt;
&lt;br /&gt;
== Pre-Requisites ==&lt;br /&gt;
* Know how a HPC compute Cluster works: In short: you do not simply run log in and start your software, but you write a &amp;quot;job script&amp;quot; that contains all commands to run and process your job and send this into a waiting queue to be run on one of several hundred computers.  &amp;amp;rarr;  &#039;&#039;&#039;[[Running Calculations]]&#039;&#039;&#039;&lt;br /&gt;
* Get Access: Follow the registration process for the bwForCluster. &amp;amp;rarr; [[Registration/bwForCluster|How to Register for a bwForCluster]]&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
* know the cluster rules: &amp;amp;rarr; &#039;&#039;&#039;[[Justus3/Policy_Agreement]]&#039;&#039;&#039;&lt;br /&gt;
* log in to the cluster (and first set a 2FA secret): &#039;&#039;&#039;[[Justus3/Login]]&#039;&#039;&#039;&lt;br /&gt;
* get accustomed with the linux commandline: &lt;br /&gt;
** HPC Wiki (external site) &amp;amp;rarr;  &#039;&#039;&#039;[https://hpc-wiki.info/hpc/Introduction_to_Linux_in_HPC/The_Command_Line Introduction to Linux Commandline]&#039;&#039;&#039;&lt;br /&gt;
** Have commands ready &amp;amp;rarr; &#039;&#039;&#039;[[Media:HPC_User_Linux_command_cheatsheet.pdf|HPC User&#039;s Linux Cheat Sheet (PDF)]]&#039;&#039;&#039;&lt;br /&gt;
** configure your shell &amp;amp;rarr; &#039;&#039;&#039;[[.bashrc Do&#039;s and Don&#039;ts]]&#039;&#039;&#039;&lt;br /&gt;
** linux course at &#039;&#039;&#039;[https://training.bwhpc.de/ training.bwhpc.de]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Running an Example with Preinstalled  Software ==&lt;br /&gt;
* scientific software: learn how to load &#039;&#039;&#039;[[Software Modules]]&#039;&#039;&#039;&lt;br /&gt;
* continue reading until you found that there are example job scripts: &#039;&#039;&#039;[[Environment_Modules#Software_job_examples]]&#039;&#039;&#039;&lt;br /&gt;
* submit a sample job from a software as mentioned in the job example. Also see: &#039;&#039;&#039;[[Justus3/Slurm]]&#039;&#039;&#039;&lt;br /&gt;
* monitor your job: &#039;&#039;&#039;[[Justus3/Monitoring Your Jobs]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Running Your Own Calculations in a Batch Job ==&lt;br /&gt;
{{Template:AttentionBox|Compute jobs on nodes &#039;&#039;&#039;must not&#039;&#039;&#039; write temporary I/O intensive data to central file systems.}}&lt;br /&gt;
* transfer your own data to the cluster &amp;amp;rarr; &#039;&#039;&#039;[[Data Transfer]]&#039;&#039;&#039;&lt;br /&gt;
** Learn about available Hardware: &lt;br /&gt;
*** &amp;amp;rarr; &#039;&#039;&#039;[[Justus3/File Systems]]&#039;&#039;&#039;&lt;br /&gt;
*** &amp;amp;rarr; &#039;&#039;&#039;[[Justus3/Compute Node Types]]&#039;&#039;&#039;&lt;br /&gt;
* adapt the sample job script to run your own job&lt;br /&gt;
* Submit and monitor your jobs with Slurm commands. &lt;br /&gt;
** &amp;amp;rarr; &#039;&#039;&#039;[[Justus3/Jobscripts: Running Your Calculations|Jobscripts: Running Your Calculations]]&#039;&#039;&#039;&lt;br /&gt;
** &amp;amp;rarr; &#039;&#039;&#039;[[BwForCluster_JUSTUS_2_Slurm_HOWTO| extensive Slurm HOWTO on specific tasks]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Remember to mention the cluster in your publications. &amp;amp;rarr; &#039;&#039;&#039;[[bwForCluster Justus 3  Acknowledgement|Acknowledgement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Do Production Runs with Hundreds of Jobs ==&lt;br /&gt;
&lt;br /&gt;
* Learn about Scaling your Job&lt;br /&gt;
** Determine how many compute-cores the job can use? &amp;amp;rarr; &#039;&#039;&#039;[[Scaling]]&#039;&#039;&#039;&lt;br /&gt;
** Make especially sure your compute jobs are running efficiently &amp;amp;rarr; &#039;&#039;&#039;[[Energy Efficient Cluster Usage]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Specially remember to mention the cluster in your publications. &amp;amp;rarr; &#039;&#039;&#039;[[bwForCluster Justus 3  Acknowledgement|Acknowledgement]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Getting_Started&amp;diff=16189</id>
		<title>Justus3/Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Getting_Started&amp;diff=16189"/>
		<updated>2026-06-26T13:57:07Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: /* Basics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Here is a short list of things you may need to do first when you get onto the cluster&lt;br /&gt;
&lt;br /&gt;
== Pre-Requisites ==&lt;br /&gt;
* Know how a HPC compute Cluster works: In short: you do not simply run log in and start your software, but you write a &amp;quot;job script&amp;quot; that contains all commands to run and process your job and send this into a waiting queue to be run on one of several hundred computers.  &amp;amp;rarr;  &#039;&#039;&#039;[[Running Calculations]]&#039;&#039;&#039;&lt;br /&gt;
* Get Access: Follow the registration process for the bwForCluster. &amp;amp;rarr; [[Registration/bwForCluster|How to Register for a bwForCluster]]&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
* know the cluster rules: &amp;amp;rarr; &#039;&#039;&#039;[[Justus3/Policy_Agreement]]&#039;&#039;&#039;&lt;br /&gt;
* log in to the cluster (and first set a 2FA secret): &#039;&#039;&#039;[[JUSTUS3/Login]]&#039;&#039;&#039;&lt;br /&gt;
* get accustomed with the linux commandline: &lt;br /&gt;
** HPC Wiki (external site) &amp;amp;rarr;  &#039;&#039;&#039;[https://hpc-wiki.info/hpc/Introduction_to_Linux_in_HPC/The_Command_Line Introduction to Linux Commandline]&#039;&#039;&#039;&lt;br /&gt;
** Have commands ready &amp;amp;rarr; &#039;&#039;&#039;[[Media:HPC_User_Linux_command_cheatsheet.pdf|HPC User&#039;s Linux Cheat Sheet (PDF)]]&#039;&#039;&#039;&lt;br /&gt;
** configure your shell &amp;amp;rarr; &#039;&#039;&#039;[[.bashrc Do&#039;s and Don&#039;ts]]&#039;&#039;&#039;&lt;br /&gt;
** linux course at &#039;&#039;&#039;[https://training.bwhpc.de/ training.bwhpc.de]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Running an Example with Preinstalled  Software ==&lt;br /&gt;
* scientific software: learn how to load &#039;&#039;&#039;[[Software Modules]]&#039;&#039;&#039;&lt;br /&gt;
* continue reading until you found that there are example job scripts: &#039;&#039;&#039;[[Environment_Modules#Software_job_examples]]&#039;&#039;&#039;&lt;br /&gt;
* submit a sample job from a software as mentioned in the job example. Also see: &#039;&#039;&#039;[[JUSTUS3/Slurm]]&#039;&#039;&#039;&lt;br /&gt;
* monitor your job: &#039;&#039;&#039;[[JUSTUS3/Monitoring Your Jobs]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Running Your Own Calculations in a Batch Job ==&lt;br /&gt;
{{Template:AttentionBox|Compute jobs on nodes &#039;&#039;&#039;must not&#039;&#039;&#039; write temporary I/O intensive data to central file systems.}}&lt;br /&gt;
* transfer your own data to the cluster &amp;amp;rarr; &#039;&#039;&#039;[[Data Transfer]]&#039;&#039;&#039;&lt;br /&gt;
** Learn about available Hardware: &lt;br /&gt;
*** &amp;amp;rarr; &#039;&#039;&#039;[[JUSTUS3/File Systems]]&#039;&#039;&#039;&lt;br /&gt;
*** &amp;amp;rarr; &#039;&#039;&#039;[[JUSTUS3/Compute Node Types]]&#039;&#039;&#039;&lt;br /&gt;
* adapt the sample job script to run your own job&lt;br /&gt;
&amp;lt;!-- TODO: review and put script on own page and link here [[BwForCluster_JUSTUS_2_Slurm_HOWTO#How_to_clean-up_or_save_files_before_a_job_times_out.3F| Slurm Howto]] shows how to copy and clean up your data from /tmp or /scratch at the end of the job --&amp;gt;&lt;br /&gt;
* Submit and monitor your jobs with Slurm commands. &lt;br /&gt;
** &amp;amp;rarr; &#039;&#039;&#039;[[JUSTUS3/Jobscripts: Running Your Calculations|Jobscripts: Running Your Calculations]]&#039;&#039;&#039;&lt;br /&gt;
** &amp;amp;rarr; &#039;&#039;&#039;[[BwForCluster_JUSTUS_2_Slurm_HOWTO| extensive Slurm HOWTO on specific tasks]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Remember to mention the cluster in your publications. &amp;amp;rarr; &#039;&#039;&#039;[[bwForCluster JUSTUS 3  Acknowledgement|Acknowledgement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Do Production Runs with Hundreds of Jobs ==&lt;br /&gt;
&lt;br /&gt;
* Learn about Scaling your Job&lt;br /&gt;
** Determine how many compute-cores the job can use? &amp;amp;rarr; &#039;&#039;&#039;[[Scaling]]&#039;&#039;&#039;&lt;br /&gt;
** Make especially sure your compute jobs are running efficiently &amp;amp;rarr; &#039;&#039;&#039;[[Energy Efficient Cluster Usage]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Specially remember to mention the cluster in your publications. &amp;amp;rarr; &#039;&#039;&#039;[[bwForCluster JUSTUS 3  Acknowledgement|Acknowledgement]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Getting_Started&amp;diff=16188</id>
		<title>Justus3/Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Getting_Started&amp;diff=16188"/>
		<updated>2026-06-26T13:56:14Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: K Siegmund moved page JUSTUS3/Getting Started to Justus3/Getting Started without leaving a redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Here is a short list of things you may need to do first when you get onto the cluster&lt;br /&gt;
&lt;br /&gt;
== Pre-Requisites ==&lt;br /&gt;
* Know how a HPC compute Cluster works: In short: you do not simply run log in and start your software, but you write a &amp;quot;job script&amp;quot; that contains all commands to run and process your job and send this into a waiting queue to be run on one of several hundred computers.  &amp;amp;rarr;  &#039;&#039;&#039;[[Running Calculations]]&#039;&#039;&#039;&lt;br /&gt;
* Get Access: Follow the registration process for the bwForCluster. &amp;amp;rarr; [[Registration/bwForCluster|How to Register for a bwForCluster]]&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
* know the cluster rules: &amp;amp;rarr; &#039;&#039;&#039;[[JUSTUS3/Policy_Agreement]]&#039;&#039;&#039;&lt;br /&gt;
* log in to the cluster (and first set a 2FA secret): &#039;&#039;&#039;[[JUSTUS3/Login]]&#039;&#039;&#039;&lt;br /&gt;
* get accustomed with the linux commandline: &lt;br /&gt;
** HPC Wiki (external site) &amp;amp;rarr;  &#039;&#039;&#039;[https://hpc-wiki.info/hpc/Introduction_to_Linux_in_HPC/The_Command_Line Introduction to Linux Commandline]&#039;&#039;&#039;&lt;br /&gt;
** Have commands ready &amp;amp;rarr; &#039;&#039;&#039;[[Media:HPC_User_Linux_command_cheatsheet.pdf|HPC User&#039;s Linux Cheat Sheet (PDF)]]&#039;&#039;&#039;&lt;br /&gt;
** configure your shell &amp;amp;rarr; &#039;&#039;&#039;[[.bashrc Do&#039;s and Don&#039;ts]]&#039;&#039;&#039;&lt;br /&gt;
** linux course at &#039;&#039;&#039;[https://training.bwhpc.de/ training.bwhpc.de]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Running an Example with Preinstalled  Software ==&lt;br /&gt;
* scientific software: learn how to load &#039;&#039;&#039;[[Software Modules]]&#039;&#039;&#039;&lt;br /&gt;
* continue reading until you found that there are example job scripts: &#039;&#039;&#039;[[Environment_Modules#Software_job_examples]]&#039;&#039;&#039;&lt;br /&gt;
* submit a sample job from a software as mentioned in the job example. Also see: &#039;&#039;&#039;[[JUSTUS3/Slurm]]&#039;&#039;&#039;&lt;br /&gt;
* monitor your job: &#039;&#039;&#039;[[JUSTUS3/Monitoring Your Jobs]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Running Your Own Calculations in a Batch Job ==&lt;br /&gt;
{{Template:AttentionBox|Compute jobs on nodes &#039;&#039;&#039;must not&#039;&#039;&#039; write temporary I/O intensive data to central file systems.}}&lt;br /&gt;
* transfer your own data to the cluster &amp;amp;rarr; &#039;&#039;&#039;[[Data Transfer]]&#039;&#039;&#039;&lt;br /&gt;
** Learn about available Hardware: &lt;br /&gt;
*** &amp;amp;rarr; &#039;&#039;&#039;[[JUSTUS3/File Systems]]&#039;&#039;&#039;&lt;br /&gt;
*** &amp;amp;rarr; &#039;&#039;&#039;[[JUSTUS3/Compute Node Types]]&#039;&#039;&#039;&lt;br /&gt;
* adapt the sample job script to run your own job&lt;br /&gt;
&amp;lt;!-- TODO: review and put script on own page and link here [[BwForCluster_JUSTUS_2_Slurm_HOWTO#How_to_clean-up_or_save_files_before_a_job_times_out.3F| Slurm Howto]] shows how to copy and clean up your data from /tmp or /scratch at the end of the job --&amp;gt;&lt;br /&gt;
* Submit and monitor your jobs with Slurm commands. &lt;br /&gt;
** &amp;amp;rarr; &#039;&#039;&#039;[[JUSTUS3/Jobscripts: Running Your Calculations|Jobscripts: Running Your Calculations]]&#039;&#039;&#039;&lt;br /&gt;
** &amp;amp;rarr; &#039;&#039;&#039;[[BwForCluster_JUSTUS_2_Slurm_HOWTO| extensive Slurm HOWTO on specific tasks]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Remember to mention the cluster in your publications. &amp;amp;rarr; &#039;&#039;&#039;[[bwForCluster JUSTUS 3  Acknowledgement|Acknowledgement]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Do Production Runs with Hundreds of Jobs ==&lt;br /&gt;
&lt;br /&gt;
* Learn about Scaling your Job&lt;br /&gt;
** Determine how many compute-cores the job can use? &amp;amp;rarr; &#039;&#039;&#039;[[Scaling]]&#039;&#039;&#039;&lt;br /&gt;
** Make especially sure your compute jobs are running efficiently &amp;amp;rarr; &#039;&#039;&#039;[[Energy Efficient Cluster Usage]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Specially remember to mention the cluster in your publications. &amp;amp;rarr; &#039;&#039;&#039;[[bwForCluster JUSTUS 3  Acknowledgement|Acknowledgement]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Acknowledgement&amp;diff=16186</id>
		<title>Acknowledgement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Acknowledgement&amp;diff=16186"/>
		<updated>2026-06-25T09:36:31Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Remember to acknowledge our resources in your publications!&lt;br /&gt;
&lt;br /&gt;
Such recognition is important for acquiring funding for the next generation of hardware, support services, data storage, and infrastructure.&lt;br /&gt;
&lt;br /&gt;
The publications will be referenced on the bwHPC website: https://www.bwhpc.de/user_publications.html&lt;br /&gt;
&lt;br /&gt;
== HPC Clusters ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[BwUniCluster3.0/Acknowledgement| bwUniCluster Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[BinAC2/Acknowledgement| bwForCluster BinAC2 Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[Helix/Acknowledgement| bwForCluster Helix Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[Justus3/Acknowledgement| bwForCluster Justus 3 Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[NEMO2/Acknowledgement| bwForCluster NEMO2 Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
== Data Facilities ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[SDS@hd/Acknowledgement| SDS@hd Acknowledgement]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Acknowledgement&amp;diff=16185</id>
		<title>Acknowledgement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Acknowledgement&amp;diff=16185"/>
		<updated>2026-06-25T09:36:11Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Remember to acknowledge our resources in your publications!&lt;br /&gt;
&lt;br /&gt;
Such recognition is important for acquiring funding for the next generation of hardware, support services, data storage, and infrastructure.&lt;br /&gt;
&lt;br /&gt;
The publications will be referenced on the bwHPC website: https://www.bwhpc.de/user_publications.html&lt;br /&gt;
&lt;br /&gt;
== HPC Clusters ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[BwUniCluster3.0/Acknowledgement| bwUniCluster Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[BinAC2/Acknowledgement| bwForCluster BinAC2 Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[Helix/Acknowledgement| bwForCluster Helix Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[JUSTUS3/Acknowledgement| bwForCluster JUSTUS3 Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[NEMO2/Acknowledgement| bwForCluster NEMO2 Acknowledgement]]&lt;br /&gt;
&lt;br /&gt;
== Data Facilities ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;rarr;[[SDS@hd/Acknowledgement| SDS@hd Acknowledgement]]&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Acknowledgement&amp;diff=16184</id>
		<title>Justus3/Acknowledgement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Acknowledgement&amp;diff=16184"/>
		<updated>2026-06-25T09:06:03Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Acknowledgement ==&lt;br /&gt;
When preparing a publication based on work using a bwForCluster (e.g., Justus 3), please ensure you acknowledge the bwHPC initiative, the bwHPC-S5 project, and the specific facility. The following text is suggested.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Acknowledgement:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;The authors acknowledge support by the HPC team at the Communication and Information Center (kiz) of Ulm University, the state of Baden-Württemberg through bwHPC and the German Research Foundation (DFG) for funding under [https://gepris.dfg.de/gepris/projekt/533954541 &amp;quot;Project number 533954541&amp;quot;] HPC Forschungscluster (bwForCluster Justus 3)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Publication Reporting ==&lt;br /&gt;
&lt;br /&gt;
Please inform us of any fully published publications (e.g., journal articles, books, theses, master or bachelor thesis) resulting from bwHPC resource usage.  Such recognition is important for acquiring funding for the next generation hardware, support services, data storage and infrastructure.&lt;br /&gt;
&lt;br /&gt;
For pre-prints, please wait until the paper is fully published and send us only the final record. Please avoid sending publications already reported a second time. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can happen in one of three ways:&lt;br /&gt;
&lt;br /&gt;
1) with your annual RV renewal (the form will ask for DOIs - most practical, as it will allow to select exactly the publications published in the last year)&lt;br /&gt;
&lt;br /&gt;
2)  by emailing to:&lt;br /&gt;
* [mailto:publications(ät)bwhpc.de  publications(ät)bwhpc.de]&lt;br /&gt;
&lt;br /&gt;
In the email, please state:&lt;br /&gt;
* cluster facility (e.g. JUSTUS 3)&lt;br /&gt;
* RV acronym (e.g. bw14L001)&lt;br /&gt;
* DOI&lt;br /&gt;
* author(s)&lt;br /&gt;
* title &#039;&#039;or&#039;&#039; booktitle&lt;br /&gt;
* journal, volume, pages &#039;&#039;or&#039;&#039; editors, address, publisher &lt;br /&gt;
* year.&lt;br /&gt;
&lt;br /&gt;
3) when in the process of writing the DFG report, we will send you a list of your already submitted publications and ask you to update it for the report. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The publications will be referenced on the bwHPC website:&lt;br /&gt;
 https://www.bwhpc.de/user_publications.html&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Acknowledgement&amp;diff=16183</id>
		<title>Justus3/Acknowledgement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Acknowledgement&amp;diff=16183"/>
		<updated>2026-06-25T09:00:50Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Acknowledgement ==&lt;br /&gt;
When preparing a publication based on work using a bwForCluster (e.g., Justus 3), please ensure you acknowledge the bwHPC initiative, the bwHPC-S5 project, and the specific facility. The following text is suggested.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Acknowledgement:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;The authors acknowledge support by the HPC team at the Communication and Information Center (kiz) of Ulm University, the state of Baden-Württemberg through bwHPC and the German Research Foundation (DFG) for funding under [https://gepris.dfg.de/gepris/projekt/533954541 &amp;quot;Project number 533954541&amp;quot;] HPC Forschungscluster (bwForCluster Justus 3)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Publications ==&lt;br /&gt;
&lt;br /&gt;
Please kindly inform us of any publications (e.g., articles, theses, or talks) resulting from bwHPC resource usage.&lt;br /&gt;
&lt;br /&gt;
This can happen in one of three ways:&lt;br /&gt;
&lt;br /&gt;
1) with your annual RV renewal (the form will ask for DOIs)&lt;br /&gt;
&lt;br /&gt;
2)  by emailing to:&lt;br /&gt;
* [mailto:publications(ät)bwhpc.de  publications(ät)bwhpc.de]&lt;br /&gt;
&lt;br /&gt;
Write to  stating:&lt;br /&gt;
* cluster facility (e.g. JUSTUS 3)&lt;br /&gt;
* RV acronym (e.g. bw14L001)&lt;br /&gt;
* DOI (if available)&lt;br /&gt;
* author(s)&lt;br /&gt;
* title &#039;&#039;or&#039;&#039; booktitle&lt;br /&gt;
* journal, volume, pages &#039;&#039;or&#039;&#039; editors, address, publisher &lt;br /&gt;
* year.&lt;br /&gt;
&lt;br /&gt;
3) when in the process of writing the DFG report, we will send you a list of your already submitted publications and ask you to update it for the report. &lt;br /&gt;
&lt;br /&gt;
Such recognition is important for acquiring funding for the next generation hardware, support services, data storage and infrastructure.&lt;br /&gt;
&lt;br /&gt;
The publications will be referenced on the bwHPC website:&lt;br /&gt;
 https://www.bwhpc.de/user_publications.html&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Acknowledgement&amp;diff=16182</id>
		<title>Justus3/Acknowledgement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Acknowledgement&amp;diff=16182"/>
		<updated>2026-06-25T08:56:47Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When preparing a publication based on work using a bwForCluster (e.g., Justus 3), please ensure you acknowledge the bwHPC initiative, the bwHPC-S5 project, and the specific facility. The following text is suggested.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Acknowledgement:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;The authors acknowledge support by the HPC team at the Communication and Information Center (kiz) of Ulm University, the state of Baden-Württemberg through bwHPC and the German Research Foundation (DFG) for funding under [https://gepris.dfg.de/gepris/projekt/533954541 &amp;quot;Project number 533954541&amp;quot;] HPC Forschungscluster (bwForCluster Justus 3)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please kindly notify us of any publications (e.g., articles, theses, or talks) resulting from bwHPC resource usage by emailing the below email address. &#039;&#039;&#039;Note&#039;&#039;&#039;: If you already provide a complete publication list during your yearly RV renewal, a separate notification is not required.&lt;br /&gt;
&lt;br /&gt;
Write to [mailto:publications(ät)bwhpc.de  publications(ät)bwhpc.de] stating:&lt;br /&gt;
* cluster facility (e.g. JUSTUS 3)&lt;br /&gt;
* RV acronym (e.g. bw14L001)&lt;br /&gt;
* DOI (if available)&lt;br /&gt;
* author(s)&lt;br /&gt;
* title &#039;&#039;or&#039;&#039; booktitle&lt;br /&gt;
* journal, volume, pages &#039;&#039;or&#039;&#039; editors, address, publisher &lt;br /&gt;
* year.&lt;br /&gt;
&lt;br /&gt;
Such recognition is important for acquiring funding for the next generation hardware, support services, data storage and infrastructure.&lt;br /&gt;
&lt;br /&gt;
The publications will be referenced on the bwHPC website:&lt;br /&gt;
 https://www.bwhpc.de/user_publications.html&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Acknowledgement&amp;diff=16181</id>
		<title>Justus3/Acknowledgement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Acknowledgement&amp;diff=16181"/>
		<updated>2026-06-24T17:01:09Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When preparing a publication based on work using a bwForCluster (e.g., Justus 3), please ensure you acknowledge the bwHPC initiative, the bwHPC-S5 project, and the specific facility. The following text is suggested.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Acknowledgement:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;The authors acknowledge support by the HPC team at the Communication and Information Center (kiz) of Ulm University, the state of Baden-Württemberg through bwHPC and the German Research Foundation (DFG) for funding under [https://gepris.dfg.de/gepris/projekt/533954541 &amp;quot;Project number 533954541&amp;quot;] HPC Forschungscluster (bwForCluster Justus 3)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please kindly notify us of any publications (e.g., articles, theses, or talks) resulting from bwHPC resource usage by emailing the below email address. &#039;&#039;&#039;Note&#039;&#039;&#039;: If you already provide a complete publication list during your yearly RV renewal, a separate notification is not required.&lt;br /&gt;
&lt;br /&gt;
Write to [mailto:publications(ät)bwhpc.de  publications(ät)bwhpc.de] stating:&lt;br /&gt;
* cluster facility (e.g. JUSTUS 2)&lt;br /&gt;
* RV acronym (e.g. bw14L001)&lt;br /&gt;
* DOI (if available)&lt;br /&gt;
* author(s)&lt;br /&gt;
* title &#039;&#039;or&#039;&#039; booktitle&lt;br /&gt;
* journal, volume, pages &#039;&#039;or&#039;&#039; editors, address, publisher &lt;br /&gt;
* year.&lt;br /&gt;
&lt;br /&gt;
Such recognition is important for acquiring funding for the next generation hardware, support services, data storage and infrastructure.&lt;br /&gt;
&lt;br /&gt;
The publications will be referenced on the bwHPC website:&lt;br /&gt;
 https://www.bwhpc.de/user_publications.html&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
	<entry>
		<id>https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Acknowledgement&amp;diff=16180</id>
		<title>Justus3/Acknowledgement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bwhpc.de/wiki/index.php?title=Justus3/Acknowledgement&amp;diff=16180"/>
		<updated>2026-06-24T17:00:58Z</updated>

		<summary type="html">&lt;p&gt;K Siegmund: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When preparing a publication based on work using a bwForCluster (e.g., Justus 3), please ensure you acknowledge the bwHPC initiative, the bwHPC-S5 project, and the specific facility. The following text is suggested.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Acknowledgement:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;The authors acknowledge support by the HPC team at the Communication and Information Center (kiz) of Ulm University, the state of Baden-Württemberg through bwHPC and the German Research Foundation (DFG) for funding under [https://gepris.dfg.de/gepris/projekt/533954541 &amp;quot;Project number 533954541&amp;quot;] HPC Forschungscluster (bwForCluster Justus 3)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Please kindly notify us of any publications (e.g., articles, theses, or talks) resulting from bwHPC resource usage by emailing the below email address. &#039;&#039;&#039;Note&#039;&#039;&#039;: If you already provide a complete publication list during your yearly RV renewal, a separate notification is not required.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Write to [mailto:publications(ät)bwhpc.de  publications(ät)bwhpc.de] stating:&lt;br /&gt;
* cluster facility (e.g. JUSTUS 2)&lt;br /&gt;
* RV acronym (e.g. bw14L001)&lt;br /&gt;
* DOI (if available)&lt;br /&gt;
* author(s)&lt;br /&gt;
* title &#039;&#039;or&#039;&#039; booktitle&lt;br /&gt;
* journal, volume, pages &#039;&#039;or&#039;&#039; editors, address, publisher &lt;br /&gt;
* year.&lt;br /&gt;
&lt;br /&gt;
Such recognition is important for acquiring funding for the next generation hardware, support services, data storage and infrastructure.&lt;br /&gt;
&lt;br /&gt;
The publications will be referenced on the bwHPC website:&lt;br /&gt;
 https://www.bwhpc.de/user_publications.html&lt;/div&gt;</summary>
		<author><name>K Siegmund</name></author>
	</entry>
</feed>