-
Notifications
You must be signed in to change notification settings - Fork 104
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issue with determining number of valid nodes for num_tasks=0 #3216
Comments
Hi @lagerhardt, this has changed in 4.6 (check the docs the |
Ah, thanks. I missed that update. So it looks like I can roughly get close to the behavior I want with the |
This note was valid even before. You can still run in parallel across reframe partitions. The reason behind this note is that the first test will consume all available nodes in the partition, so the next one will not find any idle nodes and will be skipped. But across partitions, this is not a problem, as ReFrame scopes the node request automatically. We should update this note in the docs to make this clearer. |
The issue is I have multiple gpu and cpu full system tests I want to run.
If I do that with the async execution option then the second test of
whatever type fails because there’s no available nodes. If I run with the
serial option it runs just a single test at a time so the CPU partition
sits idle while the GPU one runs and vice versa.
In an ideal case, I’d like to be able to submit all these tests (as well as
a bunch of smaller tests) at once from a single instance of reframe but I’m
having trouble thinking of how to do that
…On Wed, Jun 19, 2024 at 1:52 AM Vasileios Karakasis < ***@***.***> wrote:
This note was valid even before. You can still run in parallel across
reframe partitions. The reason behind this note is that the first test will
consume all available nodes in the partition, so the next one will not find
any idle nodes and will be skipped. But across partitions, this is not a
problem, as ReFrame scopes the node request automatically.
We should update this note in the docs to make this clearer.
—
Reply to this email directly, view it on GitHub
<#3216 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACCNHQTLY4BX3FIBDOHZRFDZIFBERAVCNFSM6AAAAABJQXYSDCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNZYGEZDQOBTHE>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
One solution that might work, is to run with the async execution but limit the number of jobs per partition to 1. So each test will try to consume all the nodes for each partition but will not submit another job until the nodes are free again. |
@lagerhardt We have now added a new pseudo-state in the flexible allocation policy. You can run with |
That sounds great! Thank you!!! When would this be available? |
It is already from 4.6 :-) |
Sorry for the long silence, finally able to come back to this. I am still getting zero nodes even with
|
Yes, I meant |
Yes, these are also reserved. We typically use a full system reservation after a maintenance to do checkout. |
I think we need to add better support for |
@vkarak , do you have any suggestions where a good place to add better support for this might be? One way might be to extend the syntax of For example, changes in +
+ if '-' in state:
+ state, ignore_states = state.split('-')
+ else:
+ ignore_states = ''
if state == 'avail':
- nodelist = {n for n in nodelist if n.is_avail()}
+ nodelist = {n for n in nodelist if n.is_avail(ignore_states)} and - def in_statex(self, state):
- return self._states == set(state.upper().split('+'))
+ def in_statex(self, state, ignore_states=''):
+ return self._states - set(ignore_states.upper().split('+')) == set(state.upper().split('+'))
- def is_avail(self):
- return any(self.in_statex(s)
+ def is_avail(self, ignore_states=''):
+ return any(self.in_statex(s, ignore_states=ignore_states)
for s in ('ALLOCATED', 'COMPLETING', 'IDLE')) Alternatively, It might be reasonable to ignore the |
Another issue with the existing
|
I think this is easily fixed if For including the |
I have an idea for this. Since we do a scheduler-specific filtering anyway here, the |
With 4.6.1, if you have a reservation and a test with num_tasks=0, the framework returns 0 node. I'm invoking the code with
reframe -vvvvvvv -r -R -c checks/microbenchmarks/dgemm -J reservation=checkout -n dgemm_cpu -C nersc-config.py
and here's what I see if I turn up the logging:There are available nodes in the reservation, though not all of them are available. Here's the list of states:
I can only get a non-zero number if I add
--flex-alloc-nodes=IDLE+RESERVED
. I still get zero if I add--flex-alloc-nodes=IDLE
. It was my understanding that asking forIDLE
was supposed to match any of these states, but that doesn't seem to be the case. I suspect that the fact that it's doing an&
between two node sets (atreframe/reframe/core/schedulers/slurm.py
Line 345 in 392efbc
The text was updated successfully, but these errors were encountered: