Skip to main content

Docs Discord Python version GitHub license pypi version Downloads Conda (channel only)

TensorDict

TensorDict is a batched, nested dict[str, Tensor] that behaves like a tensor.

Move it, slice it, reshape it, stack it, save it, compile it, or do arithmetic on it: every tensor leaf follows the same operation, and one shared batch_size keeps the structure honest.

TensorDict(batch_size=[32])
|-- obs:      Tensor[32, 128]
|-- action:   Tensor[32]
|-- reward:   Tensor[32]
`-- next:
    `-- obs:  Tensor[32, 128]

30-second demo | Why TensorDict | What is new in 0.13 | Patterns | Installation | Ecosystem | Citation

30-second demo

import torch
from tensordict import TensorDict

batch = TensorDict(
    {
        "obs": torch.randn(32, 128),
        "action": torch.randint(0, 4, (32,)),
        "reward": torch.randn(32),
        "next": {"obs": torch.randn(32, 128)},
    },
    batch_size=[32],
)

mini = batch[:8]                 # slices every leaf
device = "cuda" if torch.cuda.is_available() else "cpu"
on_device = batch.to(device)       # moves every leaf; non-blocking internally
scaled = batch * 0.5             # arithmetic on the whole structure
merged = batch + batch           # leaf-wise TensorDict arithmetic
stacked = torch.stack([batch, batch], 0)

print(mini.shape)                # torch.Size([8])
print(stacked.shape)             # torch.Size([2, 32])

The object remains a mapping, but the batch acts like a tensor. That is the point: write the operation once, apply it to every tensor that belongs to the same example, rollout, batch, parameter set, or dataset shard.

Why TensorDict

Plain dictionaries are flexible. TensorDict keeps that flexibility and adds the parts tensor programs need once the code gets serious.

With a plain dict With TensorDict
Manually keep leading dimensions aligned One batch_size validates the structure
Repeat .to(device) for every tensor td.to(device) moves the full batch
Hand-roll slicing, stacking, reshaping td[:32], torch.stack, td.reshape
Manually recurse through nested state Nested keys are first-class
Duplicate arithmetic over leaves td + td, td * scalar, td.abs()
Invent checkpoint formats td.save, td.memmap, load_memmap
Hope generic code keeps working PyTorch-native APIs, torch.compile coverage

Use TensorDict when the unit of data is not one tensor anymore, but it should still move through your program like one tensor.

Performance is part of the API

TensorDict is not just syntax for recursive Python loops. Core paths are built for high-throughput PyTorch workloads:

  • Arithmetic dispatch: operations such as td + td, td * 0.5, td.abs() and in-place variants apply directly to leaves and use PyTorch foreach kernels where available.
  • Device and host transfers: D2H and H2D copies are dispatched across the full structure. TensorDict uses non-blocking leaf transfers internally when possible, so the common path is just td.to(device); pass non_blocking=False only when you need an explicitly synchronous transfer.
  • Shape operations without boilerplate: indexing, view, reshape, permute, unsqueeze, squeeze, flatten, unflatten, stack and cat operate on the batch structure rather than on hand-maintained lists of leaves.
  • Low-allocation workflows: lazy stacks, preallocation, memory mapping and inplace=True shape-changing operations help reduce peak memory in data-heavy pipelines.
  • Compile-aware internals: TensorDict is used in compiled training and RL loops, and the codebase carries dedicated torch.compile coverage for hot paths.

For deeper numbers, see the benchmark notes.

What is new in 0.13

TensorDict 0.13 focuses on making structured tensor programs more practical in large training systems:

  • Tabular import/export for pandas, CSV, Parquet and JSON workflows.
  • More inplace=True shape operations, including gather, repeat, repeat_interleave, roll, reshape, flatten, unflatten and contiguous.
  • Improved torch.compile behavior for TensorClass initialization, dynamic-shape export, locking paths and shallow clones.
  • Safer memmap filenames by default through robust key encoding.
  • A migration path for module state preservation with to_module(..., preserve_module_state=...).
  • CPU-only release wheels for TensorDict, avoiding duplicate GPU wheel artifacts for a package whose compiled extension is device-independent.

Patterns

One batch through the whole training step

TensorDict lets datasets, models and losses agree on one container instead of a long argument list.

for batch in dataloader:
    batch = batch.to(device)
    batch = model(batch)
    loss = loss_module(batch)

    loss.backward()
    optimizer.step()
    optimizer.zero_grad()

That loop can stay stable while the schema changes from classification to segmentation, RL rollouts, model-based prediction or LLM post-training batches.

Nested data without custom plumbing

td = TensorDict(
    {
        "agents": {
            "policy": torch.randn(64, 8),
            "value": torch.randn(64, 1),
        },
        "env": {
            "reward": torch.randn(64),
            "done": torch.zeros(64, dtype=torch.bool),
        },
    },
    batch_size=[64],
)

policy = td["agents", "policy"]
td["env", "reward"] = td["env", "reward"].clip(-1, 1)

Nested keys are part of the API, not an afterthought.

Functional modules and parameter sets

TensorDict can hold module parameters, swap them into modules, vectorize over ensembles and make model state explicit.

from tensordict import TensorDict

params = TensorDict.from_module(module)

with params.to_module(module, preserve_module_state=True):
    out = module(inputs)

This is the same foundation used by TorchRL modules and functional training utilities.

Checkpoint and share large tensor batches

td = TensorDict({"tokens": tokens, "scores": scores}, batch_size=[n])
td.memmap("/path/to/private/batch")  # memory-map every leaf
reloaded = TensorDict.load_memmap("/path/to/private/batch")

Memory-mapped TensorDicts are useful for large offline datasets, replay buffers, inter-process handoff and checkpointed intermediate state.

Key features

  • Tensor-like collection ops: indexing, slicing, device casting, dtype casting, reshaping, stacking and concatenation. [tutorial]
  • Nested structures with tuple keys and predictable batch semantics. [tutorial]
  • Fast memory workflows: asynchronous transfers, memmap, consolidated tensors, lazy stacks and preallocation. [tutorial]
  • Functional programming with parameter TensorDicts, to_module and compatibility with torch.vmap. [tutorial]
  • @tensorclass: a tensor-aware dataclass for structured tensor objects. [tutorial]
  • Distributed and multiprocessed pipelines across workers, devices and machines. [doc]
  • Serialization and memory mapping for efficient checkpointing and dataset storage. [doc]

For a longer tour, start with GETTING_STARTED.md or the online documentation.

Installation

With pip:

pip install tensordict

With conda:

conda install -c conda-forge tensordict

Nightly builds:

pip install tensordict-nightly

From source with an existing PyTorch install:

pip install -e . --no-deps

If you use uv with PyTorch nightlies, keep torch pinned to the PyTorch wheel index or install TensorDict with --no-deps so the resolver does not replace your existing PyTorch build:

uv pip install -e . --no-deps
uv pip install -e . --prerelease=allow -f "https://download.pytorch.org/whl/nightly/cpu/torch_nightly.html"

Ecosystem

TensorDict started in reinforcement learning, where batches quickly become nested trajectories. It is now used anywhere tensor batches are structured data: RL rollouts, LLM post-training samples, robotics trajectories, simulation state, model parameters, checkpointed datasets and scientific pipelines.

Domain Projects
Reinforcement Learning TorchRL (PyTorch), DreamerV3-torch, Dreamer4, SkyRL
LLM Post-Training verl, ROLL (Alibaba), LMFlow, LoongFlow (Baidu)
Robotics and Simulation MuJoCo Playground (Google DeepMind), ProtoMotions (NVIDIA), holosoma (Amazon)
Physics and Scientific ML PhysicsNeMo (NVIDIA)
Genomics Medaka (Oxford Nanopore)

Citation

If you use TensorDict, please cite the TorchRL paper:

@misc{bou2023torchrl,
      title={TorchRL: A data-driven decision-making library for PyTorch},
      author={Albert Bou and Matteo Bettini and Sebastian Dittert and Vikash Kumar and Shagun Sodhani and Xiaomeng Yang and Gianni De Fabritiis and Vincent Moens},
      year={2023},
      eprint={2306.00577},
      archivePrefix={arXiv},
      primaryClass={cs.LG}
}

License

TensorDict is licensed under the MIT License. See LICENSE for details.

Release files for tensordict-nightly 2026.8.21

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

Built distributions (wheels)

Table of built distributions (wheels) for tensordict-nightly 2026.8.21
File
tensordict_nightly-2026.8.21-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
tensordict_nightly-2026.8.21-cp314-cp314-manylinux1_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.5+ x86-64 Details
tensordict_nightly-2026.8.21-cp314-cp314-macosx_11_0_universal2.whl CPython 3.14 CPython 3.14 macOS 11.0+ universal2 (ARM64, x86-64) Details
tensordict_nightly-2026.8.21-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
tensordict_nightly-2026.8.21-cp313-cp313-manylinux1_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.5+ x86-64 Details
tensordict_nightly-2026.8.21-cp313-cp313-macosx_11_0_universal2.whl CPython 3.13 CPython 3.13 macOS 11.0+ universal2 (ARM64, x86-64) Details
tensordict_nightly-2026.8.21-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
tensordict_nightly-2026.8.21-cp312-cp312-manylinux1_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.5+ x86-64 Details
tensordict_nightly-2026.8.21-cp312-cp312-macosx_11_0_universal2.whl CPython 3.12 CPython 3.12 macOS 11.0+ universal2 (ARM64, x86-64) Details
tensordict_nightly-2026.8.21-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
tensordict_nightly-2026.8.21-cp311-cp311-manylinux1_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.5+ x86-64 Details
tensordict_nightly-2026.8.21-cp311-cp311-macosx_11_0_universal2.whl CPython 3.11 CPython 3.11 macOS 11.0+ universal2 (ARM64, x86-64) Details
tensordict_nightly-2026.8.21-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
tensordict_nightly-2026.8.21-cp310-cp310-manylinux1_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.5+ x86-64 Details
tensordict_nightly-2026.8.21-cp310-cp310-macosx_11_0_universal2.whl CPython 3.10 CPython 3.10 macOS 11.0+ universal2 (ARM64, x86-64) Details

Total release size: 9.1 MB

Release files / tensordict_nightly-2026.8.21-cp314-cp314-win_amd64.whl

Download URL tensordict_nightly-2026.8.21-cp314-cp314-win_amd64.whl
Size 652.0 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
8d52f33f6b6fcdb89e5f66deaf26ea8f3225a753850226e13cb061ddab427821
BLAKE2b-256 checksum
How to use checksums
fbc10bf071d2eac1bc4a5a6a9e2a876a1dc80452546402be72baac8f4bee253f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / tensordict_nightly-2026.8.21-cp314-cp314-manylinux1_x86_64.whl

Download URL tensordict_nightly-2026.8.21-cp314-cp314-manylinux1_x86_64.whl
Size 595.0 kB
Tags CPython 3.14 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
6370a55e04455aedabd6ca7f1da60e78d4daf4d78af3e26a544a30517e405f71
BLAKE2b-256 checksum
How to use checksums
bf681133fa09eb6cde4210b2628e802f057239c1e206b13263f09e3308368082
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / tensordict_nightly-2026.8.21-cp314-cp314-macosx_11_0_universal2.whl

Download URL tensordict_nightly-2026.8.21-cp314-cp314-macosx_11_0_universal2.whl
Size 579.0 kB
Tags CPython 3.14 macOS 11.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
9b5883bcc287cf4d1bf94480ef5a1edf5cf81799952c76437eb7876ef1e32055
BLAKE2b-256 checksum
How to use checksums
c5d6763e400c981acb29bd4a2657aaeb3fa7652e7d8236d37903f61b18d1bcc6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / tensordict_nightly-2026.8.21-cp313-cp313-win_amd64.whl

Download URL tensordict_nightly-2026.8.21-cp313-cp313-win_amd64.whl
Size 650.0 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
1ddb23b8bddca2473c1e0ff7dc8e20afc04fbd88abf0c7890e16e98578ee8b96
BLAKE2b-256 checksum
How to use checksums
0c34740f93f1c50c2f510a006ee87eae14d431687eb5a1e5a7fa344f7d641ac0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / tensordict_nightly-2026.8.21-cp313-cp313-manylinux1_x86_64.whl

Download URL tensordict_nightly-2026.8.21-cp313-cp313-manylinux1_x86_64.whl
Size 595.1 kB
Tags CPython 3.13 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
fe8276df8c4c327a9de25fb908c42078abae1daa3e892107b572c7f2b0ec4a07
BLAKE2b-256 checksum
How to use checksums
b19c950e130f10a62805b518f5519b078aac8aafcaf9336b704deba07ee66928
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Release files / tensordict_nightly-2026.8.21-cp313-cp313-macosx_11_0_universal2.whl

Download URL tensordict_nightly-2026.8.21-cp313-cp313-macosx_11_0_universal2.whl
Size 578.9 kB
Tags CPython 3.13 macOS 11.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
c0171e0a5bed5ddb0deb7f4579c5ab89165cb32fe28d47694fc0fa67cbc43d96
BLAKE2b-256 checksum
How to use checksums
fdff45471c8f6b6938baae8a79dcf833595490a1d49570699728cf2df039fa08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / tensordict_nightly-2026.8.21-cp312-cp312-win_amd64.whl

Download URL tensordict_nightly-2026.8.21-cp312-cp312-win_amd64.whl
Size 650.0 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
fb8e6a2eae46918f4e224c1c6b643f80c1c4bb56edb72090eaadbd349e443f1f
BLAKE2b-256 checksum
How to use checksums
74d04fc95595a7f707778d7412b934b176a6c8d318402a4f90e3de0cbfd6a390
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / tensordict_nightly-2026.8.21-cp312-cp312-manylinux1_x86_64.whl

Download URL tensordict_nightly-2026.8.21-cp312-cp312-manylinux1_x86_64.whl
Size 594.9 kB
Tags CPython 3.12 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
eb598ace4ab07d5900630166f9d4fd156d5b11bb3ff2d68c2fd74cdb4633df5c
BLAKE2b-256 checksum
How to use checksums
23c72e9dad1f714a54b0e5e137cc3b000532e0156a77c96c0974c4da61c932a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / tensordict_nightly-2026.8.21-cp312-cp312-macosx_11_0_universal2.whl

Download URL tensordict_nightly-2026.8.21-cp312-cp312-macosx_11_0_universal2.whl
Size 578.9 kB
Tags CPython 3.12 macOS 11.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
0aa14d44fca7f13028eb6d517884bd16dccfe47175564c75ee2f480a83b4d938
BLAKE2b-256 checksum
How to use checksums
53907838907845825c09812753cab0a6ea562b8ede4bc67a400f54cd1d37658d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / tensordict_nightly-2026.8.21-cp311-cp311-win_amd64.whl

Download URL tensordict_nightly-2026.8.21-cp311-cp311-win_amd64.whl
Size 648.9 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
e295ac3091e7b87e589bc432b43b35ce013b9c50e5523eea9cf010e9c908051b
BLAKE2b-256 checksum
How to use checksums
ba1b9c7e0e55912a1c89835f95b30afff88df004650ad015872892dff26db0a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / tensordict_nightly-2026.8.21-cp311-cp311-manylinux1_x86_64.whl

Download URL tensordict_nightly-2026.8.21-cp311-cp311-manylinux1_x86_64.whl
Size 594.9 kB
Tags CPython 3.11 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
167edf08543cdbe062a8861e847292ef6b12d4416bca92b74b49d1218decb372
BLAKE2b-256 checksum
How to use checksums
6c0c8a26cdfa9fad1757e342879f4332377514990f667571ed5f332c71f99865
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / tensordict_nightly-2026.8.21-cp311-cp311-macosx_11_0_universal2.whl

Download URL tensordict_nightly-2026.8.21-cp311-cp311-macosx_11_0_universal2.whl
Size 578.1 kB
Tags CPython 3.11 macOS 11.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
179bb1df8d96af223fc0c3551154f0a37a496b6b74184332ded47fa3cfd78d0b
BLAKE2b-256 checksum
How to use checksums
b554567319b1f789264d4ad73c0021a010f1b485f69e7b554233c17232057f4e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release files / tensordict_nightly-2026.8.21-cp310-cp310-win_amd64.whl

Download URL tensordict_nightly-2026.8.21-cp310-cp310-win_amd64.whl
Size 646.6 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
eb778f7ddef293c8115bf950a5b6e32d328aceb6adc341c7e43517f6a42b0a62
BLAKE2b-256 checksum
How to use checksums
6cb98b774ec869cb92d4538dc7d46b22d0551cabbde21cdf51aa10513c38ed00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / tensordict_nightly-2026.8.21-cp310-cp310-manylinux1_x86_64.whl

Download URL tensordict_nightly-2026.8.21-cp310-cp310-manylinux1_x86_64.whl
Size 593.2 kB
Tags CPython 3.10 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
af57c96d30f682faed4e00fda7d3992d45d9cf0c5ea90f8372db6ab1bb5690fa
BLAKE2b-256 checksum
How to use checksums
8a1f179f17011367f36e04602e7896894f6128f262193f138f896ca93af659a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.21

Release files / tensordict_nightly-2026.8.21-cp310-cp310-macosx_11_0_universal2.whl

Download URL tensordict_nightly-2026.8.21-cp310-cp310-macosx_11_0_universal2.whl
Size 576.3 kB
Tags CPython 3.10 macOS 11.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
773a2062e8f3b53f4c05687d501ed396f30924763455129f02ce1cef84fbf644
BLAKE2b-256 checksum
How to use checksums
1d1dbc6081322011257b396938931bffdf78f9a3b34cfd65a497c3c5c11dc72f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.11

Release history Release notifications | RSS feed

This release

2026.8.21 This release

15 release files

0.8.0

15 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