High-performance zero-copy tensor protocol
Project description
Tenso
High-Performance, Zero-Copy Tensor Protocol for Python.
Overview
Tenso is a specialized binary protocol designed for one thing: moving NumPy arrays between backends instantly.
It avoids the massive CPU overhead of standard formats (JSON, Pickle, MsgPack) by using a strict Little-Endian, 64-byte aligned memory layout. This allows for Zero-Copy deserialization, meaning the CPU doesn't have to move data—it just points to it.
Benchmark
Scenario: Reading a 64MB Float32 Matrix (Typical LLM Layer) from memory.
| Format | Read Time | Write Time | Status |
|---|---|---|---|
| Tenso | 0.006 ms | 5.287 ms | Fastest & AVX-512 Safe |
| Arrow | 0.007 ms | 7.368 ms | Heavy Dependency |
| Pickle | 2.670 ms | 2.773 ms | Unsafe (Security Risk) |
| Safetensors | 2.489 ms | 7.747 ms | - |
| MsgPack | 2.536 ms | 10.830 ms | - |
Installation
pip install tenso
Usage
Network
import numpy as np
import tenso
# Create a tensor
data = np.random.rand(100, 100).astype(np.float32)
# Serialize to bytes
packet = tenso.dumps(data)
# Deserialize back
restored = tenso.loads(packet)
File I/O
# Save to disk
with open("weights.tenso", "wb") as f:
tenso.dump(data, f)
# Load from disk
with open("weights.tenso", "rb") as f:
loaded_data = tenso.load(f)
Protocol Specification
Tenso uses a Hybrid Fixed-Header format designed for SIMD safety.
-
Header (8 bytes): TNSO Magic, Version, Flags, Dtype, NDim.
-
Shape Block: Variable length (NDim * 4 bytes).
-
Padding: 0-63 bytes to ensure the Body starts at a 64-byte aligned address.
-
Body: Raw C-contiguous memory dump.
Tenso vs. The World
| Feature | Tenso | Pickle | Arrow | Safetensors |
|---|---|---|---|---|
| Speed (Read) | Instant | Slow | Instant | Fast |
| Safety | Secure | Unsafe (RCE Risk) | Secure | Secure |
| Alignment | 64-byte | None | 64-byte | None |
| Dependencies | NumPy Only | Python | PyArrow (Huge) | Rust/Bindings |
| Best For | Network/IPC | Python Objects | Dataframes | Disk Storage |
Why is Tenso 1500x faster than Pickle? Standard formats must copy data from the network buffer into a new NumPy array. Tenso uses Memory Mapping: it tells NumPy to point directly at the existing buffer. No copying, no CPU cycles.
Development
# Clone the repository
git clone https://github.com/yourusername/tenso.git
cd tenso
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run benchmarks
python benchmark.py
Requirements
- Python >= 3.10
- NumPy
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tenso-0.2.2.tar.gz.
File metadata
- Download URL: tenso-0.2.2.tar.gz
- Upload date:
- Size: 4.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1fcb1a43592876cfb357424a3616af7ff7992a6ad6ecc29666ae76c595a5044
|
|
| MD5 |
a6785cd48dc20b6ede4aee15a9d1234c
|
|
| BLAKE2b-256 |
bfbfe9d8a02b9260c14847eb7c59b519948af95dc274727f63e85500a1dd4d82
|
File details
Details for the file tenso-0.2.2-py3-none-any.whl.
File metadata
- Download URL: tenso-0.2.2-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76f724805250b18d429a710a5fa250ef08a84d9fc70dd33036e61e83c240f378
|
|
| MD5 |
f7aa5c734e06cc38ddba66f821c19493
|
|
| BLAKE2b-256 |
92ab0b5655d7a1c70a1aa028ea5caabf148ce762f2d12cb2dd51e63bc03a9668
|