I am designing a server that will run student's cuda/c++ code. The server will have multiple GPU cards so that multiple programs can run at once. I would like to break up the computer in to sandboxes that only contain one GPU each (such as using virtual machines or chroot or something else). I have read that virtual machines only emulate the GPUs so you can't run cuda on the real hardware. Is there a different way I can do this. I would like to also be able to limit other things within the sandbox but will try to figure that out after I figure out an approach that works well with the GPU.
In general I am trying to limit the student to only access one GPU and to only access a GPU that is currently not running someone else's code. I'll have a queue set up to only run their program when a GPU is free.