Xavier,
You want to use the ResumeFailedProgram script.
We use a full cloud cluster and that is where we deal with things like
this. It will get called if your ResumeProgram does not result in slurmd
being available on the node in a timely manner (whatever the reason).
Writing it yourself makes complete sense when you think about the uses.
Originally, it would be something that could be called because a node
has a hardware issue and would not start. In the ResumeFailProgram you
could send an email letting an admin know about it.
For me, I completely delete the node resources and reset/recreate it.
That addresses even a miffed software change.
Brian Andrus
On 11/23/2022 5:11 AM, Xaver Stiensmeier wrote:
Hello slurm-users,
The question can be found in a similar fashion here:
https://stackoverflow.com/questions/74529491/slurm-handling-nodes-that-fail-to-power-up-in-a-cloud-scheduling-system
Issue
Current behavior and problem description
When a node fails to |POWER_UP|, it is marked |DOWN|. While this is a
great idea in general, this is not useful when working with |CLOUD|
nodes, because said |CLOUD| node is likely to be started on a
different machine and therefore to |POWER_UP| without issues. But
since the node is marked as down, that cloud resource is no longer
used and never started again until freed manually.
Wanted behavior
Ideally slurm would not mark the node as |DOWN|, but just attempt to
start another. If that's not possible, automatically resuming |DOWN|
nodes would also be an option.
Question
How can I prevent slurm from marking nodes that fail to |POWER_UP| as
|DOWN| or make slurm restore |DOWN| nodes automatically to prevent
slurm from forgetting cloud resources?
Attempts and Thoughts
ReturnToService
I tried solving this using |ReturnToService|
<https://slurm.schedmd.com/slurm.conf.html#OPT_ReturnToService> but
that didn't seem to solve my issue, since, if I understand it
correctly, that will only accept slurm nodes starting up by themselves
or manually not taking them in consideration when scheduling jobs
until they've been started.
SlurmctldParameters=idle_on_node_suspend
While this is great and definitely helpful, it doesn't solve the issue
at hand since a node that failed during power up, is not suspended.
ResumeFailedProgram
I considered using |ResumeFailedProgram|
<https://slurm.schedmd.com/slurm.conf.html#OPT_ResumeFailProgram>, but
it sounds odd that you have to write yourself a script for returning
your nodes to service if they fail on startup. This case sounds too
usual to not be implemented in slurm. However, this will be my next
attempt: Implement a script that calls for every given node
sudo scontrol update NodeName=$NODE_NAME state=RESUME
reason=FailedShutdown
Additional Information
In the |POWER_UP| script I am terminating the server if the setup
fails for any reason and return an exit code unequal to 0.
In our Cloud Scheduling
<https://slurm.schedmd.com/elastic_computing.html> instances are
created once they are needed and deleted once they are no longer
deleted. This means that slurm stores that a node is |DOWN| while no
real instance behind it exists anymore. If that node wouldn't be
marked |DOWN| and a job would be scheduled towards it at a later time,
it would simply start an instance and run on that new instance. I am
just stating this to be maximum explicit.
Best regards,
Xaver Stiensmeier
PS: This is the first time I use the slurm-user list and I hope I am
not violating any rules with this question. Please let me know, if I do.