Tensordict

Latest version: v0.7.2

Safety actively analyzes 723400 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 4

0.5.0

This release is packed with new features and performance improvements.

What's new

`TensorDict.consolidate`
There is now a [`TensorDict.consolidate`](https://pytorch.org/tensordict/main/reference/generated/tensordict.TensorDictBase.html#tensordict.TensorDictBase.consolidate) method that will put all the tensors in a single storage. This will greatly speed-up serialization in multiprocessed and distributed settings.

PT2 support
TensorDict common ops (`get`, `set`, `index`, arithmetic ops etc) now work within `torch.compile`.
The list of supported operations can be found in [`test/test_compile.py`](https://github.com/pytorch/tensordict/blob/main/test/test_compile.py). We encourage users to report any graph break caused by tensordict to us, as we are willing to improve the coverage as much as can be.

Python 3.12 support
807 enables python 3.12 support, a long awaited feature!

Global reduction for `mean`, `std` and other reduction methods
It is now possible to get the grand average of a tensordict content using `tensordict.mean(reduce=True)`.
This applies to `mean`, `nanmean`, `prod`, `std`, `sum`, `nansum` and `var`.

`from_pytree` and `to_pytree`
We made it easy to convert a tensordict to a given `pytree` structure and build it from any pytree using `to_pytree` and `from_pytree`. 832
Similarly, conversion to `namedtuple` is now made easy thanks to 788.

`map_iter`
One can now iterate through a TensorDIct batch-dimension and apply a function on a separate process thanks to `map_iter`.
This should enable the construction of datasets using `TensorDict`, where the preproc step is executed on a separate process. 847

Using flatten and unflatten, flatten_keys and unflatten_keys as context managers
It is not possible to use `flatten_keys` and `flatten` as context managers (908, 779):
python
with tensordict.flatten_keys() as flat_td:
flat_td["flat.key"] = 0
assert td["flat", "key"] == 0


Building a tensordict using keyword arguments
We made it easy to build tensordicts with simple keyword arguments, like a `dict` is built in python:
python
td = TensorDict(a=0, b=1)
assert td["a"] == torch.tensor(0)
assert td["b"] == torch.tensor(1)

The `batch_size` is now optional for both tensordict and tensorclasses. 905

Load tensordicts directly on device
Thanks to 769, it is now possible to load a tensordict directly on a destination device (including `"meta"` device):
python
td = TensorDict.load(path, device=device)


New features
* [Feature,Performance] `to(device, pin_memory, num_threads)` by vmoens in https://github.com/pytorch/tensordict/pull/846
* [Feature] Allow calls to get_mode, get_mean and get_median in case mode, mean or median is not present by vmoens in https://github.com/pytorch/tensordict/pull/804
* [Feature] Arithmetic ops for tensorclass by vmoens in https://github.com/pytorch/tensordict/pull/786
* [Feature] Best attempt to densly stack sub-tds when LazyStacked TDS are passed to maybe_dense_stack by vmoens in https://github.com/pytorch/tensordict/pull/799
* [Feature] Better dtype coverage by vmoens in https://github.com/pytorch/tensordict/pull/834
* [Feature] Change default interaction types to DETERMINISTIC by vmoens in https://github.com/pytorch/tensordict/pull/825
* [Feature] DETERMINISTIC interaction mode by vmoens in https://github.com/pytorch/tensordict/pull/824
* [Feature] Expose call_on_nested to apply and named_apply by vmoens in https://github.com/pytorch/tensordict/pull/768
* [Feature] Expose stack / cat as class methods by vmoens in https://github.com/pytorch/tensordict/pull/793
* [Feature] Load tensordicts on device, incl. meta by vmoens in https://github.com/pytorch/tensordict/pull/769
* [Feature] Make Probabilistic modules aware of CompositeDistributions out_keys by vmoens in https://github.com/pytorch/tensordict/pull/810
* [Feature] Memory-mapped nested tensors by vmoens in https://github.com/pytorch/tensordict/pull/618
* [Feature] Multithreaded apply by vmoens in https://github.com/pytorch/tensordict/pull/844
* [Feature] Multithreaded pin_memory by vmoens in https://github.com/pytorch/tensordict/pull/845
* [Feature] Support for non tensor data in h5 by vmoens in https://github.com/pytorch/tensordict/pull/772
* [Feature] TensorDict.consolidate by vmoens in https://github.com/pytorch/tensordict/pull/814
* [Feature] TensorDict.numpy() by vmoens in https://github.com/pytorch/tensordict/pull/787
* [Feature] TensorDict.replace by vmoens in https://github.com/pytorch/tensordict/pull/774
* [Feature] `out` argument in apply by vmoens in https://github.com/pytorch/tensordict/pull/794
* [Feature] `to` for consolidated TDs by vmoens in https://github.com/pytorch/tensordict/pull/851
* [Feature] `zero_grad` and `requires_grad_` by vmoens in https://github.com/pytorch/tensordict/pull/901
* [Feature] add_custom_mapping and NPE refactors by vmoens in https://github.com/pytorch/tensordict/pull/910
* [Feature] construct tds with kwargs by vmoens in https://github.com/pytorch/tensordict/pull/905
* [Feature] determinstic_sample for composite dist by vmoens in https://github.com/pytorch/tensordict/pull/827
* [Feature] expand_as by vmoens in https://github.com/pytorch/tensordict/pull/792
* [Feature] flatten and unflatten as decorators by vmoens in https://github.com/pytorch/tensordict/pull/779
* [Feature] from and to_pytree by vmoens in https://github.com/pytorch/tensordict/pull/832
* [Feature] from_modules expand_identical kwarg by vmoens in https://github.com/pytorch/tensordict/pull/911
* [Feature] grad and data for tensorclasses by vmoens in https://github.com/pytorch/tensordict/pull/904
* [Feature] isfinite, isnan, isreal by vmoens in https://github.com/pytorch/tensordict/pull/829
* [Feature] map_iter by vmoens in https://github.com/pytorch/tensordict/pull/847
* [Feature] map_names for composite dists by vmoens in https://github.com/pytorch/tensordict/pull/809
* [Feature] online edition of memory mapped tensordicts by vmoens in https://github.com/pytorch/tensordict/pull/775
* [Feature] remove distutils dependency and enable 3.12 support by GaetanLepage in https://github.com/pytorch/tensordict/pull/807
* [Feature] to_namedtuple and from_namedtuple by vmoens in https://github.com/pytorch/tensordict/pull/788
* [Feature] view(dtype) by vmoens in https://github.com/pytorch/tensordict/pull/835

Performance
* [Performance] Faster getattr in TC by vmoens in https://github.com/pytorch/tensordict/pull/912
* [Performance] Faster lock_/unclock_ when sub-tds are already locked by vmoens in https://github.com/pytorch/tensordict/pull/816
* [Performance] Faster multithreaded pin_memory by vmoens in https://github.com/pytorch/tensordict/pull/919
* [Performance] Faster tensorclass by vmoens in https://github.com/pytorch/tensordict/pull/791
* [Performance] Faster tensorclass set by vmoens in https://github.com/pytorch/tensordict/pull/880
* [Performance] Faster to-module by vmoens in https://github.com/pytorch/tensordict/pull/914

Bug Fixes
* [BugFix,CI] Fix storage filename tests by vmoens in https://github.com/pytorch/tensordict/pull/850
* [BugFix] property setter in tensorclass by vmoens in https://github.com/pytorch/tensordict/pull/813
* [BugFix] Allow any tensorclass to have a data field by vmoens in https://github.com/pytorch/tensordict/pull/906
* [BugFix] Allow fake-tensor detection pass through in torch 2.0 by vmoens in https://github.com/pytorch/tensordict/pull/802
* [BugFix] Avoid collapsing NonTensorStack when calling where by vmoens in https://github.com/pytorch/tensordict/pull/837
* [BugFix] Check if the current user has write access by MateuszGuzek in https://github.com/pytorch/tensordict/pull/781
* [BugFix] Ensure dtype is preserved with autocast by vmoens in https://github.com/pytorch/tensordict/pull/773
* [BugFix] FIx non-tensor writing in modules by vmoens in https://github.com/pytorch/tensordict/pull/822
* [BugFix] Fix (keys, values) in sub by vmoens in https://github.com/pytorch/tensordict/pull/907
* [BugFix] Fix `_make_dtype_promotion` backward compat by vmoens in https://github.com/pytorch/tensordict/pull/842
* [BugFix] Fix `pad_sequence` behavior for non-tensor attributes of tensorclass by kurtamohler in https://github.com/pytorch/tensordict/pull/884
* [BugFix] Fix builds by vmoens in https://github.com/pytorch/tensordict/pull/849
* [BugFix] Fix compile + vmap by vmoens in https://github.com/pytorch/tensordict/pull/924
* [BugFix] Fix deterministic fallback when the dist has no support by vmoens in https://github.com/pytorch/tensordict/pull/830
* [BugFix] Fix device parsing in augmented funcs by vmoens in https://github.com/pytorch/tensordict/pull/770
* [BugFix] Fix empty tuple index by vmoens in https://github.com/pytorch/tensordict/pull/811
* [BugFix] Fix fallback of deterministic samples when mean is not available by vmoens in https://github.com/pytorch/tensordict/pull/828
* [BugFix] Fix functorch dim mock by vmoens in https://github.com/pytorch/tensordict/pull/777
* [BugFix] Fix gather device by vmoens in https://github.com/pytorch/tensordict/pull/815
* [BugFix] Fix h5 auto batch size by vmoens in https://github.com/pytorch/tensordict/pull/798
* [BugFix] Fix key ordering in pointwise ops by vmoens in https://github.com/pytorch/tensordict/pull/855
* [BugFix] Fix lazy stack features (where and norm) by vmoens in https://github.com/pytorch/tensordict/pull/795
* [BugFix] Fix map by vmoens in https://github.com/pytorch/tensordict/pull/862
* [BugFix] Fix map test with fork on cuda by vmoens in https://github.com/pytorch/tensordict/pull/765
* [BugFix] Fix pad_sequence for non tensors by vmoens in https://github.com/pytorch/tensordict/pull/784
* [BugFix] Fix setting non-tensors as data in NonTensorData by vmoens in https://github.com/pytorch/tensordict/pull/864
* [BugFix] Fix stack of tensorclasses (and nontensors) by vmoens in https://github.com/pytorch/tensordict/pull/820
* [BugFix] Fix storage.filename compat with torch 2.0 by vmoens in https://github.com/pytorch/tensordict/pull/803
* [BugFix] Fix tensorclass register by vmoens in https://github.com/pytorch/tensordict/pull/817
* [BugFix] Fix torch version assertion by vmoens in https://github.com/pytorch/tensordict/pull/917
* [BugFix] Fix vmap compatibility with torch<2.2 by vmoens in https://github.com/pytorch/tensordict/pull/925
* [BugFix] Fix vmap for tensorclass by vmoens in https://github.com/pytorch/tensordict/pull/778
* [BugFix] Fix wheels by vmoens in https://github.com/pytorch/tensordict/pull/856
* [BugFix] Keep stack dim name in LazyStackedTensorDict copy ops by vmoens in https://github.com/pytorch/tensordict/pull/801
* [BugFix] Read-only compatibility in MemoryMappedTensor by vmoens in https://github.com/pytorch/tensordict/pull/780
* [BugFix] Refactor map and map_iter by vmoens in https://github.com/pytorch/tensordict/pull/869
* [BugFix] Sync cuda only if initialized by vmoens in https://github.com/pytorch/tensordict/pull/767
* [BugFix] fix _expand_to_match_shape for single bool tensor by vmoens in https://github.com/pytorch/tensordict/pull/902
* [BugFix] fix construction of lazy stacks from tds by vmoens in https://github.com/pytorch/tensordict/pull/903
* [BugFix] fix tensorclass set by vmoens in https://github.com/pytorch/tensordict/pull/854
* [BugFix] remove inplace updates when using td as a decorator by vmoens in https://github.com/pytorch/tensordict/pull/796
* [BugFix] use as_subclass in Buffer by vmoens in https://github.com/pytorch/tensordict/pull/913

Refactoring and code quality
* [Quality] Better nested detection in numpy() by vmoens in https://github.com/pytorch/tensordict/pull/800
* [Quality] Better repr of keys by vmoens in https://github.com/pytorch/tensordict/pull/897
* [Quality] fix c++ binaries formatting by vmoens in https://github.com/pytorch/tensordict/pull/859
* [Quality] non_blocking_pin instead of pin_memory by vmoens in https://github.com/pytorch/tensordict/pull/915
* [Quality] zip-strict when possible by vmoens in https://github.com/pytorch/tensordict/pull/886
* [Refactor] Better tensorclass method registration by vmoens in https://github.com/pytorch/tensordict/pull/797
* [Refactor] Make all leaves in tensorclass part of `_tensordict`, except for NonTensorData by vmoens in https://github.com/pytorch/tensordict/pull/841
* [Refactor] Refactor c++ binaries location by vmoens in https://github.com/pytorch/tensordict/pull/860
* [Refactor] Refactor is_dynamo_compile imports by vmoens in https://github.com/pytorch/tensordict/pull/916
* [Refactor] Remove `_run_checks` from `__init__` by vmoens in https://github.com/pytorch/tensordict/pull/843
* [Refactor] use from_file instead of mmap+from_buffer for readonly files by vmoens in https://github.com/pytorch/tensordict/pull/808

Others
* Bump jinja2 from 3.1.3 to 3.1.4 in /docs by dependabot in https://github.com/pytorch/tensordict/pull/840
* [Benchmark] Benchmark tensorclass ops by vmoens in https://github.com/pytorch/tensordict/pull/790
* [Benchmark] Fix recursion and cache errors in benchmarks by vmoens in https://github.com/pytorch/tensordict/pull/900
* [CI] Fix nightly build by vmoens in https://github.com/pytorch/tensordict/pull/861
* [CI] Python 3.12 compatibility by kurtamohler in https://github.com/pytorch/tensordict/pull/818
* [Doc] Fix symbolic trace reference in doc by vmoens in https://github.com/pytorch/tensordict/pull/918
* [Formatting] Lint revamp by vmoens in https://github.com/pytorch/tensordict/pull/890
* [Test] Test FC of memmap save and load by vmoens in https://github.com/pytorch/tensordict/pull/838
* [Versioning] Allow any torch version for local builds by vmoens in https://github.com/pytorch/tensordict/pull/764
* [Versioning] Make dependence on uint16 optional for older PT versions by vmoens in https://github.com/pytorch/tensordict/pull/839
* [Versioning] tree_leaves for pytorch < 2.3 by vmoens in https://github.com/pytorch/tensordict/pull/806
* [Versioning] v0.5 bump by vmoens in https://github.com/pytorch/tensordict/pull/848

New Contributors
* MateuszGuzek made their first contribution in https://github.com/pytorch/tensordict/pull/781
* GaetanLepage made their first contribution in https://github.com/pytorch/tensordict/pull/807
* kurtamohler made their first contribution in https://github.com/pytorch/tensordict/pull/818

**Full Changelog**: https://github.com/pytorch/tensordict/compare/v0.4.0...v0.5.0

0.4.0

What's Changed

This new version of tensordict comes with a great deal of new features:

- You can now operate pointwise arithmetic operations on tensordict. For locked tensordicts and inplace operations such as `+=` or `data.mul_`, fused cuda kernels will be used which will drastically improve the runtime.
See
- [Feature] Pointwise arithmetic operations using foreach by vmoens in https://github.com/pytorch/tensordict/pull/722
- [Feature] Mean, std, var, prod, sum by vmoens in https://github.com/pytorch/tensordict/pull/751

- Casting tensordicts to device is now much faster out-of-the box as data will be cast asynchronously (and it's safe too!)
[BugFix,Feature] Optional non_blocking in set, to_module and update by vmoens in https://github.com/pytorch/tensordict/pull/718
[BugFix] consistent use of non_blocking in tensordict and torch.Tensor by vmoens in https://github.com/pytorch/tensordict/pull/734
[Feature] non_blocking=None by default by vmoens in https://github.com/pytorch/tensordict/pull/748

- The non-tensor data API has also been improved, see
[BugFix] Allow inplace modification of non-tensor data in locked tds by vmoens in https://github.com/pytorch/tensordict/pull/694
[BugFix] Fix inheritance from non-tensor by vmoens in https://github.com/pytorch/tensordict/pull/709
[Feature] Allow non-tensordata to be shared across processes + memmap by vmoens in https://github.com/pytorch/tensordict/pull/699
[Feature] Better detection of non-tensor data by vmoens in https://github.com/pytorch/tensordict/pull/685

- `tensorclass` now supports automatic type casting: annotating a value as a tensor or an int can ensure that the value will be cast to that type if the tensorclass decorator takes the `autocast=True` argument
[Feature] Type casting for tensorclass by vmoens in https://github.com/pytorch/tensordict/pull/735

- TensorDict.map now supports the "fork" start method. Preallocated outputs are also a possibility.
[Feature] mp_start_method in tensordict map by vmoens in https://github.com/pytorch/tensordict/pull/695
[Feature] map with preallocated output by vmoens in https://github.com/pytorch/tensordict/pull/667

- Miscellaneous performance improvements
[Performance] Faster flatten_keys by vmoens in https://github.com/pytorch/tensordict/pull/727
[Performance] Faster update_ by vmoens in https://github.com/pytorch/tensordict/pull/705
[Performance] Minor efficiency improvements by vmoens in https://github.com/pytorch/tensordict/pull/703
[Performance] Random speedups by albanD in https://github.com/pytorch/tensordict/pull/728
[Feature] Faster to(device) by vmoens in https://github.com/pytorch/tensordict/pull/740

- Finally, we have opened a discord channel for tensordict!
[Badge] Discord shield by vmoens in https://github.com/pytorch/tensordict/pull/736

- We cleaned up the API a bit, creating a `save` and a `load` methods, or adding some utils such as `fromkeys`. One can also check if a key belongs to a tensordict as it is done with a regular dictionary with `key in tensordict`!
[Feature] __contains__, clear and fromkeys by vmoens in https://github.com/pytorch/tensordict/pull/721

Thanks for all our contributors and community for the support!

Other PRs
* [Benchmark] Benchmark to_module by vmoens in https://github.com/pytorch/tensordict/pull/669
* [Benchmark] Benchmark update_ by vmoens in https://github.com/pytorch/tensordict/pull/704
* [BugFIx] FIx tc.update_ by vmoens in https://github.com/pytorch/tensordict/pull/750
* [BugFix, Feature] `pad_sequence` refactoring by dtsaras in https://github.com/pytorch/tensordict/pull/652
* [BugFix, Feature] tensorclass.to_dict and from_dict by vmoens in https://github.com/pytorch/tensordict/pull/707
* [BugFix, Performance] Fewer imports at root by vmoens in https://github.com/pytorch/tensordict/pull/682
* [BugFix, Refactor] More reliable Sequential.get_dist by vmoens in https://github.com/pytorch/tensordict/pull/678
* [BugFix,Feature] filter_empty in apply by vmoens in https://github.com/pytorch/tensordict/pull/661
* [BugFix] Allow device overriding with None in apply by vmoens in https://github.com/pytorch/tensordict/pull/720
* [BugFix] Avoid lazy stacks in stack if not asked explicitly by vmoens in https://github.com/pytorch/tensordict/pull/741
* [BugFix] Dense stack lazy tds defaults to dense_stack_tds by vmoens in https://github.com/pytorch/tensordict/pull/713
* [BugFix] Faster to_module by vmoens in https://github.com/pytorch/tensordict/pull/670
* [BugFix] Fix colab in tutos by vmoens in https://github.com/pytorch/tensordict/pull/757
* [BugFix] Fix dense stack usage in torch.stack by vmoens in https://github.com/pytorch/tensordict/pull/714
* [BugFix] Fix empty(recurse) call in _apply_nest by vmoens in https://github.com/pytorch/tensordict/pull/658
* [BugFix] Fix indexing (lazy stack and names) by vmoens in https://github.com/pytorch/tensordict/pull/657
* [BugFix] Fix keys for nested lazy stacks by vmoens in https://github.com/pytorch/tensordict/pull/745
* [BugFix] Fix lazy params init by vmoens in https://github.com/pytorch/tensordict/pull/681
* [BugFix] Fix lazy stack keys by vmoens in https://github.com/pytorch/tensordict/pull/744
* [BugFix] Fix load_state_dict for TensorDictParams by vmoens in https://github.com/pytorch/tensordict/pull/689
* [BugFix] Fix name gathering with tensor indices by vmoens in https://github.com/pytorch/tensordict/pull/690
* [BugFix] Fix singleton dims in expand_as_right by vmoens in https://github.com/pytorch/tensordict/pull/687
* [BugFix] Fix to_module `__exit__` update when td is locked by vmoens in https://github.com/pytorch/tensordict/pull/671
* [BugFix] Fix to_module batch-size mismatch by vmoens in https://github.com/pytorch/tensordict/pull/688
* [BugFix] Fix torch_function for uninit param by vmoens in https://github.com/pytorch/tensordict/pull/683
* [BugFix] Fix zipping in flatten_keys by vmoens in https://github.com/pytorch/tensordict/pull/729
* [BugFix] Improve update_ by vmoens in https://github.com/pytorch/tensordict/pull/655
* [BugFix] Keep dim names in transpose by vmoens in https://github.com/pytorch/tensordict/pull/662
* [BugFix] Loading phantom state-dicts by vmoens in https://github.com/pytorch/tensordict/pull/650
* [BugFix] Make functorch.dim optional by vmoens in https://github.com/pytorch/tensordict/pull/737
* [BugFix] Missing **kwargs in apply_ fallback by vmoens in https://github.com/pytorch/tensordict/pull/664
* [BugFix] Patch pad_sequence by vmoens in https://github.com/pytorch/tensordict/pull/742
* [BugFix] Remove monkey patching of uninit params by vmoens in https://github.com/pytorch/tensordict/pull/684
* [BugFix] Support empty tuple in lazy stack indexing by vmoens in https://github.com/pytorch/tensordict/pull/696
* [BugFix] Track sub-tds in memmap by vmoens in https://github.com/pytorch/tensordict/pull/719
* [BugFix] Unlock td during update in to_module by vmoens in https://github.com/pytorch/tensordict/pull/686
* [BugFix] module hook fixes by vmoens in https://github.com/pytorch/tensordict/pull/673
* [BugFix] tensorclass as a decorator by vmoens in https://github.com/pytorch/tensordict/pull/691
* [CI] Doc on release tag by vmoens in https://github.com/pytorch/tensordict/pull/761
* [CI] Fix wheels by vmoens in https://github.com/pytorch/tensordict/pull/763
* [CI] Pinning mpmath by vmoens in https://github.com/pytorch/tensordict/pull/697
* [CI] Remove OSX x86 jobs by vmoens in https://github.com/pytorch/tensordict/pull/753
* [CI] Remove all osx x86 workflows by vmoens in https://github.com/pytorch/tensordict/pull/760
* [CI] Remove snapshot from CI by vmoens in https://github.com/pytorch/tensordict/pull/701
* [CI] Schedule workflow for release branches by vmoens in https://github.com/pytorch/tensordict/pull/759
* [CI] Unpin mpmath by vmoens in https://github.com/pytorch/tensordict/pull/702
* [Doc,CI] Sanitize version by vmoens in https://github.com/pytorch/tensordict/pull/762
* [Doc] Fix EnsembleModule docstring by BY571 in https://github.com/pytorch/tensordict/pull/712
* [Doc] Fix probabilistic td module doc by vmoens in https://github.com/pytorch/tensordict/pull/756
* [Doc] Installation instructions in API ref by vmoens in https://github.com/pytorch/tensordict/pull/660
* [Doc] Per-release docs by vmoens in https://github.com/pytorch/tensordict/pull/758
* [Doc] fix typo by husisy in https://github.com/pytorch/tensordict/pull/724
* [Feature] Adds utils method isin by albertbou92 in https://github.com/pytorch/tensordict/pull/654
* [Feature] Adds utils method remove_duplicates by albertbou92 in https://github.com/pytorch/tensordict/pull/653
* [Feature] Inherit lock in shape / tensor ops by vmoens in https://github.com/pytorch/tensordict/pull/730
* [Feature] Store non tensor stacks in a single json by vmoens in https://github.com/pytorch/tensordict/pull/711
* [Feature] TensorDict logger by vmoens in https://github.com/pytorch/tensordict/pull/710
* [Feature] TensorDict.depth property by vmoens in https://github.com/pytorch/tensordict/pull/732
* [Feature] Use generator for map by vmoens in https://github.com/pytorch/tensordict/pull/672
* [Feature] Warn when `reset_parameters_recursive` is a no-op by matteobettini in https://github.com/pytorch/tensordict/pull/693
* [Feature] `from_modules` method for MOE / ensemble learning by vmoens in https://github.com/pytorch/tensordict/pull/677
* [Feature] td_flatten_with_keys by vmoens in https://github.com/pytorch/tensordict/pull/675
* [Feature] tensordict.to_padded_tensor by vmoens in https://github.com/pytorch/tensordict/pull/723
* [Feature] use return_mask as a string in pad_sequence by dtsaras in https://github.com/pytorch/tensordict/pull/739
* [Minor] Minor improvements to tensorclass by vmoens in https://github.com/pytorch/tensordict/pull/743
* [Minor] Remove double locks on data and grad by vmoens in https://github.com/pytorch/tensordict/pull/752
* [Refactor, Feature] Default to empty batch size by vmoens in https://github.com/pytorch/tensordict/pull/674
* [Refactor] Cleanup deprecation of empty td filtering in apply by vmoens in https://github.com/pytorch/tensordict/pull/665
* [Refactor] Refactor contiguous by vmoens in https://github.com/pytorch/tensordict/pull/716
* [Refactor] Set lazy_legacy to False by default by vmoens in https://github.com/pytorch/tensordict/pull/680
* [Test] Add proper tests for torch.stack with lazy stacks by vmoens in https://github.com/pytorch/tensordict/pull/715
* [Versioning] Remove deprecated features by vmoens in https://github.com/pytorch/tensordict/pull/747
* [Versioning] Torch version by vmoens in https://github.com/pytorch/tensordict/pull/749
* [Versioning] v0.4.0 by vmoens in https://github.com/pytorch/tensordict/pull/649

New Contributors
* dtsaras made their first contribution in https://github.com/pytorch/tensordict/pull/652
* BY571 made their first contribution in https://github.com/pytorch/tensordict/pull/712
* husisy made their first contribution in https://github.com/pytorch/tensordict/pull/724
* albanD made their first contribution in https://github.com/pytorch/tensordict/pull/728

**Full Changelog**: https://github.com/pytorch/tensordict/compare/v0.3.0...v0.4.0

0.3.2

[BugFix,Feature] Optional non_blocking in set, to_module and update (718)
[Refactor] Refactor contiguous (716)
[Test] Add proper tests for torch.stack with lazy stacks (715)
[BugFix] Fix dense stack usage in torch.stack (714)
[BugFix] Dense stack lazy tds defaults to dense_stack_tds (713)
[Feature] Store non tensor stacks in a single json (711)
[Feature] TensorDict logger (710)
[BugFix, Feature] tensorclass.to_dict and from_dict (707)
[BugFix] Fix inheritance from non-tensor (709)
[Performance] Faster update_ (705)
[Benchmark] Benchmark update_ (704)
[Performance] Minor efficiency improvements (703)
[Feature] Allow non-tensordata to be shared across processes + memmap (699)
[CI] Unpin mpmath (702)
[CI] Remove snapshot from CI (701)
[BugFix] Support empty tuple in lazy stack indexing (696)
[CI] Pinning mpmath (697)
[BugFix] Allow inplace modification of non-tensor data in locked tds (694)
[Feature] Better detection of non-tensor data (685)
[Feature] Warn when reset_parameters_recursive is a no-op (693)
[BugFix,Feature] filter_empty in apply (661)

See the release on PyPI: https://pypi.org/project/tensordict/0.3.2/

0.3.1

Solves several bugs and performance issues.

List of changes:

- https://github.com/pytorch/tensordict/pull/652
- https://github.com/pytorch/tensordict/pull/691
- https://github.com/pytorch/tensordict/pull/690
- https://github.com/pytorch/tensordict/pull/689
- https://github.com/pytorch/tensordict/pull/688
- https://github.com/pytorch/tensordict/pull/687
- https://github.com/pytorch/tensordict/pull/686
- https://github.com/pytorch/tensordict/pull/684
- https://github.com/pytorch/tensordict/pull/683
- https://github.com/pytorch/tensordict/pull/681
- https://github.com/pytorch/tensordict/pull/682
- https://github.com/pytorch/tensordict/pull/678
- https://github.com/pytorch/tensordict/pull/673
- https://github.com/pytorch/tensordict/pull/671
- https://github.com/pytorch/tensordict/pull/670
- https://github.com/pytorch/tensordict/pull/669
- https://github.com/pytorch/tensordict/pull/665
- https://github.com/pytorch/tensordict/pull/664
- https://github.com/pytorch/tensordict/pull/662
- https://github.com/pytorch/tensordict/pull/658
- https://github.com/pytorch/tensordict/pull/657
- https://github.com/pytorch/tensordict/pull/655
- https://github.com/pytorch/tensordict/pull/650

0.3.0

In this release we introduce a bunch of exciting features to TensorDict:

- We deprecate MemmapTensor in favour of MemoryMappedTensor, which is fully backed by torch.Tensor and not numpy anymore. The new API is faster and way more bug-free than it used too. See 541

- Saving tensordicts on disk can now be done via `memmap`, `memmap_` and `memmap_like` which all support multithreading. If possible, serialization is pickle free (memmap + json) and `torch.save` is only used for classes that fail to be serialized with json. Serializing models using tensordict is now 3-10x faster than using torch.save, even for SOTA LLMs such as LLAMA.

- TensorDict can now carry non tensor data through the `NonTensorData` class. Assigning non-tensor data can also be done via `__setitem__` and they can be retrieved via `__getitem__`. 601

- A bunch of new operations have appeared too such as `named_apply` (apply with key names) or `tensordict.auto_batch_size_()`, and operations like update can now be achieved for only a subset of keys.

- Almost all operations in the library are now faster!

- We are slowing deprecating lazy classes except for `LazyStackedTensorDict`. Whereas `torch.stack` used to systematically return a lazy stack, it now returns a dense stack if the `set_lazy_legacy(mode)` decorator is set to `False` (which will be the default in the next release). The old behaviour can be set with `set_lazy_legacy(True)`. Lazy stacks can still be obtained using `LazyStackedTensorDict.lazy_stack`. Appropriate warnings are raised unless you have patched your code accordingly.

What's Changed
* [Refactor] MemoryMappedTensor by vmoens in https://github.com/pytorch/tensordict/pull/541
* [Feature] Multithread memmap by vmoens in https://github.com/pytorch/tensordict/pull/592
* [Refactor] Graceful as_tensor by vmoens in https://github.com/pytorch/tensordict/pull/549
* [Test] Fix as_tensor test by vmoens in https://github.com/pytorch/tensordict/pull/551
* Fix assignment of `str`-typed value to `_device` attribute in `MemmapTensor` by kurt-stolle in https://github.com/pytorch/tensordict/pull/552
* [Refactor] Refactor split by vmoens in https://github.com/pytorch/tensordict/pull/555
* [Refactor] Refactor implement_for by vmoens in https://github.com/pytorch/tensordict/pull/556
* [Feature] Better constructors for MemoryMappedTensors by vmoens in https://github.com/pytorch/tensordict/pull/557
* [CI] Fix benchmark on gpu by vmoens in https://github.com/pytorch/tensordict/pull/560
* [CI] Add regular benchmarks to CI in PRs without upload by vmoens in https://github.com/pytorch/tensordict/pull/561
* [Refactor] Major refactoring of codebase by vmoens in https://github.com/pytorch/tensordict/pull/559
* [Benchmark] Benchmark split and chunk by vmoens in https://github.com/pytorch/tensordict/pull/564
* [Performance] Faster split, chunk and unbind by vmoens in https://github.com/pytorch/tensordict/pull/563
* [Feature] Consolidate functional calls by vmoens in https://github.com/pytorch/tensordict/pull/565
* [Refactor] Improve functional call efficiency by vmoens in https://github.com/pytorch/tensordict/pull/567
* [Refactor] Do not lock nested tensordict in tensordictparams by vmoens in https://github.com/pytorch/tensordict/pull/568
* [Performance] Faster params and buffer registration in TensorDictParams by vmoens in https://github.com/pytorch/tensordict/pull/569
* [BugFix] Graceful attribute error exit in TensorDictParams by vmoens in https://github.com/pytorch/tensordict/pull/571
* [Refactor] Upgrade pytree import by vmoens in https://github.com/pytorch/tensordict/pull/573
* [BugFix] Compatibility with missing _global_parameter_registration_hooks by vmoens in https://github.com/pytorch/tensordict/pull/574
* [Feature] Seed workers in TensorDict.map by vmoens in https://github.com/pytorch/tensordict/pull/562
* [Performance] Faster update by vmoens in https://github.com/pytorch/tensordict/pull/572
* [Performance] Faster to_module by vmoens in https://github.com/pytorch/tensordict/pull/575
* [BugFix] _FileHandler for windows by vmoens in https://github.com/pytorch/tensordict/pull/577
* [Performance] Faster `__init__` by vmoens in https://github.com/pytorch/tensordict/pull/576
* [Feature, Test] Add tests for partial update by vmoens in https://github.com/pytorch/tensordict/pull/578
* [BugFix] No fallback on `TensorDictModule.__getattr__` for private attributes by vmoens in https://github.com/pytorch/tensordict/pull/579
* [BugFix] Fix deepcopy of TensorDictParams by vmoens in https://github.com/pytorch/tensordict/pull/580
* Add MANIFEST.in by vmoens in https://github.com/pytorch/tensordict/pull/581
* [BugFix] Delete parameter/buffer before setting it with regular setattr in to_module by vmoens in https://github.com/pytorch/tensordict/pull/583
* [Feature] named_apply and default value in apply by vmoens in https://github.com/pytorch/tensordict/pull/584
* [BugFix] Faster empty_like for MemoryMappedTensor by vmoens in https://github.com/pytorch/tensordict/pull/585
* [BugFix] Faster empty_like for MemoryMappedTensor (dup) by vmoens in https://github.com/pytorch/tensordict/pull/586
* [BugFix] Adapt MemoryMappedTensor for torch < 2.0 by vmoens in https://github.com/pytorch/tensordict/pull/587
* [Performance] Make copy_ a no-op if tensors are identical by vmoens in https://github.com/pytorch/tensordict/pull/588
* [BugFix] Fix non-blocking arg in copy_ by vmoens in https://github.com/pytorch/tensordict/pull/590
* [Feature] Unbind and stack tds in map with chunksize=0 by vmoens in https://github.com/pytorch/tensordict/pull/589
* [Performance] Faster dispatch by vmoens in https://github.com/pytorch/tensordict/pull/487
* [Feature] Saving metadata of tensorclass by vmoens in https://github.com/pytorch/tensordict/pull/582
* [BugFix] Fix osx tests by vmoens in https://github.com/pytorch/tensordict/pull/591
* [Feature] Weakref for unlocking tds by vmoens in https://github.com/pytorch/tensordict/pull/595
* [BugFix] Fix pickling of weakrefs by vmoens in https://github.com/pytorch/tensordict/pull/597
* [Feature] Return early a tensordict created through memmap with multiple threads by vmoens in https://github.com/pytorch/tensordict/pull/598
* [CI] Depend on torch nightly for nightly releases by vmoens in https://github.com/pytorch/tensordict/pull/599
* [Feature] Storing non-tensor data in tensordicts by vmoens in https://github.com/pytorch/tensordict/pull/601
* [Feature, Test] FSDP and DTensors by vmoens in https://github.com/pytorch/tensordict/pull/600
* [Minor] Fix type deletion in tensorclass load_memmap by vmoens in https://github.com/pytorch/tensordict/pull/602
* [BugFix] Fix ellipsis check by vmoens in https://github.com/pytorch/tensordict/pull/604
* [Feature] Best intention stack by vmoens in https://github.com/pytorch/tensordict/pull/605
* [Feature] Remove and check for prints in codebase using flake8-print by vmoens in https://github.com/pytorch/tensordict/pull/603
* [Doc] Doc revamp by vmoens in https://github.com/pytorch/tensordict/pull/593
* [BugFix, Doc] Fix tutorial by vmoens in https://github.com/pytorch/tensordict/pull/606
* [BugFix] Fix gh-pages upload by vmoens in https://github.com/pytorch/tensordict/pull/607
* [BugFix] Upload content of html directly by vmoens in https://github.com/pytorch/tensordict/pull/608
* [Feature] Improve in-place ops for TensorDictParams by vmoens in https://github.com/pytorch/tensordict/pull/609
* [BugFix, CI] Fix GPU benchmarks by vmoens in https://github.com/pytorch/tensordict/pull/611
* [Feature] inplace to_module by vmoens in https://github.com/pytorch/tensordict/pull/610
* [Versioning] Bump v0.3.0 by vmoens in https://github.com/pytorch/tensordict/pull/613
* [Feature] Support group specification by lucifer1004 in https://github.com/pytorch/tensordict/pull/616
* [Refactor] Remove remaining MemmapTensor references by vmoens in https://github.com/pytorch/tensordict/pull/617
* [Tests] Reorder and regroup tests by vmoens in https://github.com/pytorch/tensordict/pull/614
* [Performance] Faster set by vmoens in https://github.com/pytorch/tensordict/pull/619
* [Performance] Better shared/memmap inheritance and faster exclude by vmoens in https://github.com/pytorch/tensordict/pull/621
* [Benchmark] Benchmark select, exclude and empty by vmoens in https://github.com/pytorch/tensordict/pull/623
* [Feature] Improve the `empty` method by vmoens in https://github.com/pytorch/tensordict/pull/622
* [BugFix] Fix is_memmap attribute for memmap_like and memmap by vmoens in https://github.com/pytorch/tensordict/pull/625
* Bump jinja2 from 3.1.2 to 3.1.3 in /docs by dependabot in https://github.com/pytorch/tensordict/pull/626
* [BugFix] Remove shared/memmap inheritance from clone / select / exclude by vmoens in https://github.com/pytorch/tensordict/pull/624
* [BugFix] Fix `index in list` error by vmoens in https://github.com/pytorch/tensordict/pull/627
* [Refactor] Make unbind call tensor.unbind by vmoens in https://github.com/pytorch/tensordict/pull/628
* [Feature] `auto_batch_size_` by vmoens in https://github.com/pytorch/tensordict/pull/630
* [BugFix] Fix NonTensorData interaction by vmoens in https://github.com/pytorch/tensordict/pull/631
* [Doc] More doc on how to set and get non-tensor data by vmoens in https://github.com/pytorch/tensordict/pull/632
* [Feature] _auto_make_functional and _dispatch_td_nn_modules by vmoens in https://github.com/pytorch/tensordict/pull/633
* [BugFIx] Fix exclude indent by vmoens in https://github.com/pytorch/tensordict/pull/637
* [BugFix] Limit number of threads in workers for .map() by vmoens in https://github.com/pytorch/tensordict/pull/638
* [Feature] Robust to lazy_legacy set to false and context managers for reshape ops by vmoens in https://github.com/pytorch/tensordict/pull/634
* [Minor] Typo in lazy legacy warnings by vmoens in https://github.com/pytorch/tensordict/pull/639
* [Minor] NestedKey typing issues by vmoens in https://github.com/pytorch/tensordict/pull/640
* [Feature] nested_keys option in named_apply by vmoens in https://github.com/pytorch/tensordict/pull/641
* [Feature] Expose NestedKey in root by vmoens in https://github.com/pytorch/tensordict/pull/642

New Contributors
* kurt-stolle made their first contribution in https://github.com/pytorch/tensordict/pull/552
* lucifer1004 made their first contribution in https://github.com/pytorch/tensordict/pull/616
* dependabot made their first contribution in https://github.com/pytorch/tensordict/pull/626

**Full Changelog**: https://github.com/pytorch/tensordict/compare/v0.2.1...v0.3.0

0.2.1

**Full Changelog**: https://github.com/pytorch/tensordict/compare/v0.2.0...v0.2.1

Page 2 of 4

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.