returnn 1.20240718.142037__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.20240718.142037 → returnn-1.20240719.152107}/PKG-INFO +1 -1
  2. returnn-1.20240719.152107/_setup_info_generated.py +2 -0
  3. {returnn-1.20240718.142037 → 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.20240718.142037 → returnn-1.20240719.152107}/returnn.egg-info/PKG-INFO +1 -1
  6. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn.egg-info/SOURCES.txt +2 -0
  7. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_torch_frontend.py +158 -2
  8. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_torch_util.py +4 -131
  9. returnn-1.20240719.152107/tests/torch_utils.py +334 -0
  10. returnn-1.20240718.142037/_setup_info_generated.py +0 -2
  11. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/.editorconfig +0 -0
  12. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/.gitignore +0 -0
  13. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/.gitmodules +0 -0
  14. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/.kateconfig +0 -0
  15. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/CHANGELOG.md +0 -0
  16. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/CODEOWNERS +0 -0
  17. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/CONTRIBUTING.md +0 -0
  18. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/LICENSE +0 -0
  19. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/MANIFEST.in +0 -0
  20. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/README.rst +0 -0
  21. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/__init__.py +0 -0
  22. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/12AX.cluster_map +0 -0
  23. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/_setup_returnn_env.py +0 -0
  24. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-fwd.config +0 -0
  25. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-horovod-mpi.py +0 -0
  26. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-horovod-mpi.py.sh +0 -0
  27. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-horovod-mpi.sh +0 -0
  28. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-hyper-param-tuning.config +0 -0
  29. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-iter-dataset.py +0 -0
  30. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-list-devices.py +0 -0
  31. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-lua-torch-layer.config +0 -0
  32. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-pretrain.config +0 -0
  33. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-record-and-push-to-webserver.py +0 -0
  34. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-returnn-as-framework.py +0 -0
  35. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-rf-pt-benchmark.py +0 -0
  36. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-rf.config +0 -0
  37. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-rhn-enwik8.config +0 -0
  38. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-sprint-interface.py +0 -0
  39. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-att-copy.config +0 -0
  40. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-attention.config +0 -0
  41. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
  42. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
  43. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-enc-dec.config +0 -0
  44. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-hard-att-copy.config +0 -0
  45. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-lstm-benchmark.py +0 -0
  46. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
  47. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
  48. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-native-lstm.12ax.config +0 -0
  49. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-native-lstm2.12ax.config +0 -0
  50. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
  51. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-neural-transducer.12ax.config +0 -0
  52. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-rec-explicit-lstm.config +0 -0
  53. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-rec-explicit-rnn.config +0 -0
  54. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-rec-self-att.config +0 -0
  55. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-search-compiled-graph.py +0 -0
  56. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
  57. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-timit-lstm-ctc.config +0 -0
  58. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-torch.config +0 -0
  59. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
  60. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/demo.sh +0 -0
  61. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
  62. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
  63. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
  64. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/README.txt +0 -0
  65. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/chars.txt +0 -0
  66. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/config_demo +0 -0
  67. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/config_fwd +0 -0
  68. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/config_real +0 -0
  69. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
  70. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/decode.py +0 -0
  71. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
  72. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/go.sh +0 -0
  73. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/lines.txt +0 -0
  74. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/split/eval.txt +0 -0
  75. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/split/train.txt +0 -0
  76. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/IAM/split/valid.txt +0 -0
  77. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/README.md +0 -0
  78. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/artificial/create_test_h5.py +0 -0
  79. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/artificial/forwardconfig +0 -0
  80. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/artificial/go.sh +0 -0
  81. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/artificial/trainconfig +0 -0
  82. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
  83. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
  84. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/artificial_rgb/go.sh +0 -0
  85. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
  86. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/pyproject.toml +0 -0
  87. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/requirements.txt +0 -0
  88. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/__init__.py +0 -0
  89. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/__main__.py +0 -0
  90. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/__old_mod_loader__.py +0 -0
  91. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/__setup__.py +0 -0
  92. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/config.py +0 -0
  93. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/__init__.py +0 -0
  94. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/audio.py +0 -0
  95. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/basic.py +0 -0
  96. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/bundle_file.py +0 -0
  97. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/cached.py +0 -0
  98. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/cached2.py +0 -0
  99. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/distrib_files.py +0 -0
  100. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/generating.py +0 -0
  101. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/hdf.py +0 -0
  102. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/lm.py +0 -0
  103. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/map.py +0 -0
  104. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/meta.py +0 -0
  105. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/multi_proc.py +0 -0
  106. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/normalization_data.py +0 -0
  107. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/numpy_dump.py +0 -0
  108. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/raw_wav.py +0 -0
  109. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/sprint.py +0 -0
  110. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/stereo.py +0 -0
  111. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/util/__init__.py +0 -0
  112. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/util/feature_extraction.py +0 -0
  113. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/util/strings.py +0 -0
  114. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/datasets/util/vocabulary.py +0 -0
  115. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/engine/__init__.py +0 -0
  116. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/engine/base.py +0 -0
  117. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/engine/batch.py +0 -0
  118. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/__init__.py +0 -0
  119. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/__main__.py +0 -0
  120. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/.git +0 -0
  121. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
  122. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
  123. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
  124. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
  125. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
  126. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
  127. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
  128. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
  129. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
  130. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
  131. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
  132. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
  133. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
  134. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
  135. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
  136. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
  137. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
  138. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
  139. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
  140. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
  141. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
  142. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
  143. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
  144. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
  145. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/__init__.py +0 -0
  146. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/graph_editor/README.md +0 -0
  147. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/graph_editor/__init__.py +0 -0
  148. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/graph_editor/edit.py +0 -0
  149. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/graph_editor/reroute.py +0 -0
  150. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/graph_editor/select.py +0 -0
  151. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/graph_editor/subgraph.py +0 -0
  152. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/graph_editor/transform.py +0 -0
  153. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/extern/graph_editor/util.py +0 -0
  154. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/forward_iface.py +0 -0
  155. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/__init__.py +0 -0
  156. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_backend.py +0 -0
  157. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_native/__init__.py +0 -0
  158. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_native/backend.cpp +0 -0
  159. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_native/backend.hpp +0 -0
  160. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_native/module.cpp +0 -0
  161. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_native/module.hpp +0 -0
  162. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_native/py_utils.hpp +0 -0
  163. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_native/tensor_ops.cpp +0 -0
  164. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_native/tensor_ops.hpp +0 -0
  165. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_numpy_backend.py +0 -0
  166. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_random_journal.py +0 -0
  167. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/_utils.py +0 -0
  168. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/array_.py +0 -0
  169. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/attention.py +0 -0
  170. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/audio/__init__.py +0 -0
  171. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/audio/mel.py +0 -0
  172. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/audio/specaugment.py +0 -0
  173. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/backend.py +0 -0
  174. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/build_from_dict.py +0 -0
  175. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/cond.py +0 -0
  176. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/const.py +0 -0
  177. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/container.py +0 -0
  178. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/control_flow_ctx.py +0 -0
  179. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/conv.py +0 -0
  180. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/decoder/__init__.py +0 -0
  181. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/decoder/transformer.py +0 -0
  182. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/device.py +0 -0
  183. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/dims.py +0 -0
  184. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/dropout.py +0 -0
  185. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/dtype.py +0 -0
  186. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/encoder/__init__.py +0 -0
  187. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/encoder/base.py +0 -0
  188. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/encoder/conformer.py +0 -0
  189. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/gradient.py +0 -0
  190. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/graph.py +0 -0
  191. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/hooks.py +0 -0
  192. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/init.py +0 -0
  193. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/label_smoothing.py +0 -0
  194. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/linear.py +0 -0
  195. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/loop.py +0 -0
  196. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/loss.py +0 -0
  197. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/math_.py +0 -0
  198. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/matmul.py +0 -0
  199. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/module.py +0 -0
  200. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/normalization.py +0 -0
  201. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/parameter.py +0 -0
  202. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/parametrizations.py +0 -0
  203. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/parametrize.py +0 -0
  204. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/piecewise_linear.py +0 -0
  205. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/rand.py +0 -0
  206. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/rec.py +0 -0
  207. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/reduce.py +0 -0
  208. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/run_ctx.py +0 -0
  209. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/signal.py +0 -0
  210. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/state.py +0 -0
  211. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/stepwise_scheduler.py +0 -0
  212. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/tensor_array.py +0 -0
  213. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/frontend/types.py +0 -0
  214. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/import_/__init__.py +0 -0
  215. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/import_/common.py +0 -0
  216. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/import_/git.py +0 -0
  217. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/import_/import_.py +0 -0
  218. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/learning_rate_control.py +0 -0
  219. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/log.py +0 -0
  220. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/native_op.cpp +0 -0
  221. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/native_op.py +0 -0
  222. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/pretrain.py +0 -0
  223. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/sprint/__init__.py +0 -0
  224. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/sprint/cache.py +0 -0
  225. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/sprint/control.py +0 -0
  226. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/sprint/error_signals.py +0 -0
  227. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/sprint/extern_interface.py +0 -0
  228. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/sprint/interface.py +0 -0
  229. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/README.md +0 -0
  230. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/__init__.py +0 -0
  231. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/_dim_extra.py +0 -0
  232. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/_tensor_extra.py +0 -0
  233. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/_tensor_mixin_base.py +0 -0
  234. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/_tensor_op_overloads.py +0 -0
  235. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/control_flow_ctx.py +0 -0
  236. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/dim.py +0 -0
  237. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/marked_dim.py +0 -0
  238. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/tensor.py +0 -0
  239. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/tensor_dict.py +0 -0
  240. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tensor/utils.py +0 -0
  241. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/__init__.py +0 -0
  242. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/compat.py +0 -0
  243. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/data_pipeline.py +0 -0
  244. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/distributed.py +0 -0
  245. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/engine.py +0 -0
  246. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/README.md +0 -0
  247. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/__init__.py +0 -0
  248. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/_backend.py +0 -0
  249. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/_utils.py +0 -0
  250. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/cond.py +0 -0
  251. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
  252. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
  253. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/dims.py +0 -0
  254. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/layer.py +0 -0
  255. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/loop.py +0 -0
  256. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/make_layer.py +0 -0
  257. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/masked_computation.py +0 -0
  258. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
  259. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
  260. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_low_level/__init__.py +0 -0
  261. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/frontend_low_level/_backend.py +0 -0
  262. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/horovod.py +0 -0
  263. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/hyper_param_tuning.py +0 -0
  264. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/layers/__init__.py +0 -0
  265. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/layers/base.py +0 -0
  266. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/layers/basic.py +0 -0
  267. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/layers/rec.py +0 -0
  268. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/layers/segmental_model.py +0 -0
  269. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/layers/signal_processing.py +0 -0
  270. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/layers/variable.py +0 -0
  271. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/native_op.py +0 -0
  272. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/network.py +0 -0
  273. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/sprint.py +0 -0
  274. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/updater.py +0 -0
  275. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/util/__init__.py +0 -0
  276. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/util/basic.py +0 -0
  277. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/util/data.py +0 -0
  278. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/util/gradient_checkpoint.py +0 -0
  279. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/util/ken_lm.py +0 -0
  280. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/tf/util/open_fst.py +0 -0
  281. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/README.md +0 -0
  282. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/__init__.py +0 -0
  283. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/data/__init__.py +0 -0
  284. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/data/extern_data.py +0 -0
  285. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/data/pipeline.py +0 -0
  286. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/data/queued_data_iter.py +0 -0
  287. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
  288. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/data/tensor_utils.py +0 -0
  289. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/distributed.py +0 -0
  290. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/engine.py +0 -0
  291. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/frontend/__init__.py +0 -0
  292. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/frontend/_rand.py +0 -0
  293. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/frontend/bridge.py +0 -0
  294. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/frontend/raw_ops.py +0 -0
  295. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/updater.py +0 -0
  296. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/util/README.md +0 -0
  297. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/util/__init__.py +0 -0
  298. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/util/diagnose_gpu.py +0 -0
  299. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/util/gradient_checkpoint.py +0 -0
  300. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/torch/util/scaled_gradient.py +0 -0
  301. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/__init__.py +0 -0
  302. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/basic.py +0 -0
  303. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/better_exchook.py +0 -0
  304. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/bpe.py +0 -0
  305. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/debug.py +0 -0
  306. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/debug_helpers.py +0 -0
  307. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/file_cache.py +0 -0
  308. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/fsa.py +0 -0
  309. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/literal_py_to_pickle.py +0 -0
  310. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/math.py +0 -0
  311. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
  312. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/native_code_compiler.py +0 -0
  313. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/pprint.py +0 -0
  314. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/py-to-pickle.cpp +0 -0
  315. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/py_compat.py +0 -0
  316. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/py_ext_mod_compiler.py +0 -0
  317. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/result_with_reason.py +0 -0
  318. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/sig_proc.py +0 -0
  319. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/task_system.py +0 -0
  320. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/train_proc_manager.py +0 -0
  321. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn/util/watch_memory.py +0 -0
  322. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn.egg-info/dependency_links.txt +0 -0
  323. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/returnn.egg-info/top_level.txt +0 -0
  324. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/rnn.py +0 -0
  325. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/setup.cfg +0 -0
  326. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/setup.py +0 -0
  327. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/DummySprintExec.py +0 -0
  328. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm-inspection-profile.xml +0 -0
  329. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/.gitignore +0 -0
  330. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/.name +0 -0
  331. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
  332. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
  333. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
  334. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
  335. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
  336. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/misc.xml +0 -0
  337. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/modules.xml +0 -0
  338. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/returnn.iml +0 -0
  339. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
  340. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/_set_num_threads1.py +0 -0
  341. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/_setup_returnn_env.py +0 -0
  342. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/_setup_test_env.py +0 -0
  343. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/bpe-unicode-demo.codes +0 -0
  344. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/bpe-unicode-demo.vocab +0 -0
  345. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/lexicon_opt.fst +0 -0
  346. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/lexicon_opt.isyms +0 -0
  347. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/lexicon_opt.jpg +0 -0
  348. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/lexicon_opt.osyms +0 -0
  349. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/lint_common.py +0 -0
  350. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/pycharm-inspect.py +0 -0
  351. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/pylint.py +0 -0
  352. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/returnn-as-framework.py +0 -0
  353. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/rf_utils.py +0 -0
  354. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/spelling.dic +0 -0
  355. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_Config.py +0 -0
  356. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_Dataset.py +0 -0
  357. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_Fsa.py +0 -0
  358. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_GeneratingDataset.py +0 -0
  359. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_HDFDataset.py +0 -0
  360. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_LearningRateControl.py +0 -0
  361. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_Log.py +0 -0
  362. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_MultiProcDataset.py +0 -0
  363. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_Pretrain.py +0 -0
  364. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_ResNet.py +0 -0
  365. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_SprintDataset.py +0 -0
  366. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_SprintInterface.py +0 -0
  367. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TFEngine.py +0 -0
  368. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TFNativeOp.py +0 -0
  369. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TFNetworkLayer.py +0 -0
  370. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TFNetworkRecLayer.py +0 -0
  371. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TFNetworkSigProcLayer.py +0 -0
  372. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TFUpdater.py +0 -0
  373. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TFUtil.py +0 -0
  374. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TF_determinism.py +0 -0
  375. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TaskSystem.py +0 -0
  376. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TaskSystem_SharedMem.py +0 -0
  377. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_TranslationDataset.py +0 -0
  378. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_Util.py +0 -0
  379. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_demos.py +0 -0
  380. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_fork_exec.py +0 -0
  381. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_hdf_dump.py +0 -0
  382. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_array.py +0 -0
  383. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_attention.py +0 -0
  384. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_base.py +0 -0
  385. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_cond.py +0 -0
  386. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_const.py +0 -0
  387. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_container.py +0 -0
  388. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_conv.py +0 -0
  389. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_encoder_conformer.py +0 -0
  390. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_gradient.py +0 -0
  391. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_label_smoothing.py +0 -0
  392. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_loop.py +0 -0
  393. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_math.py +0 -0
  394. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_normalization.py +0 -0
  395. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_piecewise_linear.py +0 -0
  396. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_rec.py +0 -0
  397. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_reduce.py +0 -0
  398. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_rf_signal.py +0 -0
  399. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_tensor.py +0 -0
  400. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_tools.py +0 -0
  401. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_torch_dataset.py +0 -0
  402. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_torch_engine.py +0 -0
  403. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tests/test_torch_internal_frontend.py +0 -0
  404. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/_setup_returnn_env.py +0 -0
  405. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/analyze-dataset-batches.py +0 -0
  406. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/bliss-collect-seq-lens.py +0 -0
  407. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/bliss-dump-text.py +0 -0
  408. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/bliss-get-segment-names.py +0 -0
  409. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/bliss-to-ogg-zip.py +0 -0
  410. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/bpe-create-lexicon.py +0 -0
  411. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/calculate-word-error-rate.py +0 -0
  412. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/cleanup-old-models.py +0 -0
  413. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/collect-orth-symbols.py +0 -0
  414. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/collect-words.py +0 -0
  415. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/compile_native_op.py +0 -0
  416. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/compile_tf_graph.py +0 -0
  417. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/debug-dump-search-scores.py +0 -0
  418. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/debug-plot-search-scores.py +0 -0
  419. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/dump-dataset-raw-strings.py +0 -0
  420. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/dump-dataset.py +0 -0
  421. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/dump-forward-stats.py +0 -0
  422. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/dump-forward.py +0 -0
  423. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/dump-network-json.py +0 -0
  424. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/dump-pickle.py +0 -0
  425. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/extract_state_tying_from_dataset.py +0 -0
  426. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/get-attention-weights.py +0 -0
  427. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/get-best-model-epoch.py +0 -0
  428. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/hdf_dump.py +0 -0
  429. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/hdf_dump_translation_dataset.py +0 -0
  430. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/import-blocks-mt-model.py +0 -0
  431. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/import-t2t-mt-model.py +0 -0
  432. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/.gitignore +0 -0
  433. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/Makefile +0 -0
  434. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/README.md +0 -0
  435. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/README.md +0 -0
  436. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/libs_list +0 -0
  437. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
  438. {returnn-1.20240718.142037 → 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.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
  440. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/state_vars_list +0 -0
  441. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/example/tensor_names_list +0 -0
  442. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/file.h +0 -0
  443. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
  444. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
  445. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/main.cc +0 -0
  446. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/rescorer.h +0 -0
  447. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/vocabulary.cc +0 -0
  448. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/lattice_rescorer/vocabulary.h +0 -0
  449. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/tf_avg_checkpoints.py +0 -0
  450. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/tf_inspect_checkpoint.py +0 -0
  451. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/tf_inspect_summary_log.py +0 -0
  452. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/torch_avg_checkpoints.py +0 -0
  453. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/torch_export_to_onnx.py +0 -0
  454. {returnn-1.20240718.142037 → returnn-1.20240719.152107}/tools/torch_inspect_checkpoint.py +0 -0
  455. {returnn-1.20240718.142037 → 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.20240718.142037
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.20240718.142037
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
@@ -385,6 +386,7 @@ tests/test_torch_engine.py
385
386
  tests/test_torch_frontend.py
386
387
  tests/test_torch_internal_frontend.py
387
388
  tests/test_torch_util.py
389
+ tests/torch_utils.py
388
390
  tests/PyCharm.idea/.gitignore
389
391
  tests/PyCharm.idea/.name
390
392
  tests/PyCharm.idea/codeStyleSettings.xml
@@ -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)
@@ -11,6 +11,8 @@ import sys
11
11
  import unittest
12
12
  import torch
13
13
 
14
+ from torch_utils import report_profile
15
+
14
16
  from returnn.util import better_exchook
15
17
 
16
18
 
@@ -62,7 +64,7 @@ def test_gradient_checkpoint_scope():
62
64
  b = 4 # size single f32
63
65
  t = shape[0] * shape[1] * b # size tensor
64
66
  r = rng_state.numel() * rng_state.element_size()
65
- _report_profile(
67
+ report_profile(
66
68
  prof,
67
69
  [
68
70
  # ignore private calls
@@ -95,7 +97,7 @@ def test_gradient_checkpoint_scope():
95
97
  with profile(activities=[ProfilerActivity.CPU], profile_memory=True, with_stack=True, record_shapes=True) as prof:
96
98
  with record_function("train_step_grad_ckpt"):
97
99
  model.demo_run()
98
- _report_profile(
100
+ report_profile(
99
101
  prof,
100
102
  [
101
103
  ("pycall", {"callsite_name": "demo_run"}),
@@ -245,135 +247,6 @@ def test_saved_tensors_hooks_gc_segfault():
245
247
  x.sum().backward()
246
248
 
247
249
 
248
- def _report_profile(prof: torch.profiler.profiler, check_events=(), *, _size_threshold=100):
249
- # Note: I tried prof.events(), prof.profiler.kineto_results.events(), prof._memory_profile().timeline,
250
- # but they all are not really giving me the information I want.
251
- # Either the Python stack is missing, or the memory information is incomplete,
252
- # or the Python/TorchOp events are missing.
253
- # The only complete information source seems to be prof.profiler.kineto_results.experimental_event_tree().
254
-
255
- import fnmatch
256
-
257
- # noinspection PyProtectedMember
258
- from torch.profiler._utils import traverse_dfs
259
- from torch._C._profiler import _EventType # noqa
260
-
261
- _allocs = {} # id -> dict with "size", "name"
262
- check_events = list(check_events)
263
-
264
- def _ev_visit(ev):
265
- # ev: torch._C._profiler._ProfilerEvent
266
- if ev.typed[0] == _EventType.Allocation:
267
- ex = ev.typed[1] # torch._C._profiler._ExtraFields_Allocation
268
- # ex.id/ex.allocation_id/ex.ptr redundant?
269
- if ex.allocation_id in _allocs:
270
- ev_name = "dealloc" # deallocation
271
- assert _allocs[ex.allocation_id]["size"] == -ex.alloc_size
272
- name = _allocs[ex.allocation_id]["name"]
273
- del _allocs[ex.allocation_id]
274
- else:
275
- ev_name = "alloc"
276
- assert ex.alloc_size > 0
277
- assert ev.parent
278
- name = _ctx(ev.parent)
279
- _allocs[ex.allocation_id] = {"size": ex.alloc_size, "name": name}
280
- opts = {"id": ex.allocation_id, "name": name, "size": ex.alloc_size, "total_alloc": ex.total_allocated}
281
- elif ev.typed[0] == _EventType.TorchOp:
282
- ev_name = "torchop"
283
- ex = ev.typed[1] # torch._C._profiler._ExtraFields_TorchOp
284
- opts = {"name": ex.name}
285
- elif ev.typed[0] == _EventType.PyCall:
286
- ev_name = "pycall"
287
- ex = ev.typed[1] # torch._C._profiler._ExtraFields_PyCall
288
- ex0 = ex.caller # torch._C._profiler._PyFrameState
289
- ex1 = ex.callsite # torch._C._profiler._PyFrameState
290
- if _pycall_filter_fn(ex0.file_name) or _pycall_filter_fn(ex1.file_name):
291
- opts = {
292
- "caller_loc": f"{ex0.file_name}:{ex0.line_number}",
293
- "caller_name": ex0.function_name,
294
- "callsite_name": ex1.function_name,
295
- }
296
- else:
297
- return
298
- else:
299
- return
300
-
301
- next_check = check_events[0] if check_events else None
302
- if next_check:
303
- next_check_name, next_check_opts = next_check
304
- if ev_name == next_check_name:
305
- for k, v in next_check_opts.items():
306
- if isinstance(v, str) and "*" in v:
307
- if not fnmatch.fnmatch(opts[k], v):
308
- mismatch = f"Pattern mismatch: {opts[k]} vs {v}"
309
- break
310
- elif k == "total_alloc":
311
- if abs(opts[k] - v) >= _size_threshold:
312
- mismatch = f"Size mismatch: {opts[k]} vs {v}"
313
- break
314
- elif opts[k] != v:
315
- mismatch = f"Value mismatch: {opts[k]} vs {v}"
316
- break
317
- else:
318
- mismatch = None
319
- else:
320
- mismatch = f"Different event: {ev_name} vs {next_check_name}"
321
- else:
322
- mismatch = "No check event"
323
-
324
- if ev_name in {"alloc", "dealloc"} and abs(opts["size"]) >= _size_threshold:
325
- assert not mismatch, f"Event not matched: {ev_name} {opts} to {next_check}: {mismatch}"
326
-
327
- if not mismatch:
328
- print(f"{ev_name} {opts} ✓")
329
- check_events.pop(0)
330
- else:
331
- print(f"({ev_name} {opts})")
332
-
333
- def _ctx(ev) -> str:
334
- stack = [None]
335
- parent = ev
336
- while parent and parent.typed[0] == _EventType.TorchOp: # go to top torch op
337
- stack[-1] = parent.typed[1].name
338
- parent = parent.parent
339
- if not stack[-1] and parent.typed[0] == _EventType.PyCCall:
340
- stack[-1] = parent.typed[1].caller.function_name
341
- parent = parent.parent
342
- if not stack[-1]:
343
- stack.pop(-1)
344
- while parent:
345
- if parent.typed[0] == _EventType.PyCall:
346
- ex0 = parent.typed[1].caller # torch._C._profiler._PyFrameState
347
- ex1 = parent.typed[1].callsite # torch._C._profiler._PyFrameState
348
- if (
349
- _pycall_filter_fn(ex1.file_name)
350
- or (_pycall_filter_fn(ex0.file_name) and ex1.function_name == "backward")
351
- ) and ex1.function_name not in {"__torch_dispatch__"}:
352
- stack.append(ex1.function_name)
353
- parent = parent.parent
354
- stack.reverse()
355
- return "/".join(stack) or "unknown"
356
-
357
- for ev_ in sorted(
358
- traverse_dfs(prof.profiler.kineto_results.experimental_event_tree()), key=lambda ev: ev.start_time_ns
359
- ):
360
- # ev: torch._C._profiler._ProfilerEvent
361
- _ev_visit(ev_)
362
-
363
- assert not _allocs, f"Remaining allocs: {_allocs}"
364
- assert not check_events, f"Remaining check events: {check_events}"
365
-
366
-
367
- def _pycall_filter_fn(filename: str) -> bool:
368
- assert not filename.startswith("/") # currently the case...
369
- if os.path.basename(filename) == os.path.basename(__file__):
370
- assert "/" not in filename # currently the case...
371
- return True
372
- if filename.startswith("returnn/"):
373
- return True
374
- return False
375
-
376
-
377
250
  if __name__ == "__main__":
378
251
  better_exchook.install()
379
252
  if len(sys.argv) <= 1: