returnn 1.20240719.111324__tar.gz → 1.20240719.152107__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of returnn might be problematic. Click here for more details.

Files changed (455) hide show
  1. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/PKG-INFO +1 -1
  2. returnn-1.20240719.152107/_setup_info_generated.py +2 -0
  3. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/frontend/_backend.py +11 -15
  4. returnn-1.20240719.152107/returnn/torch/util/array_.py +54 -0
  5. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn.egg-info/PKG-INFO +1 -1
  6. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn.egg-info/SOURCES.txt +1 -0
  7. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_torch_frontend.py +158 -2
  8. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/torch_utils.py +130 -26
  9. returnn-1.20240719.111324/_setup_info_generated.py +0 -2
  10. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/.editorconfig +0 -0
  11. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/.gitignore +0 -0
  12. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/.gitmodules +0 -0
  13. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/.kateconfig +0 -0
  14. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/CHANGELOG.md +0 -0
  15. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/CODEOWNERS +0 -0
  16. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/CONTRIBUTING.md +0 -0
  17. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/LICENSE +0 -0
  18. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/MANIFEST.in +0 -0
  19. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/README.rst +0 -0
  20. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/__init__.py +0 -0
  21. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/12AX.cluster_map +0 -0
  22. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/_setup_returnn_env.py +0 -0
  23. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-fwd.config +0 -0
  24. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-horovod-mpi.py +0 -0
  25. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-horovod-mpi.py.sh +0 -0
  26. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-horovod-mpi.sh +0 -0
  27. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-hyper-param-tuning.config +0 -0
  28. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-iter-dataset.py +0 -0
  29. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-list-devices.py +0 -0
  30. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-lua-torch-layer.config +0 -0
  31. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-pretrain.config +0 -0
  32. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-record-and-push-to-webserver.py +0 -0
  33. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-returnn-as-framework.py +0 -0
  34. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-rf-pt-benchmark.py +0 -0
  35. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-rf.config +0 -0
  36. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-rhn-enwik8.config +0 -0
  37. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-sprint-interface.py +0 -0
  38. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-att-copy.config +0 -0
  39. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-attention.config +0 -0
  40. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
  41. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
  42. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-enc-dec.config +0 -0
  43. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-hard-att-copy.config +0 -0
  44. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-lstm-benchmark.py +0 -0
  45. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
  46. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
  47. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-native-lstm.12ax.config +0 -0
  48. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-native-lstm2.12ax.config +0 -0
  49. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
  50. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-neural-transducer.12ax.config +0 -0
  51. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-rec-explicit-lstm.config +0 -0
  52. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-rec-explicit-rnn.config +0 -0
  53. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-rec-self-att.config +0 -0
  54. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-search-compiled-graph.py +0 -0
  55. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
  56. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-timit-lstm-ctc.config +0 -0
  57. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-torch.config +0 -0
  58. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
  59. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/demo.sh +0 -0
  60. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
  61. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
  62. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
  63. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/README.txt +0 -0
  64. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/chars.txt +0 -0
  65. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/config_demo +0 -0
  66. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/config_fwd +0 -0
  67. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/config_real +0 -0
  68. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
  69. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/decode.py +0 -0
  70. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
  71. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/go.sh +0 -0
  72. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/lines.txt +0 -0
  73. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/split/eval.txt +0 -0
  74. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/split/train.txt +0 -0
  75. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/IAM/split/valid.txt +0 -0
  76. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/README.md +0 -0
  77. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/artificial/create_test_h5.py +0 -0
  78. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/artificial/forwardconfig +0 -0
  79. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/artificial/go.sh +0 -0
  80. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/artificial/trainconfig +0 -0
  81. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
  82. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
  83. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/artificial_rgb/go.sh +0 -0
  84. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
  85. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/pyproject.toml +0 -0
  86. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/requirements.txt +0 -0
  87. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/__init__.py +0 -0
  88. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/__main__.py +0 -0
  89. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/__old_mod_loader__.py +0 -0
  90. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/__setup__.py +0 -0
  91. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/config.py +0 -0
  92. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/__init__.py +0 -0
  93. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/audio.py +0 -0
  94. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/basic.py +0 -0
  95. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/bundle_file.py +0 -0
  96. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/cached.py +0 -0
  97. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/cached2.py +0 -0
  98. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/distrib_files.py +0 -0
  99. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/generating.py +0 -0
  100. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/hdf.py +0 -0
  101. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/lm.py +0 -0
  102. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/map.py +0 -0
  103. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/meta.py +0 -0
  104. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/multi_proc.py +0 -0
  105. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/normalization_data.py +0 -0
  106. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/numpy_dump.py +0 -0
  107. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/raw_wav.py +0 -0
  108. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/sprint.py +0 -0
  109. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/stereo.py +0 -0
  110. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/util/__init__.py +0 -0
  111. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/util/feature_extraction.py +0 -0
  112. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/util/strings.py +0 -0
  113. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/datasets/util/vocabulary.py +0 -0
  114. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/engine/__init__.py +0 -0
  115. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/engine/base.py +0 -0
  116. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/engine/batch.py +0 -0
  117. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/__init__.py +0 -0
  118. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/__main__.py +0 -0
  119. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/.git +0 -0
  120. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
  121. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
  122. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
  123. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
  124. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
  125. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
  126. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
  127. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
  128. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
  129. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
  130. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
  131. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
  132. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
  133. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
  134. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
  135. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
  136. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
  137. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
  138. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
  139. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
  140. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
  141. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
  142. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
  143. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
  144. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/__init__.py +0 -0
  145. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/graph_editor/README.md +0 -0
  146. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/graph_editor/__init__.py +0 -0
  147. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/graph_editor/edit.py +0 -0
  148. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/graph_editor/reroute.py +0 -0
  149. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/graph_editor/select.py +0 -0
  150. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/graph_editor/subgraph.py +0 -0
  151. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/graph_editor/transform.py +0 -0
  152. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/extern/graph_editor/util.py +0 -0
  153. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/forward_iface.py +0 -0
  154. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/__init__.py +0 -0
  155. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_backend.py +0 -0
  156. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_native/__init__.py +0 -0
  157. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_native/backend.cpp +0 -0
  158. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_native/backend.hpp +0 -0
  159. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_native/module.cpp +0 -0
  160. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_native/module.hpp +0 -0
  161. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_native/py_utils.hpp +0 -0
  162. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_native/tensor_ops.cpp +0 -0
  163. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_native/tensor_ops.hpp +0 -0
  164. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_numpy_backend.py +0 -0
  165. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_random_journal.py +0 -0
  166. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/_utils.py +0 -0
  167. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/array_.py +0 -0
  168. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/attention.py +0 -0
  169. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/audio/__init__.py +0 -0
  170. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/audio/mel.py +0 -0
  171. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/audio/specaugment.py +0 -0
  172. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/backend.py +0 -0
  173. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/build_from_dict.py +0 -0
  174. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/cond.py +0 -0
  175. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/const.py +0 -0
  176. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/container.py +0 -0
  177. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/control_flow_ctx.py +0 -0
  178. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/conv.py +0 -0
  179. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/decoder/__init__.py +0 -0
  180. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/decoder/transformer.py +0 -0
  181. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/device.py +0 -0
  182. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/dims.py +0 -0
  183. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/dropout.py +0 -0
  184. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/dtype.py +0 -0
  185. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/encoder/__init__.py +0 -0
  186. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/encoder/base.py +0 -0
  187. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/encoder/conformer.py +0 -0
  188. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/gradient.py +0 -0
  189. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/graph.py +0 -0
  190. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/hooks.py +0 -0
  191. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/init.py +0 -0
  192. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/label_smoothing.py +0 -0
  193. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/linear.py +0 -0
  194. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/loop.py +0 -0
  195. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/loss.py +0 -0
  196. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/math_.py +0 -0
  197. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/matmul.py +0 -0
  198. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/module.py +0 -0
  199. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/normalization.py +0 -0
  200. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/parameter.py +0 -0
  201. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/parametrizations.py +0 -0
  202. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/parametrize.py +0 -0
  203. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/piecewise_linear.py +0 -0
  204. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/rand.py +0 -0
  205. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/rec.py +0 -0
  206. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/reduce.py +0 -0
  207. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/run_ctx.py +0 -0
  208. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/signal.py +0 -0
  209. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/state.py +0 -0
  210. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/stepwise_scheduler.py +0 -0
  211. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/tensor_array.py +0 -0
  212. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/frontend/types.py +0 -0
  213. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/import_/__init__.py +0 -0
  214. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/import_/common.py +0 -0
  215. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/import_/git.py +0 -0
  216. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/import_/import_.py +0 -0
  217. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/learning_rate_control.py +0 -0
  218. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/log.py +0 -0
  219. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/native_op.cpp +0 -0
  220. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/native_op.py +0 -0
  221. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/pretrain.py +0 -0
  222. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/sprint/__init__.py +0 -0
  223. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/sprint/cache.py +0 -0
  224. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/sprint/control.py +0 -0
  225. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/sprint/error_signals.py +0 -0
  226. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/sprint/extern_interface.py +0 -0
  227. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/sprint/interface.py +0 -0
  228. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/README.md +0 -0
  229. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/__init__.py +0 -0
  230. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/_dim_extra.py +0 -0
  231. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/_tensor_extra.py +0 -0
  232. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/_tensor_mixin_base.py +0 -0
  233. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/_tensor_op_overloads.py +0 -0
  234. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/control_flow_ctx.py +0 -0
  235. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/dim.py +0 -0
  236. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/marked_dim.py +0 -0
  237. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/tensor.py +0 -0
  238. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/tensor_dict.py +0 -0
  239. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tensor/utils.py +0 -0
  240. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/__init__.py +0 -0
  241. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/compat.py +0 -0
  242. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/data_pipeline.py +0 -0
  243. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/distributed.py +0 -0
  244. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/engine.py +0 -0
  245. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/README.md +0 -0
  246. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/__init__.py +0 -0
  247. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/_backend.py +0 -0
  248. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/_utils.py +0 -0
  249. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/cond.py +0 -0
  250. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
  251. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
  252. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/dims.py +0 -0
  253. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/layer.py +0 -0
  254. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/loop.py +0 -0
  255. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/make_layer.py +0 -0
  256. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/masked_computation.py +0 -0
  257. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
  258. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
  259. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_low_level/__init__.py +0 -0
  260. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/frontend_low_level/_backend.py +0 -0
  261. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/horovod.py +0 -0
  262. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/hyper_param_tuning.py +0 -0
  263. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/layers/__init__.py +0 -0
  264. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/layers/base.py +0 -0
  265. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/layers/basic.py +0 -0
  266. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/layers/rec.py +0 -0
  267. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/layers/segmental_model.py +0 -0
  268. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/layers/signal_processing.py +0 -0
  269. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/layers/variable.py +0 -0
  270. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/native_op.py +0 -0
  271. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/network.py +0 -0
  272. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/sprint.py +0 -0
  273. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/updater.py +0 -0
  274. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/util/__init__.py +0 -0
  275. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/util/basic.py +0 -0
  276. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/util/data.py +0 -0
  277. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/util/gradient_checkpoint.py +0 -0
  278. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/util/ken_lm.py +0 -0
  279. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/tf/util/open_fst.py +0 -0
  280. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/README.md +0 -0
  281. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/__init__.py +0 -0
  282. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/data/__init__.py +0 -0
  283. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/data/extern_data.py +0 -0
  284. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/data/pipeline.py +0 -0
  285. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/data/queued_data_iter.py +0 -0
  286. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
  287. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/data/tensor_utils.py +0 -0
  288. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/distributed.py +0 -0
  289. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/engine.py +0 -0
  290. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/frontend/__init__.py +0 -0
  291. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/frontend/_rand.py +0 -0
  292. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/frontend/bridge.py +0 -0
  293. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/frontend/raw_ops.py +0 -0
  294. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/updater.py +0 -0
  295. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/util/README.md +0 -0
  296. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/util/__init__.py +0 -0
  297. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/util/diagnose_gpu.py +0 -0
  298. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/util/gradient_checkpoint.py +0 -0
  299. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/torch/util/scaled_gradient.py +0 -0
  300. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/__init__.py +0 -0
  301. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/basic.py +0 -0
  302. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/better_exchook.py +0 -0
  303. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/bpe.py +0 -0
  304. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/debug.py +0 -0
  305. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/debug_helpers.py +0 -0
  306. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/file_cache.py +0 -0
  307. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/fsa.py +0 -0
  308. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/literal_py_to_pickle.py +0 -0
  309. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/math.py +0 -0
  310. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
  311. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/native_code_compiler.py +0 -0
  312. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/pprint.py +0 -0
  313. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/py-to-pickle.cpp +0 -0
  314. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/py_compat.py +0 -0
  315. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/py_ext_mod_compiler.py +0 -0
  316. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/result_with_reason.py +0 -0
  317. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/sig_proc.py +0 -0
  318. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/task_system.py +0 -0
  319. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/train_proc_manager.py +0 -0
  320. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn/util/watch_memory.py +0 -0
  321. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn.egg-info/dependency_links.txt +0 -0
  322. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/returnn.egg-info/top_level.txt +0 -0
  323. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/rnn.py +0 -0
  324. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/setup.cfg +0 -0
  325. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/setup.py +0 -0
  326. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/DummySprintExec.py +0 -0
  327. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm-inspection-profile.xml +0 -0
  328. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/.gitignore +0 -0
  329. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/.name +0 -0
  330. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
  331. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
  332. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
  333. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
  334. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
  335. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/misc.xml +0 -0
  336. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/modules.xml +0 -0
  337. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/returnn.iml +0 -0
  338. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
  339. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/_set_num_threads1.py +0 -0
  340. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/_setup_returnn_env.py +0 -0
  341. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/_setup_test_env.py +0 -0
  342. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/bpe-unicode-demo.codes +0 -0
  343. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/bpe-unicode-demo.vocab +0 -0
  344. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/lexicon_opt.fst +0 -0
  345. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/lexicon_opt.isyms +0 -0
  346. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/lexicon_opt.jpg +0 -0
  347. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/lexicon_opt.osyms +0 -0
  348. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/lint_common.py +0 -0
  349. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/pycharm-inspect.py +0 -0
  350. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/pylint.py +0 -0
  351. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/returnn-as-framework.py +0 -0
  352. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/rf_utils.py +0 -0
  353. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/spelling.dic +0 -0
  354. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_Config.py +0 -0
  355. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_Dataset.py +0 -0
  356. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_Fsa.py +0 -0
  357. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_GeneratingDataset.py +0 -0
  358. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_HDFDataset.py +0 -0
  359. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_LearningRateControl.py +0 -0
  360. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_Log.py +0 -0
  361. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_MultiProcDataset.py +0 -0
  362. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_Pretrain.py +0 -0
  363. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_ResNet.py +0 -0
  364. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_SprintDataset.py +0 -0
  365. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_SprintInterface.py +0 -0
  366. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TFEngine.py +0 -0
  367. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TFNativeOp.py +0 -0
  368. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TFNetworkLayer.py +0 -0
  369. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TFNetworkRecLayer.py +0 -0
  370. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TFNetworkSigProcLayer.py +0 -0
  371. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TFUpdater.py +0 -0
  372. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TFUtil.py +0 -0
  373. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TF_determinism.py +0 -0
  374. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TaskSystem.py +0 -0
  375. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TaskSystem_SharedMem.py +0 -0
  376. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_TranslationDataset.py +0 -0
  377. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_Util.py +0 -0
  378. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_demos.py +0 -0
  379. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_fork_exec.py +0 -0
  380. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_hdf_dump.py +0 -0
  381. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_array.py +0 -0
  382. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_attention.py +0 -0
  383. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_base.py +0 -0
  384. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_cond.py +0 -0
  385. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_const.py +0 -0
  386. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_container.py +0 -0
  387. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_conv.py +0 -0
  388. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_encoder_conformer.py +0 -0
  389. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_gradient.py +0 -0
  390. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_label_smoothing.py +0 -0
  391. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_loop.py +0 -0
  392. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_math.py +0 -0
  393. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_normalization.py +0 -0
  394. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_piecewise_linear.py +0 -0
  395. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_rec.py +0 -0
  396. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_reduce.py +0 -0
  397. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_rf_signal.py +0 -0
  398. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_tensor.py +0 -0
  399. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_tools.py +0 -0
  400. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_torch_dataset.py +0 -0
  401. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_torch_engine.py +0 -0
  402. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_torch_internal_frontend.py +0 -0
  403. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tests/test_torch_util.py +0 -0
  404. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/_setup_returnn_env.py +0 -0
  405. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/analyze-dataset-batches.py +0 -0
  406. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/bliss-collect-seq-lens.py +0 -0
  407. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/bliss-dump-text.py +0 -0
  408. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/bliss-get-segment-names.py +0 -0
  409. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/bliss-to-ogg-zip.py +0 -0
  410. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/bpe-create-lexicon.py +0 -0
  411. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/calculate-word-error-rate.py +0 -0
  412. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/cleanup-old-models.py +0 -0
  413. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/collect-orth-symbols.py +0 -0
  414. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/collect-words.py +0 -0
  415. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/compile_native_op.py +0 -0
  416. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/compile_tf_graph.py +0 -0
  417. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/debug-dump-search-scores.py +0 -0
  418. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/debug-plot-search-scores.py +0 -0
  419. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/dump-dataset-raw-strings.py +0 -0
  420. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/dump-dataset.py +0 -0
  421. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/dump-forward-stats.py +0 -0
  422. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/dump-forward.py +0 -0
  423. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/dump-network-json.py +0 -0
  424. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/dump-pickle.py +0 -0
  425. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/extract_state_tying_from_dataset.py +0 -0
  426. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/get-attention-weights.py +0 -0
  427. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/get-best-model-epoch.py +0 -0
  428. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/hdf_dump.py +0 -0
  429. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/hdf_dump_translation_dataset.py +0 -0
  430. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/import-blocks-mt-model.py +0 -0
  431. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/import-t2t-mt-model.py +0 -0
  432. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/.gitignore +0 -0
  433. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/Makefile +0 -0
  434. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/README.md +0 -0
  435. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/README.md +0 -0
  436. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/libs_list +0 -0
  437. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
  438. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
  439. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
  440. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/state_vars_list +0 -0
  441. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/tensor_names_list +0 -0
  442. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/file.h +0 -0
  443. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
  444. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
  445. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/main.cc +0 -0
  446. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/rescorer.h +0 -0
  447. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/vocabulary.cc +0 -0
  448. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/lattice_rescorer/vocabulary.h +0 -0
  449. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/tf_avg_checkpoints.py +0 -0
  450. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/tf_inspect_checkpoint.py +0 -0
  451. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/tf_inspect_summary_log.py +0 -0
  452. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/torch_avg_checkpoints.py +0 -0
  453. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/torch_export_to_onnx.py +0 -0
  454. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/torch_inspect_checkpoint.py +0 -0
  455. {returnn-1.20240719.111324 → returnn-1.20240719.152107}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20240719.111324
3
+ Version: 1.20240719.152107
4
4
  Summary: The RWTH extensible training framework for universal recurrent neural networks
5
5
  Home-page: https://github.com/rwth-i6/returnn/
6
6
  Author: Albert Zeyer
@@ -0,0 +1,2 @@
1
+ version = '1.20240719.152107'
2
+ long_version = '1.20240719.152107+git.eb10e7c'
@@ -1578,36 +1578,32 @@ class TorchBackend(Backend[torch.Tensor]):
1578
1578
  the new dim is also returned.
1579
1579
  if mask==True for all elements, the returned tensor would be simply the flattened input tensor.
1580
1580
  """
1581
+ from returnn.torch.util.array_ import masked_select
1582
+
1581
1583
  assert mask.dtype == "bool"
1582
1584
  assert set(mask.dims) == set(dims)
1583
1585
  remaining_dims = [d for d in tensor.dims if d not in mask.dims]
1584
1586
  tensor_templ_dims = tuple(dims) + tuple(remaining_dims)
1585
1587
  in_raw = tensor.copy_compatible_to_dims_raw(tensor_templ_dims)
1586
- mask_raw = mask.copy_compatible_to_dims_raw(tensor_templ_dims)
1587
- # We have a very strange problem with the gradient of masked_select,
1588
- # when used together with some specific other operations before that,
1589
- # like convolution.
1590
- # This clone() with contiguous_format seems to fix the problem.
1591
- # https://github.com/pytorch/pytorch/issues/99638
1592
- in_raw = in_raw.clone(memory_format=torch.contiguous_format)
1593
- if mask_raw.device.type == "meta":
1588
+ if mask.raw_tensor.device.type == "meta":
1594
1589
  # This is not supported, but also, we would anyway not know the out shape.
1595
1590
  # However, instead of erroring, just assume some dummy mask.
1596
1591
  # https://github.com/pytorch/pytorch/issues/109871
1597
1592
  out_raw = in_raw.flatten()
1598
1593
  else:
1599
- out_raw = torch.masked_select(in_raw, mask_raw)
1600
- remaining_shape = [d.get_dim_value() for d in remaining_dims]
1601
- remaining_num_elements = numpy.prod(remaining_shape) if remaining_shape else 1
1602
- assert out_raw.numel() % remaining_num_elements == 0
1603
- flattened_num_elements = out_raw.numel() // remaining_num_elements
1604
- out_raw = torch.reshape(out_raw, [flattened_num_elements] + remaining_shape)
1594
+ mask_raw = mask.copy_compatible_to_dims_raw(dims)
1595
+ known_mask_len = (
1596
+ out_dim.get_dim_value()
1597
+ if out_dim and out_dim.dyn_size_ext is not None and out_dim.dyn_size_ext.raw_tensor is not None
1598
+ else None
1599
+ )
1600
+ out_raw = masked_select(in_raw, mask_raw, mask_len=known_mask_len)
1605
1601
  if not out_dim:
1606
1602
  out_dim = Dim(None, name="masked_select")
1607
1603
  if not out_dim.dyn_size_ext:
1608
1604
  out_dim.dyn_size_ext = Tensor("masked_select_size", dims=(), dtype="int64")
1609
1605
  if out_dim.dyn_size_ext.raw_tensor is None:
1610
- out_dim.dyn_size_ext.raw_tensor = torch.tensor(flattened_num_elements, dtype=torch.int64)
1606
+ out_dim.dyn_size_ext.raw_tensor = torch.tensor(out_raw.shape[0], dtype=torch.int64)
1611
1607
  out = Tensor(
1612
1608
  "masked_select",
1613
1609
  dims=(out_dim,) + tuple(remaining_dims),
@@ -0,0 +1,54 @@
1
+ """
2
+ Array (Tensor) functions
3
+ """
4
+
5
+ from __future__ import annotations
6
+ from typing import Optional, Union
7
+ import torch
8
+
9
+
10
+ # noinspection PyShadowingBuiltins
11
+ def masked_select(input: torch.Tensor, mask: torch.Tensor, *, mask_len: Optional[Union[int, torch.Tensor]] = None):
12
+ """
13
+ Like :func:`torch.masked_select` but much more efficient,
14
+ both in terms of memory and computation time,
15
+ both on CPU and GPU.
16
+
17
+ See here for the issues with :func:`torch.masked_select`:
18
+ https://github.com/rwth-i6/returnn/issues/1584
19
+ https://github.com/pytorch/pytorch/issues/30246
20
+ https://github.com/pytorch/pytorch/issues/56896
21
+
22
+ :param input: [mask_dims..., remaining_dims...]
23
+ :param mask: [mask_dims...], binary mask to index with. if it has less dims than ``input``,
24
+ the remaining dims are broadcasted.
25
+ :param mask_len: if given, the length of the mask. this avoids a CUDA synchronization.
26
+ :return: selected elements, shape [mask_len, remaining_dims...]
27
+ """
28
+ assert input.ndim >= mask.ndim
29
+ assert all(input.shape[i] == mask.shape[i] for i in range(mask.ndim))
30
+ mask_flat = mask.flatten()
31
+ if mask_len is not None:
32
+ indices = nonzero(mask_flat, out_len=mask_len) # [out_len]
33
+ else:
34
+ indices = torch.nonzero(mask_flat).squeeze(1) # [out_len]
35
+ input_flat = input.flatten(end_dim=mask.ndim - 1)
36
+ return input_flat[indices]
37
+
38
+
39
+ def nonzero(mask: torch.Tensor, *, out_len: Union[int, torch.Tensor]) -> torch.Tensor:
40
+ """
41
+ This has the advantage over :func:`torch.nonzero`
42
+ that we do not need to perform a CUDA synchronization.
43
+ We can avoid that when we know the output length in advance.
44
+
45
+ :param mask: flattened (dim() == 1) mask, bool
46
+ :param out_len:
47
+ :return: indices of True elements, shape [out_len].
48
+ like ``mask.nonzero().flatten()``
49
+ """
50
+ assert mask.dim() == 1 and mask.dtype == torch.bool
51
+ # Sort currently does not support bool dtype on CUDA, thus cast to int.
52
+ idx = torch.argsort(mask.to(torch.int8), stable=True, descending=True) # [in_len]
53
+ idx = idx[:out_len] # [out_len]
54
+ return idx
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20240719.111324
3
+ Version: 1.20240719.152107
4
4
  Summary: The RWTH extensible training framework for universal recurrent neural networks
5
5
  Home-page: https://github.com/rwth-i6/returnn/
6
6
  Author: Albert Zeyer
@@ -293,6 +293,7 @@ returnn/torch/frontend/bridge.py
293
293
  returnn/torch/frontend/raw_ops.py
294
294
  returnn/torch/util/README.md
295
295
  returnn/torch/util/__init__.py
296
+ returnn/torch/util/array_.py
296
297
  returnn/torch/util/diagnose_gpu.py
297
298
  returnn/torch/util/gradient_checkpoint.py
298
299
  returnn/torch/util/scaled_gradient.py
@@ -4,19 +4,39 @@ tests for returnn.torch.frontend
4
4
 
5
5
  import _setup_test_env # noqa
6
6
 
7
+ from typing import Any, Dict, List
7
8
  import numpy.testing
8
9
  import torch
9
10
  import pytest
10
11
  import math
11
12
  import sys
12
13
  import unittest
14
+ from pprint import pprint
15
+
16
+ from torch_utils import (
17
+ report_profile,
18
+ get_remaining_allocs_from_profile,
19
+ get_allocs_from_profile,
20
+ get_peak_alloc_from_profile,
21
+ )
13
22
 
14
23
  from returnn.util import better_exchook
15
24
  from returnn.tensor import Tensor, Dim
16
25
  import returnn.frontend as rf
17
26
 
18
27
 
19
- rf.select_backend_torch()
28
+ def _setup():
29
+ rf.select_backend_torch()
30
+ dev = None
31
+ if torch.cuda.is_available():
32
+ dev = "cuda"
33
+ elif hasattr(torch.backends, "mps") and torch.backends.mps.is_available() and torch.backends.mps.is_built():
34
+ dev = "mps"
35
+ if dev:
36
+ torch.set_default_device(dev)
37
+
38
+
39
+ _setup()
20
40
 
21
41
 
22
42
  def test_dot_scalar_multiplication():
@@ -343,7 +363,7 @@ def test_cross_entropy_dense_target():
343
363
  assert cross_entropy_list[1] == pytest.approx(-0.3 * math.log(5 / 7) - 0.7 * math.log(1 / 7))
344
364
 
345
365
 
346
- def test_pack_padded():
366
+ def test_pack_padded_wrong_grad():
347
367
  # https://github.com/pytorch/pytorch/issues/99638
348
368
 
349
369
  # noinspection PyShadowingNames
@@ -431,6 +451,142 @@ def test_pack_padded():
431
451
  prev_bias_grad = bias_grad
432
452
 
433
453
 
454
+ @unittest.skipIf(torch.__version__ < (2,), "report_profile needs PyTorch >= 2.0")
455
+ def test_pack_padded_memory():
456
+ import numpy as np
457
+ import torch
458
+ from returnn.tensor import Dim
459
+
460
+ rnd = np.random.RandomState(42)
461
+ batch_dim_ = Dim(5, name="batch")
462
+ batch_dims = [batch_dim_]
463
+ vocab_dim = Dim(7, name="vocab")
464
+ enc_dim = Dim(rf.convert_to_tensor(torch.tensor([17, 16, 15, 13, 12], device="cpu"), dims=[batch_dim_]), name="enc")
465
+ dec_dim = Dim(rf.convert_to_tensor(torch.tensor([11, 10, 8, 7, 5], device="cpu"), dims=[batch_dim_]), name="dec")
466
+ logits = rf.convert_to_tensor(
467
+ torch.tensor(
468
+ rnd.randn(
469
+ batch_dim_.dimension,
470
+ enc_dim.dyn_size_ext.raw_tensor.max(),
471
+ dec_dim.dyn_size_ext.raw_tensor.max(),
472
+ vocab_dim.dimension,
473
+ ).astype(np.float32)
474
+ ),
475
+ dims=[batch_dim_, enc_dim, dec_dim, vocab_dim],
476
+ )
477
+ print("dev:", logits.device)
478
+ sizeof_float = 4
479
+
480
+ def _get_rf_pack_packed() -> torch.Tensor:
481
+ logits_packed, pack_dim = rf.pack_padded(
482
+ logits, dims=batch_dims + [enc_dim, dec_dim], enforce_sorted=False
483
+ ) # [B * T * (S+1), D]
484
+ return logits_packed.raw_tensor
485
+
486
+ def _get_naive_pack_padded() -> torch.Tensor:
487
+ logits_raw = logits.copy_transpose(batch_dims + [enc_dim, dec_dim, vocab_dim]).raw_tensor
488
+ enc_lens = enc_dim.dyn_size_ext.raw_tensor
489
+ non_blank_lens = dec_dim.dyn_size_ext.raw_tensor
490
+ vocab_len = vocab_dim.dimension
491
+
492
+ batch_tensors = []
493
+
494
+ for b in range(logits_raw.shape[0]):
495
+ enc_len = enc_lens[b]
496
+ non_blank_len = non_blank_lens[b]
497
+ combined_len = enc_len * non_blank_len
498
+ logits_single = logits_raw[b, :enc_len, :non_blank_len]
499
+ logits_single = torch.reshape(logits_single, (combined_len, vocab_len))
500
+ batch_tensors.append(logits_single)
501
+
502
+ return torch.cat(batch_tensors, dim=0)
503
+
504
+ from torch.profiler import profile, ProfilerActivity
505
+
506
+ with profile(
507
+ activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA],
508
+ profile_memory=True,
509
+ with_stack=True,
510
+ record_shapes=True,
511
+ ) as prof_rf:
512
+ rf_pack_padded_res = _get_rf_pack_packed()
513
+
514
+ with profile(
515
+ activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA],
516
+ profile_memory=True,
517
+ with_stack=True,
518
+ record_shapes=True,
519
+ ) as prof_naive:
520
+ naive_pack_padded_res = _get_naive_pack_padded()
521
+
522
+ print("result shape:", rf_pack_padded_res.shape, "numel:", rf_pack_padded_res.numel())
523
+ assert rf_pack_padded_res.shape == naive_pack_padded_res.shape
524
+ assert rf_pack_padded_res.device == naive_pack_padded_res.device
525
+ assert torch.eq(rf_pack_padded_res, naive_pack_padded_res).all()
526
+
527
+ print("*** RF ***")
528
+ report_profile(prof_rf, allow_remaining_allocs=True)
529
+ print("*** Naive ***")
530
+ report_profile(prof_naive, allow_remaining_allocs=True)
531
+ print("***")
532
+
533
+ def _filter_rf_alloc(alloc: Dict[str, Any]) -> bool:
534
+ # Filter some RF internal caches which will get created.
535
+ return "/sequence_mask/get_mask/" not in alloc["name"]
536
+
537
+ def _filter_rf_allocs_dict(allocs: Dict[int, Dict[str, Any]]):
538
+ return {k: v for k, v in allocs.items() if _filter_rf_alloc(v)}
539
+
540
+ def _filter_rf_allocs_list(allocs: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
541
+ return [v for v in allocs if _filter_rf_alloc(v)]
542
+
543
+ print("inputs shape:", logits.raw_tensor.shape, "numel:", logits.raw_tensor.numel())
544
+ print(" byte size:", logits.raw_tensor.numel() * sizeof_float)
545
+ print("result shape:", rf_pack_padded_res.shape, "numel:", rf_pack_padded_res.numel())
546
+ print(" byte size:", rf_pack_padded_res.numel() * sizeof_float)
547
+ enc_lens = enc_dim.dyn_size_ext.raw_tensor
548
+ non_blank_lens = dec_dim.dyn_size_ext.raw_tensor
549
+ print("Mask size:", batch_dim_.dimension * max(enc_lens) * max(non_blank_lens))
550
+ total_num_el = 0
551
+ for b in range(batch_dim_.dimension):
552
+ enc_len = enc_lens[b]
553
+ non_blank_len = non_blank_lens[b]
554
+ total_num_el += enc_len * non_blank_len
555
+ print("Expected total num elements:", total_num_el, "with vocab:", total_num_el * vocab_dim.dimension)
556
+ print("Size:", total_num_el * vocab_dim.dimension * sizeof_float)
557
+
558
+ print("Remaining allocs:")
559
+ allocs_rf = get_remaining_allocs_from_profile(prof_rf)
560
+ allocs_rf = _filter_rf_allocs_dict(allocs_rf)
561
+ print("RF:", allocs_rf)
562
+ allocs_naive = get_remaining_allocs_from_profile(prof_naive)
563
+ print("Naive:", allocs_naive)
564
+ assert len(allocs_rf) == len(allocs_naive) == 1
565
+ assert (
566
+ list(allocs_rf.values())[0]["size"]
567
+ == list(allocs_naive.values())[0]["size"]
568
+ # On CPU, it should match, but on GPU, it will allocate more.
569
+ # == rf_pack_padded_res.numel() * sizeof_float
570
+ )
571
+
572
+ print("All allocs RF:")
573
+ for alloc in _filter_rf_allocs_list(get_allocs_from_profile(prof_rf)):
574
+ alloc["name"] = alloc["name"][alloc["name"].find("/_get_rf_pack_packed/") + len("/_get_rf_pack_packed/") :]
575
+ print(" ", alloc)
576
+ print("All allocs naive:")
577
+ for alloc in get_allocs_from_profile(prof_naive):
578
+ alloc["name"] = alloc["name"][
579
+ alloc["name"].find("/_get_naive_pack_padded/") + len("/_get_naive_pack_padded/") :
580
+ ]
581
+ print(" ", alloc)
582
+
583
+ print("Peak alloc:")
584
+ print("RF:", get_peak_alloc_from_profile(prof_rf))
585
+ print("Naive:", get_peak_alloc_from_profile(prof_naive))
586
+
587
+ print("dev:", rf_pack_padded_res.device)
588
+
589
+
434
590
  def test_Data_copy_compatible_to_match_priority():
435
591
  feat_dim = Dim(2, name="feature")
436
592
  in_dim = feat_dim.copy(match_priority=1)
@@ -3,7 +3,7 @@ Utilities for PyTorch tests
3
3
  """
4
4
 
5
5
  from __future__ import annotations
6
- from typing import Optional, Any, Sequence, Tuple, Dict
6
+ from typing import Optional, Any, Sequence, Tuple, List, Dict
7
7
  import torch
8
8
 
9
9
 
@@ -69,7 +69,7 @@ def report_profile(
69
69
  ev_name = "alloc"
70
70
  assert ex.alloc_size > 0
71
71
  assert ev.parent
72
- name = _ctx(ev.parent)
72
+ name = _ev_ctx(ev.parent)
73
73
  _allocs[ex.allocation_id] = {"size": ex.alloc_size, "name": name}
74
74
  opts = {"id": ex.allocation_id, "name": name, "size": ex.alloc_size, "total_alloc": ex.total_allocated}
75
75
  elif ev.typed[0] == _EventType.TorchOp:
@@ -161,30 +161,6 @@ def report_profile(
161
161
  else:
162
162
  print(f"{prefix}({ev_name} {opts})")
163
163
 
164
- def _ctx(ev) -> str:
165
- stack = [None]
166
- parent = ev
167
- while parent and parent.typed[0] == _EventType.TorchOp: # go to top torch op
168
- stack[-1] = parent.typed[1].name
169
- parent = parent.parent
170
- if not stack[-1] and parent.typed[0] == _EventType.PyCCall:
171
- stack[-1] = parent.typed[1].caller.function_name
172
- parent = parent.parent
173
- if not stack[-1]:
174
- stack.pop(-1)
175
- while parent:
176
- if parent.typed[0] == _EventType.PyCall:
177
- ex0 = parent.typed[1].caller # torch._C._profiler._PyFrameState
178
- ex1 = parent.typed[1].callsite # torch._C._profiler._PyFrameState
179
- if (
180
- _pycall_filter_fn(ex1.file_name)
181
- or (_pycall_filter_fn(ex0.file_name) and ex1.function_name == "backward")
182
- ) and ex1.function_name not in {"__torch_dispatch__"}:
183
- stack.append(ex1.function_name)
184
- parent = parent.parent
185
- stack.reverse()
186
- return "/".join(stack) or "unknown"
187
-
188
164
  for ev_ in sorted(
189
165
  traverse_dfs(prof.profiler.kineto_results.experimental_event_tree()), key=lambda ev: ev.start_time_ns
190
166
  ):
@@ -199,6 +175,107 @@ def report_profile(
199
175
  assert not check_events, f"Remaining check events: {check_events}"
200
176
 
201
177
 
178
+ def get_remaining_allocs_from_profile(prof: torch.profiler.profiler) -> Dict[int, Dict[str, Any]]:
179
+ """
180
+ Get remaining allocs from profile.
181
+
182
+ :param prof: via torch.profiler.profile.
183
+ :return: allocs dict: id -> dict with "size", "name"
184
+ """
185
+ # noinspection PyProtectedMember
186
+ from torch.profiler._utils import traverse_dfs
187
+ from torch._C._profiler import _EventType # noqa
188
+
189
+ _allocs = {} # id -> dict with "size", "name"
190
+
191
+ for ev in sorted(
192
+ traverse_dfs(prof.profiler.kineto_results.experimental_event_tree()), key=lambda ev: ev.start_time_ns
193
+ ):
194
+ # ev: torch._C._profiler._ProfilerEvent
195
+ if ev.typed[0] == _EventType.Allocation:
196
+ ex = ev.typed[1] # torch._C._profiler._ExtraFields_Allocation
197
+ # ex.id/ex.allocation_id/ex.ptr redundant?
198
+ if ex.allocation_id in _allocs:
199
+ # expect deallocation
200
+ assert _allocs[ex.allocation_id]["size"] == -ex.alloc_size
201
+ del _allocs[ex.allocation_id]
202
+ else:
203
+ # allocation
204
+ assert ex.alloc_size > 0
205
+ assert ev.parent
206
+ name = _ev_ctx(ev.parent)
207
+ _allocs[ex.allocation_id] = {"size": ex.alloc_size, "name": name}
208
+
209
+ return _allocs
210
+
211
+
212
+ def get_allocs_from_profile(prof: torch.profiler.profiler) -> List[Dict[str, Any]]:
213
+ """
214
+ Get allocs from profile.
215
+
216
+ :param prof: via torch.profiler.profile.
217
+ :return: allocs dict: id -> dict with "size", "name"
218
+ """
219
+ # noinspection PyProtectedMember
220
+ from torch.profiler._utils import traverse_dfs
221
+ from torch._C._profiler import _EventType # noqa
222
+
223
+ _allocs = [] # dict with "id", "size", "name"
224
+
225
+ for ev in sorted(
226
+ traverse_dfs(prof.profiler.kineto_results.experimental_event_tree()), key=lambda ev: ev.start_time_ns
227
+ ):
228
+ # ev: torch._C._profiler._ProfilerEvent
229
+ if ev.typed[0] == _EventType.Allocation:
230
+ ex = ev.typed[1] # torch._C._profiler._ExtraFields_Allocation
231
+ if ex.alloc_size > 0:
232
+ assert ev.parent
233
+ name = _ev_ctx(ev.parent)
234
+ _allocs.append({"id": ex.allocation_id, "size": ex.alloc_size, "name": name})
235
+
236
+ return _allocs
237
+
238
+
239
+ def get_peak_alloc_from_profile(prof: torch.profiler.profiler) -> int:
240
+ """
241
+ Get remaining allocs from profile.
242
+
243
+ :param prof: via torch.profiler.profile.
244
+ :return: peak alloc size
245
+ """
246
+ # noinspection PyProtectedMember
247
+ from torch.profiler._utils import traverse_dfs
248
+ from torch._C._profiler import _EventType # noqa
249
+
250
+ _allocs = {} # id -> dict with "size", "name"
251
+ peak_alloc = 0
252
+
253
+ for ev in sorted(
254
+ traverse_dfs(prof.profiler.kineto_results.experimental_event_tree()), key=lambda ev: ev.start_time_ns
255
+ ):
256
+ # ev: torch._C._profiler._ProfilerEvent
257
+ # ev: torch._C._profiler._ProfilerEvent
258
+ if ev.typed[0] == _EventType.Allocation:
259
+ ex = ev.typed[1] # torch._C._profiler._ExtraFields_Allocation
260
+ # ex.id/ex.allocation_id/ex.ptr redundant?
261
+ if ex.allocation_id in _allocs:
262
+ # expect deallocation
263
+ assert _allocs[ex.allocation_id]["size"] == -ex.alloc_size
264
+ del _allocs[ex.allocation_id]
265
+ else:
266
+ # allocation
267
+ assert ex.alloc_size > 0
268
+ assert ev.parent
269
+ name = _ev_ctx(ev.parent)
270
+ _allocs[ex.allocation_id] = {"size": ex.alloc_size, "name": name}
271
+
272
+ cur_total_alloc = sum(alloc["size"] for alloc in _allocs.values())
273
+ if cur_total_alloc > peak_alloc:
274
+ peak_alloc = cur_total_alloc
275
+
276
+ return peak_alloc
277
+
278
+
202
279
  def _pycall_filter_fn(filename: str) -> bool:
203
280
  assert not filename.startswith("/") # currently the case...
204
281
  if filename.startswith("test_"):
@@ -209,6 +286,33 @@ def _pycall_filter_fn(filename: str) -> bool:
209
286
  return False
210
287
 
211
288
 
289
+ def _ev_ctx(ev) -> str:
290
+ from torch._C._profiler import _EventType # noqa
291
+
292
+ stack = [None]
293
+ parent = ev
294
+ while parent and parent.typed[0] == _EventType.TorchOp: # go to top torch op
295
+ stack[-1] = parent.typed[1].name
296
+ parent = parent.parent
297
+ if not stack[-1] and parent.typed[0] == _EventType.PyCCall:
298
+ stack[-1] = parent.typed[1].caller.function_name
299
+ parent = parent.parent
300
+ if not stack[-1]:
301
+ stack.pop(-1)
302
+ while parent:
303
+ if parent.typed[0] == _EventType.PyCall:
304
+ ex0 = parent.typed[1].caller # torch._C._profiler._PyFrameState
305
+ ex1 = parent.typed[1].callsite # torch._C._profiler._PyFrameState
306
+ if (
307
+ _pycall_filter_fn(ex1.file_name)
308
+ or (_pycall_filter_fn(ex0.file_name) and ex1.function_name == "backward")
309
+ ) and ex1.function_name not in {"__torch_dispatch__"}:
310
+ stack.append(ex1.function_name)
311
+ parent = parent.parent
312
+ stack.reverse()
313
+ return "/".join(stack) or "unknown"
314
+
315
+
212
316
  def _repr_tensor_metadata(x) -> Any:
213
317
  """
214
318
  :param x: torch._C._profiler._TensorMetadata or int
@@ -1,2 +0,0 @@
1
- version = '1.20240719.111324'
2
- long_version = '1.20240719.111324+git.12f2abc'