Skip to main content

Tensor IPC

High-performance and Flexible IPC for tensor data with seamless ROS integration for robotics research.

Overview

tensor-ipc provides efficient shared memory communication for tensor data between processes, with built-in support for ROS topics. It enables zero-copy data sharing using POSIX shared memory and integrates with ROS for distributed communication and sim/real transfer.

Key Features

  • 🚀 Zero-Copy Shared Memory: POSIX shared memory with per-frame locking for safe concurrent access
  • 🤖 ROS Integration: Built-in ROS producers and consumers with automatic type conversion (custom types are supported through ros2_numpy)
  • 🧠 Multi-Backend Support: Native support for NumPy arrays and PyTorch tensors (CPU/CUDA)
  • 📦 DDS Notifications: Real-time notifications and synchronization using CycloneDDS for efficient polling
  • 🛡️ Type Safety: Automatic validation of tensor shapes, dtypes, and devices
  • 🔄 History Management: Configurable history buffers with circular indexing

Installation

git clone https://github.com/danielhou315/tensor-ipc.git
cd tensor-ipc
pip install -e .
  • For torch/torch CUDA support, you must install torch in the same Python environment.
  • For ROS support, you must install ros2_numpy in the same Python environment.
  • Otherwise, only numpy backend will be available.

Quick Start

Refer to examples/ to see basic usage. Documentation is coming soon (hopefully).

CUDA Support

import torch
from tensor_ipc.core.producer import TensorProducer

# CUDA tensors with IPC sharing
if torch.cuda.is_available():
    cuda_tensor = torch.zeros(3, 224, 224, device='cuda:0')
    producer = TensorProducer.from_sample("cuda_pool", cuda_tensor)
    
    # Publish CUDA tensor directly
    gpu_data = torch.randn(3, 224, 224, device='cuda:0')
    producer.put(gpu_data)

Callbacks and Notifications

def on_new_data(data):
    print(f"Callback triggered with data shape: {data.shape}")

consumer = TensorConsumer(
    metadata,
    on_new_data_callback=on_new_data
)

# Callback will be triggered when new data arrives

History Management

# Get last 5 frames in chronological order
history = consumer.get(history_len=5, latest_first=False)

# Get last 3 frames with latest first
recent = consumer.get(history_len=3, latest_first=True)

Architecture

  • Backends: Pluggable backends for NumPy, PyTorch CPU, and PyTorch CUDA
  • Shared Memory: Numpy/PyTorch backend uses POSIX shared memory with memory-mapped arrays. Torch CUDA backend uses CUDA API through PyTorch.
  • Locking: Per-frame reader-writer locks for safe concurrent access
  • Notifications: CycloneDDS for real-time progress updates
  • ROS Bridge: Automatic conversion between ROS messages and tensor data

API Reference

Core Classes

  • TensorProducer: Creates and publishes to shared memory pools
  • TensorConsumer: Subscribes to and reads from shared memory pools
  • PoolMetadata: Describes pool structure and properties

ROS Extensions

  • ROSTensorProducer: Publishes shared memory data to ROS topics
  • ROSTensorConsumer: Subscribes to ROS topics and creates shared memory pools

Metadata Creation

  • MetadataCreator.from_numpy_sample(): Create metadata from NumPy arrays
  • MetadataCreator.from_torch_sample(): Create metadata from PyTorch tensors
  • MetadataCreator.from_torch_cuda_sample(): Create metadata for CUDA tensors
  • MetadataCreator.from_sample(): Unifies creation of metadata from sample

Requirements

  • Python 3.7+
  • NumPy
  • CycloneDDS (for DDS notifications)
  • Optional: PyTorch (for tensor support)
  • Optional: ROS 2 + ros2_numpy (for ROS integration)

License

MIT License

GenAI

This library (especially documentation) is partly written by various LLMs.

Metadata

Release files for tensor-ipc 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tensor-ipc 0.1.0
File Size Uploaded
tensor_ipc-0.1.0.tar.gz 36.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tensor-ipc 0.1.0
File Interpreter ABI Platform
tensor_ipc-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 64.9 kB

Release files / tensor_ipc-0.1.0.tar.gz

Download URL tensor_ipc-0.1.0.tar.gz
Size 36.8 kB
Tags Source
SHA-256 checksum
How to use checksums
70c8548116c9555aedcbfa00e2057b2d6c52863d8f64c77947bee26fc465f658
BLAKE2b-256 checksum
How to use checksums
c74a071d8bcddd154bde1e9d54fafdcae570698fbf116ff9f4e3adecf30d45b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.8

Release files / tensor_ipc-0.1.0-py3-none-any.whl

Download URL tensor_ipc-0.1.0-py3-none-any.whl
Size 28.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ed072c3aa755c5c997ed3b6cfe7ed9c66878ffa14e444b56878bde43a7e695dc
BLAKE2b-256 checksum
How to use checksums
dff3231948a89a4a49e187d42e46abf4ba72e4fc68f3e57a74b5a73f44a19bce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.8

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page