Skip to main content

TensorDict is a pytorch dedicated tensor container.

Project description

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("/tmp/batch")          # memory-map every leaf
reloaded = TensorDict.load_memmap("/tmp/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.

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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tensordict_nightly-2026.7.9-cp314-cp314-win_amd64.whl (627.4 kB view details)

Uploaded CPython 3.14Windows x86-64

tensordict_nightly-2026.7.9-cp314-cp314-macosx_11_0_universal2.whl (554.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ universal2 (ARM64, x86-64)

tensordict_nightly-2026.7.9-cp313-cp313-win_amd64.whl (625.4 kB view details)

Uploaded CPython 3.13Windows x86-64

tensordict_nightly-2026.7.9-cp313-cp313-macosx_11_0_universal2.whl (553.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

tensordict_nightly-2026.7.9-cp312-cp312-win_amd64.whl (625.3 kB view details)

Uploaded CPython 3.12Windows x86-64

tensordict_nightly-2026.7.9-cp312-cp312-macosx_11_0_universal2.whl (551.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

tensordict_nightly-2026.7.9-cp311-cp311-win_amd64.whl (623.7 kB view details)

Uploaded CPython 3.11Windows x86-64

tensordict_nightly-2026.7.9-cp311-cp311-macosx_11_0_universal2.whl (550.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

tensordict_nightly-2026.7.9-cp310-cp310-win_amd64.whl (620.7 kB view details)

Uploaded CPython 3.10Windows x86-64

tensordict_nightly-2026.7.9-cp310-cp310-macosx_11_0_universal2.whl (551.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file tensordict_nightly-2026.7.9-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 3037936cc9b10fcaf2a4d63604f488cd499804ea563bc272732ff8083731f776
MD5 0055b6c6c628d56f689931bf25a8cd66
BLAKE2b-256 d54d35bdf5c37f668ab589778e02a7aec1c50ac48134508328b7d92dfc1c03c0

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp314-cp314-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp314-cp314-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b84dcf54919da820dca7494df24fbe47443f5b33571dfa61e2a005f8d10e7ed5
MD5 37ecf3eed826ae3935d35ffb25156707
BLAKE2b-256 fd56012f12b68c3879b5f3c0c2f2871fa3470047f052b9e5cefffb87eba3d654

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp314-cp314-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 ed13ac43d31b919d800b53f8bb3b3b702fb0fd4ea49b03d8d2ccd164ca85a172
MD5 b2ff7a533a208556872e53727d2bd40c
BLAKE2b-256 5a799d494297cd924dd1b0477959db65ff811d9b47baf546834aaf875da4f3f4

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 82deb14041f21897518963fc97169c9bfdf09653c769be2b463fa80222e837c5
MD5 1913019d253c9e209d4684983c3ce53d
BLAKE2b-256 5ea37cc5298fc078bbd76d09a539120ef0df97dcaf9bf7a17a0c9d891c803ae4

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp313-cp313-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp313-cp313-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 14aae17e43ca1230edcb7a7e28d7c47f2485869c68e806549f09c8df0b81abbd
MD5 1d07c8460223493b32991adf13ce41f1
BLAKE2b-256 8e92568e2478c25f9f8d6ef2568facdc8313c0410e2ea0536112ac4d8fbb6c6d

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 9b1c9e3235dba9ad7ec4c886ff3b7e7a12776affaa033ad1fe3ba4aaca2b2169
MD5 d299e0ab700297ebcd112370583b90b4
BLAKE2b-256 013936b847df3f23afce75ef537aa005bf117807757345dea18f6bb7e146f9c3

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0b4cbc70f2fb2777b39c9af15447224be84264469c0ec8979dea7b6b54426805
MD5 7a62b0dcc527e719d9936f47005e5d92
BLAKE2b-256 815c521c6811ed44680ec839a2091068be23fc0644349fe5b743b74f3b8c7cf5

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp312-cp312-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp312-cp312-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 7321792b3c6226bd4210328da32013a98e396d6c1f02c995d5e3a8d6ecac1a0e
MD5 cc12530fca43733b4ee6cc6e2f77852a
BLAKE2b-256 a16bde79a0ce3b5fb200317ffca2e286a9a1ee58a9b0b4956d47ed8108649a51

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 b11e0e7f595b7e673863051f323862d1a9485c1d6f1b8a576fb0c7f6bac7ce4c
MD5 8f18fdbe42280559ffbe5ce30c2c85ca
BLAKE2b-256 971a02794da7acd7eacfb0db76e796b0243714757877d733c46968aa8f0d02bd

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6131a617b920821e2913280f13aebe0c45a94d5cd72ad54c98ed468b37322cd7
MD5 b2e068fcf65b945e570f7264a566545a
BLAKE2b-256 4f19bf931333552526302db9a368fafeca1e92309e567196957245efc2b04730

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp311-cp311-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp311-cp311-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3bc4e64402435607cf9ba9cb4b0524c15daeedb860c4abb2e6dbb444f9843368
MD5 52c28ac6e09c584c9bfa5d110f21e7b2
BLAKE2b-256 72c947518ace23eb17822fb3b8991af4b3e113d5b2343a60beacb79572939e79

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 78d131e5e5d519033b25f76718830a27d0fc313a9b94236fcd10b367235e7a88
MD5 e618b9bb4ddf79162319ff0eb8a5644b
BLAKE2b-256 2a2325c2447f0f0f76437d92610bbeea9411c2a4eefebad70e40778e039b2010

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 be99ab978307e48afd21007364d38bc460349f9bfe618d99ac6ddd21635e9faa
MD5 c3e8d9dc8234ccd1551de92de98d36b6
BLAKE2b-256 90f0111ade06a8d533d528808641f9397903eb2fd118db92e8e451beb4fcd0f9

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp310-cp310-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp310-cp310-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 fc25c38c99413f5e70577192be2e66c74b047a83eaca0b77d058028d549924b5
MD5 2541992084b9b61a03d1aaa44688f7a0
BLAKE2b-256 1a22b2badc2ecf94ab09dd095cb4e87b7e2f6f0f3918d9819a85cc482a27cafa

See more details on using hashes here.

File details

Details for the file tensordict_nightly-2026.7.9-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for tensordict_nightly-2026.7.9-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 d6531e69fd3b3764b98e9f82090e23e47345be02027b516cc38b238ffc1aafcb
MD5 a5bd33de31e80445f16c180a7c51f28a
BLAKE2b-256 d06cc3ebfe39e692e1f1b73597b19820ed445053a18217e987e5b5393ef24c40

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page