Different Pilot Managers can be implemented for different Job Types, for example:
Pilot Manager A: Supports running IBMQ jobs, i.e., quantum circuits embedded in HTTP requests
Pilot Manager B: Supports running AWS Braket jobs, i.e., quantum circuits embedded in HTTP requests
Pilot Manager C: Supports execution of containerized quantum programs, e.g., Python file + dependencies
Can be implemented as a FaaS platform that "deploys" a referenced container and exposes it via endpoint
Qunicorn must support registering local and remote Pilot Managers
For example, users might want to run an existing Piliot Manager locally and register it within Qunicorn such that jobs could be registered by Qunicorn and then submitted for execution on their local infrastructure
Pilot Managers need to maintain their internal job queues to keep track of existing quantum jobs and their status, and convey this information periodically to the Job Manager component
see Section 4 in the funcx paper for an idea of hierarchical queues
FEATURES
Overall Requirements
Developers must be able to execute different types of quantum jobs:
Qunicorn must have a Job Manager component to register and monitor jobs completion
Qunicorn's Job Manager must register typed job requests and persist them in a store
Qunicorn must have a Job Scheduler component that maintains a job queue and distributes jobs to execution components
Qunicorn must support pluggable execution components (aka Qunicorn Pilot Managers)
Different Pilot Managers can be implemented for different Job Types, for example:
Qunicorn must support registering local and remote Pilot Managers
Pilot Managers need to maintain their internal job queues to keep track of existing quantum jobs and their status, and convey this information periodically to the Job Manager component