Skip to content

albertoscala/open-mps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

open-mps

Open-source reimplementation of NVIDIA MPS (Multi-Process Service) for GPUs where the official MPS runtime is unavailable or unsupported.

Overview

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.

Motivation

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.

Goals

  • 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

Planned Architecture

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

Current Status

🚧 Early development

This repository currently focuses on:

  • architecture design
  • core runtime prototype
  • GPU request multiplexing

Expect breaking changes while the system evolves.

Roadmap

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

Non-Goals (for now)

  • full CUDA runtime replacement
  • binary compatibility with official MPS
  • support for all CUDA features

Contributing

Contributions are welcome.

Areas where help is especially useful:

  • CUDA runtime internals
  • GPU scheduling algorithms
  • driver-level experimentation
  • testing across GPU generations

License

MIT License

Disclaimer

open-mps is an independent open-source project and is not affiliated with or endorsed by NVIDIA.

About

Open-source reimplementation of NVIDIA Multi-Process Service (MPS) for legacy or unsupported GPUs, enabling multi-process GPU sharing and experimentation with GPU scheduling.

Topics

Resources

License

Stars

Watchers

Forks

Contributors