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("/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.

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.8.4-cp314-cp314-win_amd64.whl (648.4 kB view details)

Uploaded CPython 3.14Windows x86-64

tensordict_nightly-2026.8.4-cp314-cp314-macosx_11_0_universal2.whl (574.9 kB view details)

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

tensordict_nightly-2026.8.4-cp313-cp313-win_amd64.whl (646.5 kB view details)

Uploaded CPython 3.13Windows x86-64

tensordict_nightly-2026.8.4-cp313-cp313-macosx_11_0_universal2.whl (574.8 kB view details)

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

tensordict_nightly-2026.8.4-cp312-cp312-win_amd64.whl (646.4 kB view details)

Uploaded CPython 3.12Windows x86-64

tensordict_nightly-2026.8.4-cp312-cp312-macosx_11_0_universal2.whl (574.8 kB view details)

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

tensordict_nightly-2026.8.4-cp311-cp311-win_amd64.whl (644.8 kB view details)

Uploaded CPython 3.11Windows x86-64

tensordict_nightly-2026.8.4-cp311-cp311-macosx_11_0_universal2.whl (573.9 kB view details)

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

tensordict_nightly-2026.8.4-cp310-cp310-win_amd64.whl (641.8 kB view details)

Uploaded CPython 3.10Windows x86-64

tensordict_nightly-2026.8.4-cp310-cp310-macosx_11_0_universal2.whl (572.0 kB view details)

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

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 516f2c4955b0f5c3bfdbabfcf84de10526a16e31c874eda47329dc734574354a
MD5 e382b83a781888a2493056723e2b16d2
BLAKE2b-256 9818168d668bbb3ceffe33835f71fde1df04357fc6529fcd14e2c43a18a73508

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp314-cp314-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 8b5156e9d051209d350d5de4af1216836fa113c22d2d78237c0f7df9a87bdce6
MD5 44abf4d1a0b4f636d84e2ebc96f58b1f
BLAKE2b-256 5205db77498510d29c590c4a334c08f329e8901d91f66b430c71e0f918e7c636

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 ce1bc14120fe0e9e463c1dedc4033074f070c482ce9e398a1902ba45d9e3f566
MD5 35b5494941b0eee6beca54b4b8ba232f
BLAKE2b-256 018eb00533e269a126dbb3b9c7f06110d1980aedbbd080c6fedbb0859f23e391

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 124b0436d7737744aa8dd916c4bc79069cf55485c6f956fdc4139e23a4ac1e56
MD5 d228ef820189fd0160760d1d48b5f4df
BLAKE2b-256 5ccf99e5e252b831d71c8c5b9c04a25b1a436ef8ea3c8a558a5dcbe42f5c3749

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp313-cp313-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 92b1a892f9add425fb9bd99c5c4b5ce0f98d5bf73e26bda7c3367c9cc35adf11
MD5 dbfd18c95580ab739bceb7d1baef4ea3
BLAKE2b-256 a5a070a0977c3de20266bd997074960acc3a86d4a2cb4c8991eac9f7dc689be1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 37843d4a7be67d91636c7c84da35b4cf38f2e319b42eada924098d8d0a8fe516
MD5 3cd12bcb3654b2b2cef4dc454b39673c
BLAKE2b-256 8db0ee71008fbef93a186ce3d7012f95c1243dac23655d89acedc046d257f615

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 87fb0b6615760552be95f2cce7a26732ac61e58ba36a972158790d1e280e7ee0
MD5 af342548506a746f71f508eaacc61a19
BLAKE2b-256 fdd59f3980d221a4210b541a678d5da0001e5b9f17b65bde821044a81dc1aff7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp312-cp312-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 095d1cf2ae64cfd16087fc3d21e1e68d5992e8f7e160dbf8f8876a1186fdc72a
MD5 f0ec5911aa59e9a671824abe00a96bfe
BLAKE2b-256 c9a8adfde41f67a8f4b514551812ef9ba45e5d4dded2f1ca74cf2d6630aea39d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 e96d558c9fac0e55f15410c2a014b492cec986608a2d7b6691d13e5fc64eb925
MD5 c154eaf3f875d435430a1b2042132d0a
BLAKE2b-256 b4e9297a7b6e789b00c95e7d3d253285e1d0dae266bb10476db7436004d0905e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fb20e9ad5b8a44d4268334823045b52e49cd79e75843790845382d7a4c12c6b6
MD5 62c965e18e13941206cf6efb034fb95c
BLAKE2b-256 b9687a7f5b1b9a46382b017290debbecf95a23bce3f99fa9740b988065661eb3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp311-cp311-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 0d7050eafe514378c8aaaa798fcb3ff9a6a453c044dd3cee728dcead21487963
MD5 efabe0d72f9599b7cc95fe0edc9a8e9f
BLAKE2b-256 74f65b257401e727793a71cbe97b3a33fb71f317336aa78f7f10ecbd3118883b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 bb654d64dadd621554048bce8c7f310eb6bd4bce40aee468921a9138355f171c
MD5 bfd228efa358af58af5c3442491285f6
BLAKE2b-256 a04e3e9b0613ca70c02829bd9f185ae20b71b03fc684b2baca49f48956731563

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 890c17d38a9a5479ccd4ecdaf0a92ee6e8658de21bc271cb061366958d0779ba
MD5 22461e84d58e984d7119ad4198c95e4a
BLAKE2b-256 763e08b5a15af901c110642689ae14d9f71e0584f183e5fefbaefdf115b05e9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp310-cp310-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 72f512fe6f6a606630609290739bb69b40ba9b9ffbc7e1d8b1bd242dac2aa42d
MD5 2a63a897404da15b06bcc13fc624f332
BLAKE2b-256 a9cdcac175fe398094f496984c26559ba9f4bac7bfe0cb160ae2cc748b4ecbb9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tensordict_nightly-2026.8.4-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 33c579c0a58ad5c6d668f9d1f353b68cb9f8512e225826e6d4299f8e94a5cebe
MD5 59fc9924be58d2bf929a88f5eddce84b
BLAKE2b-256 4db29fc5d3f522eddf2243d9892339a790086438ed98fc70e4ad0df935995d79

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

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