Replies: 2 comments 20 replies
-
Here is the modified variant I'm using, which is basically that - resources needed for a task. version: 1
resources:
- count: 2
type: node
with:
- count: 1
label: default
type: slot
with:
- count: 2
type: core
tasks:
- command:
- ior
slot: default
count:
per_slot: 1
resources:
io:
match:
- type: shm The only difference from the above is that I'm scoping it to a named subsystem, and that is primarily for my implementation to be able to match it to the subsystem "io" and then use the custom algorithm defined there for it (subsystems might have different matching algorithms, or more explicitly - "the thing that you do" when you stumble on its edge in the graph (and have a connection to that subsystem graph). The above says "When you find this edge for "io" while traversing a slot, just match that storage type "shared memory." It's dumb and simple but will be enough to reproduce our first descriptive experiments (that were done from an image selection standpoint) now using the scheduler. |
Beta Was this translation helpful? Give feedback.
-
For the jobspec command, most of the examples I've seen are like "app" or just a single executable with args. It looks like command is a list of strings: So I'm thinking we need an ability (however it's done) to handle:
For example, for the flux operator I can provide a single command, e.g.,: apiVersion: flux-framework.org/v1alpha2
kind: MiniCluster
metadata:
name: flux-sample
spec:
size: 4
containers:
- image: ghcr.io/converged-computing/distributed-fractal
command: fractal leader And that would map easily to what we have now, but there are several cases this doesn't well address:
Also, for most complex start logic, especially if containers are involved, it's likely going to be the case that the user wants a multi-lined, custom entrypoint. Right now they would need to build that into the container, or (for the flux operator) a workaround would be to have it written in a pre or init command block, and then set the command to be to use it. I think we need to make it (for the user) stupid easy to get either a multi-line script or batch - and although I'd like to write some kind of tool to better orchestrate that, we can assume there are simple cases of multi-line that already warrant needing this. For example, for the flux operator I can do: apiVersion: flux-framework.org/v1alpha2
kind: MiniCluster
metadata:
name: flux-sample
spec:
size: 4
containers:
- image: ghcr.io/converged-computing/distributed-fractal
commands:
script: |
#!/bin/bash
echo "This is task"
if [[ "\${FLUX_TASK_RANK}" == "0" ]]; then
fractal leader --force-exit --host 0.0.0.0:50051
else
fractal worker --force-exit --host flux-sample-0.flux-service.default.svc.cluster.local:50051
fi Right now I require the user to escape envars, otherwise they get evaluated, but you could imagine that being more elegant. I'm not sure it belongs here, but (for the associated tool to use in batch or a script that accounts for rank tasks) I'd like to be able to easily ask for things like:
I know the last one works with waitable, but I'm thinking of wanting something that looks more similar to a very simple /dumb specification of a sequence of tasks and dependencies that doesn't require the user to know the nuances of flux flags. Anyway, for this particular point, I'm suggesting we have something like: tasks:
- slot: default
script: |
#!/bin/bash
echo "The answer my friend"
echo "is blowing in the wind"
echo "The answer is blowin' in the wind"
count:
per_slot: 1 And that way I can more easily write a job for, rainbow, that doesn't require my special script to exist there (but only the software needed for it). |
Beta Was this translation helpful? Give feedback.
-
This is use-case 1.2 from our valid jobspec examples, reworked to use the
nesting setup @vsoch was proposing (roughly at least), this cuts a whole lot of
complexity, and yet it's easy to machine this into canonical:
Here are some options for subsystem syntax for a rabbit:
3 nodes, all of which connect to the same rabbit by a storage link, no
limitation on number but that's implicitly one right now:
3 nodes, all of which connect to some rabbit not necessarily the same one, do
we want to have different ones for near-node vs ephemeral lustre? Honestly I'm
not sure:
Ping: @tpatki, @milroy, @jameshcorbett, @rountree
Beta Was this translation helpful? Give feedback.
All reactions