Open-source reimplementation of NVIDIA MPS (Multi-Process Service) for GPUs where the official MPS runtime is unavailable or unsupported.
open-mps aims to provide a lightweight open-source alternative to NVIDIA MPS, enabling multiple processes to share a single GPU efficiently.
The project is primarily targeted at:
- Legacy GPUs where NVIDIA MPS is not available
- Unsupported environments
- Experimental GPU scheduling research
- Open-source GPU runtime experimentation
By reimplementing key MPS concepts, open-mps allows concurrent GPU workloads to be multiplexed through a shared execution layer.
NVIDIA’s Multi-Process Service improves GPU utilization by allowing multiple CUDA processes to share a GPU context and schedule work concurrently.
However, official MPS support is limited by:
- GPU architecture requirements
- driver restrictions
- proprietary implementation
- lack of support for older GPUs
open-mps attempts to recreate similar functionality in an open and portable way, enabling experimentation and broader hardware compatibility.
- Provide multi-process GPU execution sharing
- Support legacy or unsupported NVIDIA GPUs
- Offer a fully open-source implementation
- Enable research on GPU scheduling and virtualization
- Maintain minimal runtime overhead
High-level design:
+-------------------+
| Client Process A |
+-------------------+
|
+-------------------+
| Client Process B |
+-------------------+
|
v
+---------------------------+
| open-mps daemon / broker |
| |
| - request queue |
| - context manager |
| - scheduler |
+---------------------------+
|
v
+-------------------+
| CUDA Driver / GPU |
+-------------------+
The open-mps daemon will:
- manage GPU contexts
- multiplex kernels from multiple processes
- schedule execution
- coordinate memory and streams
🚧 Early development
This repository currently focuses on:
- architecture design
- core runtime prototype
- GPU request multiplexing
Expect breaking changes while the system evolves.
Planned features:
- basic daemon runtime
- process registration
- kernel dispatch proxy
- CUDA stream multiplexing
- memory sharing layer
- fair GPU scheduling
- debugging and metrics
Long-term ideas:
- GPU sandboxing
- container integration
- scheduler plugins
- experimental GPU virtualization
- full CUDA runtime replacement
- binary compatibility with official MPS
- support for all CUDA features
Contributions are welcome.
Areas where help is especially useful:
- CUDA runtime internals
- GPU scheduling algorithms
- driver-level experimentation
- testing across GPU generations
MIT License
open-mps is an independent open-source project and is not affiliated with or endorsed by NVIDIA.