Building efficient multi-model AI pipelines for humanoid robotics on resource-constrained edge hardware, with a focus on Jetson Orin Nano Super.
Status disclaimer
Everything in this article is mostly theoretical today. A Jetson Orin Nano Super–class board (8 GB LPDDR5, ~102 GB/s memory bandwidth, ~67 INT8 TOPS NVIDIA Jetson Orin Nano Super Developer Kit) is underpowered for running a full Vision-Language-Action (VLA) model plus several heavy vision models concurrently in production. Making this truly viable will require:
- Hardware: more memory bandwidth, more VRAM, and higher sustained TOPS within a tight power envelope
- Models: lighter, edge-optimized VLA / YOLO26 variants (pruned, quantized, distilled)
- Software stack: better kernel-level scheduling, more mature CUDA Green Contexts, and more predictable multi-tenant GPU runtimes The architectures and strategies below are what you should aim for, but today they remain a mix of research prototypes and partial production deployments.
I have ordered the device so I will do some testing once I get it. Stay tuned for empirical results.
Introduction
Suppose you want to run multiple AI models simultaneously on edge hardware:
- a Vision-Language-Action (VLA) model like SmolVLA for robot control,
- a recent YOLO26 model for comprehensive perception (object detection, instance segmentation, pose estimation, oriented detection, and image classification) (Ultralytics YOLO26 announcement, Roboflow YOLO26 support),
- plus other specialized models (e.g., SLAM, depth, speech).
All of these must share limited GPU memory and compute resources on an embedded platform like Jetson Orin Nano Super (8 GB LPDDR5 @ ~102 GB/s, 6-core Arm CPU, Ampere GPU with 1,024 CUDA cores and 32 Tensor Cores NVIDIA Jetson Orin Nano Super Developer Kit, Jetson Orin Nano/NX/AGX power modes).
We’ll survey three major resource allocation strategies for running multiple AI models on edge devices: hardware partitioning, priority-based scheduling, and offloading. Then we'll focus on the event-driven architecture that production robotics systems actually use for reliable, real-time multi-model execution.
Design Criteria for Multi-Model Edge AI Systems
Before diving into specific strategies, it's crucial to understand the fundamental design criteria that shape resource allocation decisions for multi-model AI on edge devices. These criteria directly influence which approach will work for your specific use case.
Real-Time Performance Requirements
Latency budgets: Critical models (VLA for robot control) typically target a desired frequency of 24 Hz for end-to-end control loops (sensor → action), while perception models (e.g., YOLO26 detection/segmentation) can tolerate at lower frequencies (5 Hz). Missing deadlines can cause instability or safety issues in mobile robots.
Jitter tolerance: Real-time systems need predictable latency. User reports show 10–40% latency increases even with per-client limits, and sometimes much worse when misconfigured (NVIDIA MPS docs, MPS interference report, MPS latency outlier report). That makes naive multi-process sharing a bad fit for tight 24 Hz+ control loops unless carefully profiled and constrained.
Throughput vs. latency trade-offs: Background models can use batching for efficiency, but critical models prioritize low-latency single-inference execution.
Resource Constraints
Power envelope: On Jetson Orin Nano Super, low-power modes operate around 7–8 W, with higher modes up to ~25 W in MAXN_SUPER (Jetson power/performance modes). Multi-model execution must stay within these thermal budgets or the device will downclock aggressively.
Memory hierarchy: The Orin Nano Super’s 8 GB LPDDR5 is a unified memory pool for CPU and GPU. Models compete for both GPU and system memory, and memory pressure can cause allocator fragmentation, cache thrashing, and even swapping if you’re not careful with container limits and tensor lifetimes.
Compute asymmetry: GPU cores excel at parallel inference, CPU cores handle preprocessing/serialization. Resource allocation must balance both.
Reliability and Fault Tolerance
Graceful degradation: Non-critical models should drop frames or reduce frequency under resource pressure, not crash the entire system.
Model priority levels: Critical perception (VLA control) > Essential perception (YOLO detection) > Background tasks (pose estimation, classification).
Failure isolation: A single model's crash shouldn't bring down the entire pipeline. Containerization and process isolation are essential.
System-Level Considerations
Communication overhead: Inter-model data sharing (JSON serialization, queue management) adds latency that must be budgeted.
Monitoring requirements: Real-time metrics collection for latency, utilization, and thermal state enables adaptive resource allocation.
Scalability needs: Will you add more models later? Choose architectures that support horizontal scaling without complete rearchitecting.
Deployment constraints: Edge devices often run in remote locations with limited network access, requiring self-contained solutions.
These design criteria explain why simple partitioning approaches fail on edge devices: the fundamental constraints (thermal limits, unified memory, power budgets) make static allocation inefficient. Production systems instead use adaptive, priority-aware resource sharing with explicit failure modes.
Approach 1: Partitioning – Static Slices of Compute and Memory
Partitioning tries to make multi-model systems predictable by reserving fixed resources per model. On edge hardware, this usually means partitioning GPU SMs, constraining CPU cores, or pinning memory.
1.1 GPU Resource Partitioning (NVIDIA Green Contexts)
What it is: Hardware-level SM (Streaming Multiprocessor) allocation. You split the GPU’s SMs into subsets and bind different workloads to different subsets using CUDA Green Contexts (CUDA Green Contexts driver API).
On Jetson Orin Nano Super (Ampere, compute capability 8.7), the GPU exposes 8 SMs with a total of 1,024 CUDA cores (see Jetson Orin Nano GPU spec). Green Contexts enforce minimum SM counts and alignment constraints per context (e.g., minimum 4 SMs, counts in multiples of 2 for 8.x architectures).
Pros:
- Hardware-enforced SM isolation (clean separation at the compute level)
- Official NVIDIA support on Orin (compute capability 8.7)
- Streams and kernels under different Green Contexts are scheduled from separate queues, which can improve isolation in some workloads
Cons (critical on Orin Nano–class devices):
- Frequency is still global: GPU clock is governed by the Jetson power mode and thermal headroom, not by Green Contexts. All contexts share the same global GPU frequency (Jetson power modes).
- No memory isolation: Contexts share L2 cache, memory controllers, and the same 8 GB LPDDR5 DRAM.
- Thermal throttling: In 7–8 W modes, sustained heavy use across contexts still causes downclocking.
- Limited partition granularity: With 8 SMs and a 4-SM minimum per context on cc 8.7, you can have at most two partitions of 4 SMs each.
- Observed behavior can be surprising: Users have reported little to no runtime change when varying SM allocations via Green Contexts on Jetson Orin, suggesting that other bottlenecks (memory, front-end, scheduling) may dominate (NVIDIA forum: Green Contexts on Orin).
Real-world latency impact (today): You may get some improved isolation in synthetic benchmarks, but on Orin Nano–class devices the main constraints are power mode, memory bandwidth, and thermal limits, which Green Contexts do not solve. For most embedded robotics use cases, the complexity is hard to justify unless you have a very specific multi-tenant requirement.
Verdict: On Orin Nano–class devices, use Green Contexts only when you absolutely need hard SM isolation between tenants and can afford the engineering complexity. For single-robot stacks, it’s usually better to rely on priority-based scheduling and event-driven architectures instead.
1.2 Software Partitioning: CUDA MPS (Multi-Process Service)
What it is: A software layer that allows multiple processes to share a single GPU context, time-multiplexing kernels from different processes through the CUDA MPS server (CUDA MPS guide).
Pros:
- Works on all Jetson platforms today (no driver updates needed)
- Per-process thread budget and pinned memory limits
- Simple to enable
Cons:
- Shared L2 cache and bandwidth: Models can still thrash each other’s L2 lines and DRAM.
- Kernel serialization and interference: Under contention, one client’s kernel launches can delay another’s.
- Unpredictable latency without careful tuning: Reports show latency increases of 10–40% under moderate contention even with 50/50 SM splits, and in misconfigured scenarios, giant outliers (e.g., a kernel going from ~65 µs to ~100 ms) (MPS interference report, MPS latency outlier report).
- Memory accounting is per-process, not global: Per-process limits don’t give you a global “cap”; two 1 GB limits still allow 2 GB total in use.
Real-world issue: For multi-model pipelines (VLA + YOLO26 detection/segmentation/pose) targeting 24 Hz control loops, this kind of latency variability is unacceptable unless you design around it very conservatively.
Verdict: Reasonable for batch or non-real-time workloads; a poor fit for tight control loops.
1.3 OS-Level Partitioning: Linux cgroups + CPU Affinity
What it is: Kernel-level control over CPU time and system RAM. You pin CPU cores, set CPU shares, and enforce memory limits per cgroup or container.
How to implement: Create CPU and memory control groups, pinning specific cores to each workload. Use Docker's cpuset_cpus and mem_limit for containerized isolation.
Pros:
- Clean OS-level isolation (CPU and system RAM)
- Prevents CPU contention between processes
- Works on all platforms
Cons:
- Doesn’t isolate GPU: Both processes still compete for GPU memory bandwidth (on Orin Nano Super that’s ~102 GB/s shared across all clients NVIDIA Jetson Orin Nano Super Developer Kit).
- Incomplete solution: If VLA runs on GPU but YOLO's CPU thread is blocked, latency still spikes
- Memory overhead: Tight system RAM means early swapping, crashing your "fixed" allocation
Real-world issue: Critical model deadlines (24 Hz for VLA, real-time pose estimation) might still be missed if system RAM swaps to disk or GPU bandwidth is saturated by multiple concurrent models.
Verdict: Useful as a supporting tool (especially with containers), but not sufficient alone for real-time multi-model GPU workloads.
1.4 Where Partitioning Fits
Partitioning is attractive when:
- You need strong isolation (multi-tenant scenarios, safety domains)
- You care more about fairness than minimum latency
- You can afford reduced peak performance due to thermal limits
But on small edge devices with unified memory and tight power envelopes, hard partitions tend to underutilize the hardware and amplify thermal problems. That’s why most modern robotics stacks use partitioning only as a supporting tool, not the primary strategy.
Approach 2: Prioritization and Event-Driven Scheduling – Shared Resources, Explicit Priorities
Prioritization assumes all models share the same GPU/CPU pool, but who runs when is controlled carefully using priorities, async queues, and backpressure. This is the pattern used by OM1, LeRobot, Reachy 2, and most modern robotics systems.
2.1 Why Prioritization Wins on Edge Devices
The fundamental limitation of edge devices: Unified memory architectures and thermal constraints make static resource partitioning inefficient. Production robotics systems avoid strict partitions and instead use event-driven patterns that dynamically allocate resources based on priority and system state.
Key insight: Reliable multi-model execution comes from adaptive resource sharing and graceful degradation, not rigid slicing.
2.2 Core Principles
- Shared compute with explicit priorities: Multiple models share GPU/CPU resources, but execution priority is clearly defined.
- CUDA streams for kernel scheduling: High-priority streams for critical models, normal priority for background tasks.
- Async event communication: Message queues decouple model timing and enable graceful degradation.
- System state awareness: Monitor thermal/power limits and adapt resource allocation dynamically.
- Deadline-aware scheduling: Soft deadlines for non-critical models, hard deadlines for essential perception.
2.3 Architecture: Prioritized CUDA Streams + Async Event Bus
One concrete template looks like this:
┌────────────────────────────────────────────────────┐
│ Critical Model Thread (e.g., VLA @ 24Hz) │
│ Priority: HIGH │
│ Target frequency: 24 Hz │
└────────────────────────────────────────────────────┘
↓ (sensor inputs)
┌────────────────────────────────────────────────────┐
│ CUDA High-Priority Stream (GPU) │
│ Critical inference, never preempted │
└────────────────────────────────────────────────────┘
↓ (outputs → Action/Event queues)
┌────────────────────────────────────────────────────┐
│ Event Bus (Redis/Zenoh/ROS2) │
│ Async communication between models │
└────────────────────────────────────────────────────┘
↓ (decoupled messaging)
┌────────────────────────────────────────────────────┐
│ Background Models (YOLO, segmentation, etc.) │
│ Priority: NORMAL/BACKGROUND │
│ Graceful degradation under load │
│ Runs in normal-priority CUDA streams │
└────────────────────────────────────────────────────┘
↓ (context updates → Decision fusion)
┌────────────────────────────────────────────────────┐
│ Decision Fusion & Action Execution │
│ Combines all model outputs │
└────────────────────────────────────────────────────┘
2.4 Implementation Patterns
Docker / Docker Compose + ROS 2 / Zenoh (containerized event-driven architecture)
Each AI model (or subsystem) runs in its own container, communicating over async message buses:
- Containerize each model service with NVIDIA runtime.
- Use async message queues (ZMQ/ROS2/Zenoh) for inter-service communication.
- Prioritize VLA at 24Hz with strict deadlines while YOLO runs at 5Hz with graceful degradation.
Tools & libraries:
-
ROS 2: Native deadline/lifespan QoS policies atop DDS (ROS 2 QoS design). Used heavily in Reachy 2’s core ROS 2 workspace (
reachy2_core). - Zenoh (OM1’s choice): Low-latency pub/sub and key/value messaging, lighter than full ROS 2 middleware. OM1 integrates Zenoh for cross-component data exchange (OM1 repo).
- Redis + Lua: Simple pub/sub and atomic operations for single-host deployments.
Quick start template:
- Create prioritized CUDA streams for each model based on real-time requirements (CUDA stream priorities).
- Use Python
asyncio(docs) or ROS 2 callbacks for concurrent execution and queue-based communication. - Start with critical models at high priority (e.g., 24 Hz), background models at normal priority (e.g., 5 Hz).
- Add Prometheus/Grafana or equivalent monitoring for latency, queue depths, and thermal throttling.
2.5 Real-World Example: OM1 (OpenMind)
OM1 (“OpenMind Modular AI Runtime for Robots”) demonstrates mode-based multi-model execution in a single Dockerized runtime, orchestrating LLMs, VLMs, and robotics stacks together (OM1 repo).
Single Docker Container (OM1 Runtime)
├─ Multiple operational modes (welcome, slam, navigation, etc.)
├─ Concurrent LLM execution (Fast Action + Core + Mentor LLMs)
├─ Zenoh pub/sub for inter-component communication
├─ Background processes (SLAM, navigation, face recognition)
└─ Input orchestrators (VLM, ASR, sensors)
No GPU partitioning. Instead:
- Multiple LLMs run concurrently with different roles and priorities (e.g., fast-reactive vs. deliberative).
- Vision models (VLM variants) provide continuous perception.
- SLAM and navigation models run in background with graceful degradation.
- All components communicate via Zenoh pub/sub messaging and ROS 2 where appropriate.
- Dynamic mode transitions reallocate resources based on context and intent.
Takeaway: OM1 shows production-grade multi-model AI orchestration (LLMs + VLMs + SLAM + navigation) using event-driven, priority-based scheduling rather than hard GPU partitioning.
2.6 Prioritization: Pros, Cons, When to Use
Pros:
- Production-proven patterns (LeRobot async inference, OM1 runtime, Reachy 2 ROS 2 workspace).
- Graceful degradation (non-critical models adapt to resource constraints).
- Easy to debug (message introspection, queue monitoring, logging).
- Scales horizontally (add models without rearchitecting core systems).
- Platform-agnostic (works with NVIDIA, ROCm, CPU-only).
- Adaptive resource allocation (responds to thermal/power limits).
Cons:
- Shared GPU bandwidth contention (models can still interfere).
- Message serialization overhead (~1–2ms per inter-model communication).
- Requires understanding async patterns and queue management.
- Not suitable for strict multi-tenant isolation guarantees.
Best for:
- "Need guaranteed low-latency for critical model": Docker + ROS 2 + prioritized CUDA streams.
- "Running multiple YOLO26 variants (detect/segment/pose)": Event-driven architecture with async queues.
- "Building production robotics system": Docker Compose + Zenoh + mode-based execution.
- "Rapid prototyping on single device": Python
asyncio+ CUDA streams.
Approach 3: Offloading – Pushing Work Off the Edge Device
Offloading moves some or all model computation off the edge device to separate GPU servers or cloud infrastructure. This eliminates local contention at the cost of network latency and extra infrastructure.
3.1 Remote Inference Offloading (LeRobot-Style Pattern)
What it is: Run policy inference or heavy model inference on a separate GPU server, while the robot (edge device) handles sensors and low-level control. Communication happens over gRPC streaming.
This is the pattern used in LeRobot’s async inference stack, where a PolicyServer runs on a workstation GPU and a RobotClient runs on the robot, exchanging observations and actions via gRPC (LeRobot repo, see lerobot/async_inference/policy_server.py and robot_client.py).
How to implement:
- Deploy policies and heavy models on a dedicated inference server with a larger GPU.
- Use gRPC streaming for low-latency communication between the robot and the inference server (gRPC Python docs).
Pros:
- Zero GPU contention on the edge: Edge resources are freed for additional models or real-time control.
- Scalable inference: Upgrade server GPUs independently of edge hardware constraints.
- Reliable latency: Often more predictable network latency vs. highly variable local multi-model GPU sharing.
- Complete isolation: Models run on separate hardware, eliminating interference.
Cons:
- Network dependency: Requires reliable low-latency network connection.
- Bandwidth overhead: Camera frames must be compressed and transmitted.
- Additional infrastructure: Need dedicated inference servers and monitoring.
- Higher complexity: Distributed system management, failure handling, and observability.
Real-world use: LeRobot uses this client–server architecture for RL policy inference and async action streaming. The same pattern generalizes to VLA + YOLO26 pipelines, but for those, you must account for much higher bandwidth (video frames) and tighter latency budgets.
3.2 Orchestrated Offloading with Triton and Microservices
NVIDIA Triton Inference Server provides process-level isolation and scheduling for multi-model deployments, often on a central server:
What it is: Multi-model serving platform with built-in queuing, batching, and per-model scheduling policies.
How to implement:
- Configure separate model repositories with dedicated GPU instances and per-model batching policies with different latency deadlines.
- Expose models over gRPC/HTTP to edge clients.
Pros:
- Production-grade scheduling and queuing.
- Per-model deadlines and batching policies.
- High resource efficiency on server GPUs.
- Can mix NVIDIA-stack and non-NVIDIA models.
Cons:
- Learning curve (gRPC, model configs).
- Overhead from HTTP/gRPC serialization (5–10ms per request).
- Still subject to GPU bandwidth contention on the server.
Best for:
- "Distributed edge deployment with network": Remote offloading + gRPC streaming.
- "Enterprise ML pipeline with model versioning": Triton Inference Server + model ensembles.
3.3 When Offloading Makes Sense
- You cannot meet latency or throughput targets within the edge device's power/thermal envelope.
- You need to run many heavy models simultaneously, but only a subset of them require strict real-time guarantees on the robot.
- Your deployment environment has reliable wired or high-quality wireless connectivity.
Putting It Together: Comparing the Three Approaches
In practice, production systems mix these:
- Use cgroups and containers for basic isolation.
- Use prioritized CUDA streams and event buses for real-time behavior.
- Use offloading for heavyweight or non-real-time models that don't fit on the edge box.
Conclusion
Given today’s hardware, a single Jetson Orin Nano Super is not yet a comfortable platform for running a large VLA plus multiple heavy YOLO26 variants and other models concurrently at strict real-time rates. You can prototype pieces of this stack, but for production you will almost certainly need:
- More capable edge hardware (Orin NX/AGX, Thor, or similar), or
- Significant offloading to nearby GPU servers, and/or
- Aggressively optimized models (distillation, pruning, quantization, ONNX/TensorRT deployment).
That said, the architectural lessons are already clear:
TL;DR: For multi-model AI on edge devices, avoid static hardware partitioning as your primary tool. Favor event-driven architectures with prioritized CUDA streams and async messaging, and treat partitioning and offloading as supporting levers.
Have questions or suggestions? Drop them in the comments below.
Further Reading
-
OM1 Architecture (event-driven multimodal runtime):
https://github.com/OpenMind/OM1 -
LeRobot (RL + async inference + gRPC):
https://github.com/huggingface/lerobot -
Reachy 2 Core (ROS 2 workspace):
https://github.com/pollen-robotics/reachy2_core -
Reachy 2 Python SDK:
https://github.com/pollen-robotics/reachy2-sdk -
NVIDIA Jetson Deployment with Triton:
https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/user_guide/jetson.html -
CUDA Green Contexts:
https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__GREEN__CONTEXTS.html -
CUDA MPS Guide:
https://docs.nvidia.com/deploy/mps/ -
MPS Interference Discussion:
https://forums.developer.nvidia.com/t/mps-interference-problem/312930 -
MPS Latency Outlier Discussion:
https://forums.developer.nvidia.com/t/mps-vs-no-mps-drastic-increase-in-kernel-latency/336175 -
ROS 2 Real-Time QoS:
https://design.ros2.org/articles/qos_deadline_liveliness_lifespan.html -
Python asyncio:
https://docs.python.org/3/library/asyncio.html -
Docker Compose for robotics:
https://fenilsonani.com/articles/docker-compose-multi-container-orchestration -
YOLO 26 Family:
https://www.ultralytics.com/news/ultralytics-redefines-state-of-the-art-vision-ai-with-yolo26

Top comments (0)