I think this is exactly the type of use case heterogeneous job support is for, which has been supported since Slurm 17.11

Slurm version 17.11 and later supports the ability to submit and manage heterogeneous jobs, in which each component has virtually all job options available including partition, account and QOS (Quality Of Service). For example, part of a job might require four cores and 4 GB for each of 128 tasks while another part of the job would require 16 GB of memory and one CPU.

https://slurm.schedmd.com/heterogeneous_jobs.html

Using this, you should be able to use a single core for the transfer from NFS , use all the cores/GPUs you need for the computation, and then use 1 single core to transfer back to NFS:

Disclaimer: I've never used this feature myself.

Prentice

On 4/3/21 5:31 PM, Fulcomer, Samuel wrote:
inline below...

On Sat, Apr 3, 2021 at 4:50 PM Will Dennis <wden...@nec-labs.com <mailto:wden...@nec-labs.com>> wrote:

    Sorry, obvs wasn’t ready to send that last message yet…

    Our issue is the shared storage is via NFS, and the “fast storage
    in limited supply” is only local on each node. Hence the need to
    copy it over from NFS (and then remove it when finished with it.)

    I also wanted the copy & remove to be different jobs, because the
    main processing job usually requires GPU gres, which is a
    time-limited resource on the partition. I don’t want to tie up the
    allocation of GPUs while the data is staged (and removed), and if
    the data copy fails, don’t want to even progress to the job where
    the compute happens (so like, copy_data_locally && process_data)


...yup... this is the problem. We've invested in GPFS and an NVMe Excelero pool (for initial placement); however, we still have the problem of having users pull down data from community repositories before running useful computation.

Your question has gotten me thinking about this more. In our case, all of our nodes are diskless, so this wouldn't really work for us (but we do have fast GPFS), but.... if your fast storage is only local to your nodes, the subsequent compute jobs will need to request those specific nodes, so you'll need to have a mechanism to increase the SLURM scheduling  "weight" of the nodes after staging, so the scheduler won't select them over nodes with a lower weight. That could be done in a job epilog.



        If you've got other fast storage in limited supply that can be
        used for data that can be staged, then by all means use it,
        but consider whether you want batch cpu cores tied up with the
        wall time of transferring the data. This could easily be done
        on a time-shared frontend login node from which the users
        could then submit (via script) jobs after the data was staged.
        Most of the transfer wallclock is in network wait, so don't
        waste dedicated cores for it.

Reply via email to