returnn 1.20241105.131828__tar.gz → 1.20241106.173429__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 (468) hide show
  1. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/PKG-INFO +1 -1
  2. returnn-1.20241106.173429/_setup_info_generated.py +2 -0
  3. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/array_.py +11 -0
  4. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/rand.py +20 -15
  5. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/learning_rate_control.py +2 -2
  6. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/data/returnn_dataset_wrapper.py +8 -1
  7. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/engine.py +61 -29
  8. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/basic.py +32 -38
  9. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/math.py +18 -1
  10. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn.egg-info/PKG-INFO +1 -1
  11. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_demos.py +3 -0
  12. returnn-1.20241105.131828/_setup_info_generated.py +0 -2
  13. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/.editorconfig +0 -0
  14. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/.gitignore +0 -0
  15. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/.gitmodules +0 -0
  16. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/.kateconfig +0 -0
  17. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/CHANGELOG.md +0 -0
  18. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/CODEOWNERS +0 -0
  19. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/CONTRIBUTING.md +0 -0
  20. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/LICENSE +0 -0
  21. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/MANIFEST.in +0 -0
  22. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/README.rst +0 -0
  23. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/__init__.py +0 -0
  24. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/12AX.cluster_map +0 -0
  25. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/_setup_returnn_env.py +0 -0
  26. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-fwd.config +0 -0
  27. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-horovod-mpi.py +0 -0
  28. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-horovod-mpi.py.sh +0 -0
  29. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-horovod-mpi.sh +0 -0
  30. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-hyper-param-tuning.config +0 -0
  31. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-iter-dataset.py +0 -0
  32. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-list-devices.py +0 -0
  33. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-lua-torch-layer.config +0 -0
  34. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-pretrain.config +0 -0
  35. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-record-and-push-to-webserver.py +0 -0
  36. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-returnn-as-framework.py +0 -0
  37. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-rf-pt-benchmark.py +0 -0
  38. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-rf.config +0 -0
  39. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-rhn-enwik8.config +0 -0
  40. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-sprint-interface.py +0 -0
  41. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-att-copy.config +0 -0
  42. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-attention.config +0 -0
  43. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
  44. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
  45. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-enc-dec.config +0 -0
  46. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-hard-att-copy.config +0 -0
  47. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-lstm-benchmark.py +0 -0
  48. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
  49. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
  50. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-native-lstm.12ax.config +0 -0
  51. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-native-lstm2.12ax.config +0 -0
  52. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
  53. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-neural-transducer.12ax.config +0 -0
  54. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-rec-explicit-lstm.config +0 -0
  55. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-rec-explicit-rnn.config +0 -0
  56. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-rec-self-att.config +0 -0
  57. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-search-compiled-graph.py +0 -0
  58. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
  59. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-timit-lstm-ctc.config +0 -0
  60. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-torch.config +0 -0
  61. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
  62. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/demo.sh +0 -0
  63. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
  64. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
  65. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
  66. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/README.txt +0 -0
  67. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/chars.txt +0 -0
  68. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/config_demo +0 -0
  69. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/config_fwd +0 -0
  70. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/config_real +0 -0
  71. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
  72. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/decode.py +0 -0
  73. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
  74. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/go.sh +0 -0
  75. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/lines.txt +0 -0
  76. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/split/eval.txt +0 -0
  77. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/split/train.txt +0 -0
  78. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/IAM/split/valid.txt +0 -0
  79. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/README.md +0 -0
  80. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/artificial/create_test_h5.py +0 -0
  81. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/artificial/forwardconfig +0 -0
  82. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/artificial/go.sh +0 -0
  83. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/artificial/trainconfig +0 -0
  84. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
  85. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
  86. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/artificial_rgb/go.sh +0 -0
  87. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
  88. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/pyproject.toml +0 -0
  89. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/requirements.txt +0 -0
  90. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/__init__.py +0 -0
  91. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/__main__.py +0 -0
  92. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/__old_mod_loader__.py +0 -0
  93. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/__setup__.py +0 -0
  94. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/config.py +0 -0
  95. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/__init__.py +0 -0
  96. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/audio.py +0 -0
  97. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/basic.py +0 -0
  98. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/bundle_file.py +0 -0
  99. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/cached.py +0 -0
  100. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/cached2.py +0 -0
  101. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/distrib_files.py +0 -0
  102. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/generating.py +0 -0
  103. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/hdf.py +0 -0
  104. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/lm.py +0 -0
  105. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/map.py +0 -0
  106. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/meta.py +0 -0
  107. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/multi_proc.py +0 -0
  108. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/normalization_data.py +0 -0
  109. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/numpy_dump.py +0 -0
  110. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/postprocessing.py +0 -0
  111. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/raw_wav.py +0 -0
  112. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/sprint.py +0 -0
  113. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/stereo.py +0 -0
  114. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/util/__init__.py +0 -0
  115. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/util/feature_extraction.py +0 -0
  116. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/util/strings.py +0 -0
  117. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/datasets/util/vocabulary.py +0 -0
  118. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/engine/__init__.py +0 -0
  119. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/engine/base.py +0 -0
  120. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/engine/batch.py +0 -0
  121. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/__init__.py +0 -0
  122. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/__main__.py +0 -0
  123. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/.git +0 -0
  124. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
  125. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
  126. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
  127. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
  128. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
  129. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
  130. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
  131. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
  132. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
  133. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
  134. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
  135. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
  136. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
  137. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
  138. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
  139. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
  140. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
  141. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
  142. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
  143. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
  144. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
  145. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
  146. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
  147. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
  148. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/__init__.py +0 -0
  149. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/graph_editor/README.md +0 -0
  150. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/graph_editor/__init__.py +0 -0
  151. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/graph_editor/edit.py +0 -0
  152. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/graph_editor/reroute.py +0 -0
  153. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/graph_editor/select.py +0 -0
  154. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/graph_editor/subgraph.py +0 -0
  155. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/graph_editor/transform.py +0 -0
  156. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/extern/graph_editor/util.py +0 -0
  157. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/forward_iface.py +0 -0
  158. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/__init__.py +0 -0
  159. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_backend.py +0 -0
  160. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_native/__init__.py +0 -0
  161. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_native/backend.cpp +0 -0
  162. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_native/backend.hpp +0 -0
  163. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_native/module.cpp +0 -0
  164. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_native/module.hpp +0 -0
  165. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_native/py_utils.hpp +0 -0
  166. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_native/tensor_ops.cpp +0 -0
  167. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_native/tensor_ops.hpp +0 -0
  168. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_numpy_backend.py +0 -0
  169. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_random_journal.py +0 -0
  170. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/_utils.py +0 -0
  171. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/attention.py +0 -0
  172. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/audio/__init__.py +0 -0
  173. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/audio/mel.py +0 -0
  174. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/audio/specaugment.py +0 -0
  175. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/backend.py +0 -0
  176. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/build_from_dict.py +0 -0
  177. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/cond.py +0 -0
  178. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/const.py +0 -0
  179. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/container.py +0 -0
  180. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/control_flow_ctx.py +0 -0
  181. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/conv.py +0 -0
  182. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/conversions/__init__.py +0 -0
  183. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/conversions/espnet_e_branchformer.py +0 -0
  184. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/conversions/hf_llama.py +0 -0
  185. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/conversions/torch_nn.py +0 -0
  186. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/decoder/__init__.py +0 -0
  187. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/decoder/transformer.py +0 -0
  188. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/device.py +0 -0
  189. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/dims.py +0 -0
  190. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/dropout.py +0 -0
  191. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/dtype.py +0 -0
  192. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/encoder/__init__.py +0 -0
  193. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/encoder/base.py +0 -0
  194. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/encoder/conformer.py +0 -0
  195. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/encoder/e_branchformer.py +0 -0
  196. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/encoder/transformer.py +0 -0
  197. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/gradient.py +0 -0
  198. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/graph.py +0 -0
  199. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/hooks.py +0 -0
  200. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/init.py +0 -0
  201. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/label_smoothing.py +0 -0
  202. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/linear.py +0 -0
  203. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/loop.py +0 -0
  204. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/loss.py +0 -0
  205. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/math_.py +0 -0
  206. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/matmul.py +0 -0
  207. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/module.py +0 -0
  208. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/normalization.py +0 -0
  209. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/parameter.py +0 -0
  210. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/parametrizations.py +0 -0
  211. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/parametrize.py +0 -0
  212. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/piecewise_linear.py +0 -0
  213. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/rec.py +0 -0
  214. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/reduce.py +0 -0
  215. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/run_ctx.py +0 -0
  216. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/signal.py +0 -0
  217. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/state.py +0 -0
  218. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/stepwise_scheduler.py +0 -0
  219. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/tensor_array.py +0 -0
  220. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/frontend/types.py +0 -0
  221. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/import_/__init__.py +0 -0
  222. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/import_/common.py +0 -0
  223. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/import_/git.py +0 -0
  224. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/import_/import_.py +0 -0
  225. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/log.py +0 -0
  226. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/native_op.cpp +0 -0
  227. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/native_op.py +0 -0
  228. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/pretrain.py +0 -0
  229. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/sprint/__init__.py +0 -0
  230. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/sprint/cache.py +0 -0
  231. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/sprint/control.py +0 -0
  232. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/sprint/error_signals.py +0 -0
  233. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/sprint/extern_interface.py +0 -0
  234. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/sprint/interface.py +0 -0
  235. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/README.md +0 -0
  236. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/__init__.py +0 -0
  237. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/_dim_extra.py +0 -0
  238. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/_tensor_extra.py +0 -0
  239. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/_tensor_mixin_base.py +0 -0
  240. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/_tensor_op_overloads.py +0 -0
  241. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/control_flow_ctx.py +0 -0
  242. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/dim.py +0 -0
  243. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/marked_dim.py +0 -0
  244. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/tensor.py +0 -0
  245. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/tensor_dict.py +0 -0
  246. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tensor/utils.py +0 -0
  247. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/__init__.py +0 -0
  248. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/compat.py +0 -0
  249. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/data_pipeline.py +0 -0
  250. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/distributed.py +0 -0
  251. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/engine.py +0 -0
  252. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/README.md +0 -0
  253. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/__init__.py +0 -0
  254. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/_backend.py +0 -0
  255. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/_utils.py +0 -0
  256. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/cond.py +0 -0
  257. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
  258. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
  259. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/dims.py +0 -0
  260. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/layer.py +0 -0
  261. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/loop.py +0 -0
  262. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/make_layer.py +0 -0
  263. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/masked_computation.py +0 -0
  264. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
  265. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
  266. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_low_level/__init__.py +0 -0
  267. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/frontend_low_level/_backend.py +0 -0
  268. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/horovod.py +0 -0
  269. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/hyper_param_tuning.py +0 -0
  270. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/layers/__init__.py +0 -0
  271. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/layers/base.py +0 -0
  272. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/layers/basic.py +0 -0
  273. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/layers/rec.py +0 -0
  274. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/layers/segmental_model.py +0 -0
  275. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/layers/signal_processing.py +0 -0
  276. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/layers/variable.py +0 -0
  277. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/native_op.py +0 -0
  278. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/network.py +0 -0
  279. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/sprint.py +0 -0
  280. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/updater.py +0 -0
  281. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/util/__init__.py +0 -0
  282. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/util/basic.py +0 -0
  283. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/util/data.py +0 -0
  284. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/util/gradient_checkpoint.py +0 -0
  285. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/util/ken_lm.py +0 -0
  286. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/tf/util/open_fst.py +0 -0
  287. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/README.md +0 -0
  288. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/__init__.py +0 -0
  289. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/data/__init__.py +0 -0
  290. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/data/extern_data.py +0 -0
  291. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/data/pipeline.py +0 -0
  292. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/data/queued_data_iter.py +0 -0
  293. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/data/tensor_utils.py +0 -0
  294. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/distributed.py +0 -0
  295. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/frontend/__init__.py +0 -0
  296. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/frontend/_backend.py +0 -0
  297. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/frontend/_rand.py +0 -0
  298. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/frontend/bridge.py +0 -0
  299. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/frontend/raw_ops.py +0 -0
  300. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/optim/README.md +0 -0
  301. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/optim/__init__.py +0 -0
  302. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/optim/lion.py +0 -0
  303. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/updater.py +0 -0
  304. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/util/README.md +0 -0
  305. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/util/__init__.py +0 -0
  306. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/util/array_.py +0 -0
  307. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/util/diagnose_gpu.py +0 -0
  308. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/util/exception_helper.py +0 -0
  309. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/util/gradient_checkpoint.py +0 -0
  310. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/util/module.py +0 -0
  311. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/torch/util/scaled_gradient.py +0 -0
  312. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/__init__.py +0 -0
  313. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/better_exchook.py +0 -0
  314. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/bpe.py +0 -0
  315. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/debug.py +0 -0
  316. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/debug_helpers.py +0 -0
  317. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/file_cache.py +0 -0
  318. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/fsa.py +0 -0
  319. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/literal_py_to_pickle.py +0 -0
  320. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
  321. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/native_code_compiler.py +0 -0
  322. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/pprint.py +0 -0
  323. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/py-to-pickle.cpp +0 -0
  324. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/py_compat.py +0 -0
  325. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/py_ext_mod_compiler.py +0 -0
  326. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/result_with_reason.py +0 -0
  327. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/sig_proc.py +0 -0
  328. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/task_system.py +0 -0
  329. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/train_proc_manager.py +0 -0
  330. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn/util/watch_memory.py +0 -0
  331. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn.egg-info/SOURCES.txt +0 -0
  332. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn.egg-info/dependency_links.txt +0 -0
  333. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/returnn.egg-info/top_level.txt +0 -0
  334. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/rnn.py +0 -0
  335. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/setup.cfg +0 -0
  336. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/setup.py +0 -0
  337. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/DummySprintExec.py +0 -0
  338. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm-inspection-profile.xml +0 -0
  339. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/.gitignore +0 -0
  340. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/.name +0 -0
  341. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
  342. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
  343. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
  344. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
  345. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
  346. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/misc.xml +0 -0
  347. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/modules.xml +0 -0
  348. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/returnn.iml +0 -0
  349. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
  350. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/_set_num_threads1.py +0 -0
  351. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/_setup_returnn_env.py +0 -0
  352. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/_setup_test_env.py +0 -0
  353. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/bpe-unicode-demo.codes +0 -0
  354. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/bpe-unicode-demo.vocab +0 -0
  355. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/lexicon_opt.fst +0 -0
  356. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/lexicon_opt.isyms +0 -0
  357. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/lexicon_opt.jpg +0 -0
  358. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/lexicon_opt.osyms +0 -0
  359. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/lint_common.py +0 -0
  360. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/pycharm-inspect.py +0 -0
  361. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/pylint.py +0 -0
  362. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/returnn-as-framework.py +0 -0
  363. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/rf_utils.py +0 -0
  364. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/spelling.dic +0 -0
  365. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_Config.py +0 -0
  366. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_Dataset.py +0 -0
  367. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_Fsa.py +0 -0
  368. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_GeneratingDataset.py +0 -0
  369. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_HDFDataset.py +0 -0
  370. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_LearningRateControl.py +0 -0
  371. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_Log.py +0 -0
  372. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_MultiProcDataset.py +0 -0
  373. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_Pretrain.py +0 -0
  374. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_ResNet.py +0 -0
  375. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_SprintDataset.py +0 -0
  376. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_SprintInterface.py +0 -0
  377. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TFEngine.py +0 -0
  378. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TFNativeOp.py +0 -0
  379. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TFNetworkLayer.py +0 -0
  380. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TFNetworkRecLayer.py +0 -0
  381. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TFNetworkSigProcLayer.py +0 -0
  382. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TFUpdater.py +0 -0
  383. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TFUtil.py +0 -0
  384. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TF_determinism.py +0 -0
  385. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TaskSystem.py +0 -0
  386. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TaskSystem_SharedMem.py +0 -0
  387. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_TranslationDataset.py +0 -0
  388. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_Util.py +0 -0
  389. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_fork_exec.py +0 -0
  390. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_hdf_dump.py +0 -0
  391. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_array.py +0 -0
  392. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_attention.py +0 -0
  393. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_base.py +0 -0
  394. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_cond.py +0 -0
  395. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_const.py +0 -0
  396. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_container.py +0 -0
  397. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_conv.py +0 -0
  398. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_decoder_transformer.py +0 -0
  399. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_encoder_conformer.py +0 -0
  400. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_gradient.py +0 -0
  401. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_label_smoothing.py +0 -0
  402. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_loop.py +0 -0
  403. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_math.py +0 -0
  404. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_normalization.py +0 -0
  405. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_piecewise_linear.py +0 -0
  406. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_rec.py +0 -0
  407. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_reduce.py +0 -0
  408. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_rf_signal.py +0 -0
  409. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_tensor.py +0 -0
  410. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_tools.py +0 -0
  411. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_torch_dataset.py +0 -0
  412. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_torch_engine.py +0 -0
  413. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_torch_frontend.py +0 -0
  414. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_torch_internal_frontend.py +0 -0
  415. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/test_torch_util.py +0 -0
  416. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tests/torch_utils.py +0 -0
  417. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/_setup_returnn_env.py +0 -0
  418. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/analyze-dataset-batches.py +0 -0
  419. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/bliss-collect-seq-lens.py +0 -0
  420. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/bliss-dump-text.py +0 -0
  421. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/bliss-get-segment-names.py +0 -0
  422. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/bliss-to-ogg-zip.py +0 -0
  423. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/bpe-create-lexicon.py +0 -0
  424. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/calculate-word-error-rate.py +0 -0
  425. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/cleanup-old-models.py +0 -0
  426. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/collect-orth-symbols.py +0 -0
  427. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/collect-words.py +0 -0
  428. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/compile_native_op.py +0 -0
  429. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/compile_tf_graph.py +0 -0
  430. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/debug-dump-search-scores.py +0 -0
  431. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/debug-plot-search-scores.py +0 -0
  432. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/dump-dataset-raw-strings.py +0 -0
  433. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/dump-dataset.py +0 -0
  434. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/dump-forward-stats.py +0 -0
  435. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/dump-forward.py +0 -0
  436. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/dump-network-json.py +0 -0
  437. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/dump-pickle.py +0 -0
  438. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/extract_state_tying_from_dataset.py +0 -0
  439. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/get-attention-weights.py +0 -0
  440. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/get-best-model-epoch.py +0 -0
  441. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/hdf_dump.py +0 -0
  442. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/hdf_dump_translation_dataset.py +0 -0
  443. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/import-blocks-mt-model.py +0 -0
  444. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/import-t2t-mt-model.py +0 -0
  445. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/.gitignore +0 -0
  446. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/Makefile +0 -0
  447. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/README.md +0 -0
  448. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/example/README.md +0 -0
  449. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/example/libs_list +0 -0
  450. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
  451. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
  452. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
  453. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/example/state_vars_list +0 -0
  454. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/example/tensor_names_list +0 -0
  455. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/file.h +0 -0
  456. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
  457. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
  458. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/main.cc +0 -0
  459. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/rescorer.h +0 -0
  460. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/vocabulary.cc +0 -0
  461. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/lattice_rescorer/vocabulary.h +0 -0
  462. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/tf_avg_checkpoints.py +0 -0
  463. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/tf_inspect_checkpoint.py +0 -0
  464. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/tf_inspect_summary_log.py +0 -0
  465. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/torch_avg_checkpoints.py +0 -0
  466. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/torch_export_to_onnx.py +0 -0
  467. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/tools/torch_inspect_checkpoint.py +0 -0
  468. {returnn-1.20241105.131828 → returnn-1.20241106.173429}/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.20241105.131828
3
+ Version: 1.20241106.173429
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.20241106.173429'
2
+ long_version = '1.20241106.173429+git.0f87197'
@@ -36,6 +36,7 @@ __all__ = [
36
36
  "masked_scatter",
37
37
  "sequence_mask",
38
38
  "pack_padded",
39
+ "pad_packed",
39
40
  "gather",
40
41
  "scatter",
41
42
  "scatter_argmax",
@@ -627,6 +628,8 @@ def pack_padded(
627
628
  Packing means to only store the non-padded frames.
628
629
  This uses :func:`masked_select` internally based on the mask of non-masked frames.
629
630
 
631
+ See :func:`pad_packed` for the inverse operation.
632
+
630
633
  :param source:
631
634
  :param dims: dims in source to pack. the order defines the format. first dim is major, etc.
632
635
  if there are no padded frames, e.g. dims=[B,T] would just result in the [B*T,...] reshaped tensor.
@@ -648,6 +651,14 @@ def pack_padded(
648
651
  return rf.masked_select(source, mask=mask, dims=dims, out_dim=out_dim)
649
652
 
650
653
 
654
+ def pad_packed(source: Tensor, *, in_dim: Dim, dims: Sequence[Dim]) -> Tensor:
655
+ """
656
+ Inverse of :func:`pack_padded`, i.e. unpack the sequence, i.e. pad it back to the original length.
657
+ """
658
+ mask = rf.sequence_mask(dims, device=source.device)
659
+ return rf.masked_scatter(source, mask=mask, in_dim=in_dim, dims=dims)
660
+
661
+
651
662
  # noinspection PyUnusedLocal
652
663
  def gather(
653
664
  source: Tensor,
@@ -69,13 +69,14 @@ __all__ = [
69
69
 
70
70
  def set_random_seed(seed: int):
71
71
  """
72
+ This initializes the random state of the backend
73
+ and also the step-based random state
74
+ (see :func:`get_static_step_based_seed`, only used when ``static=True`` in :func:`random`).
75
+
72
76
  Call this at the beginning of the program
73
77
  (after the RF backend was selected),
74
- or when the model and computation graph is supposed to be reinitialized.
75
-
76
- This initializes the random state of the backend and also the step-based random state.
77
-
78
- This is *not* expected to be called after each epoch or step.
78
+ or when the model and computation graph is supposed to be reinitialized
79
+ or at the beginning of each epoch.
79
80
 
80
81
  :param seed: should depend on epoch or step
81
82
  """
@@ -124,6 +125,8 @@ def reset_step_random_state():
124
125
 
125
126
  def get_static_step_based_seed(*, size=None) -> Union[int, numpy.ndarray]:
126
127
  """
128
+ This is intended as a static seed for :func:`random` when ``static=True`` is used.
129
+
127
130
  :return: from the static step-based random state, get a seed
128
131
  """
129
132
  return _step_rnd.randint(2**31, size=size)
@@ -180,18 +183,20 @@ def random(
180
183
  :param int|float|Tensor|None bound: for uniform, defining the range [-bound, bound)
181
184
  :param int|float|Tensor|None minval: for uniform
182
185
  :param int|float|Tensor|None maxval: for uniform
183
- :param int|list[int]|numpy.ndarray|None seed: If not given, uses self.network.random.randint,
184
- i.e. then it is controlled by the global seed setting, and every layer would get its own seed.
185
- If you specify it explicitly, make sure every :class:`RandomLayer` uses a different seed,
186
- otherwise you would get the same random numbers everywhere.
186
+ :param int|list[int]|numpy.ndarray|None seed:
187
+ Only for the case ``static=True``.
188
+ If not given, uses self.network.random.randint,
189
+ i.e. then it is controlled by the global seed setting, and every layer would get its own seed.
190
+ If you specify it explicitly, make sure every :class:`RandomLayer` uses a different seed,
191
+ otherwise you would get the same random numbers everywhere.
187
192
  :param str|tf.random.Algorithm|None algorithm: see :class:`RandomStateInitLayer`
188
193
  :param Tensor|None explicit_state: You can pass the state explicitly here.
189
- If not given, will be created automatically, and updated automatically.
190
- You could pass a :class:`VariableLayer` with initial value via :class:`RandomStateInitLayer`,
191
- or directly a :class:`RandomStateInitLayer`.
192
- If auto_update_state is True, it must be a variable,
193
- and every time a new random number is created, this variable is updated.
194
- Otherwise (default), it will not be updated automatically.
194
+ If not given, will be created automatically, and updated automatically.
195
+ You could pass a :class:`VariableLayer` with initial value via :class:`RandomStateInitLayer`,
196
+ or directly a :class:`RandomStateInitLayer`.
197
+ If auto_update_state is True, it must be a variable,
198
+ and every time a new random number is created, this variable is updated.
199
+ Otherwise (default), it will not be updated automatically.
195
200
  :param bool|None auto_update_state: only used when you pass an explicit state
196
201
  :param bool|None static: if no state at all should be used. it just relies on the seed then.
197
202
  :param out: if given, will directly write into it, if possible by backend
@@ -5,7 +5,7 @@ The base class is :class:`LearningRateControl`.
5
5
 
6
6
  from __future__ import annotations
7
7
 
8
- from typing import Optional, Any, Dict
8
+ from typing import Optional, Union, Any, Dict
9
9
  import typing
10
10
  import os
11
11
  import returnn.util.basic as util
@@ -350,7 +350,7 @@ class LearningRateControl:
350
350
  relative_error /= learning_rate / self.default_learning_rate
351
351
  return relative_error
352
352
 
353
- def set_epoch_error(self, epoch, error):
353
+ def set_epoch_error(self, epoch: int, error: Dict[str, Union[float, Dict[str, float]]]):
354
354
  """
355
355
  :type epoch: int
356
356
  :type error: dict[str,float|dict[str,float]]
@@ -67,7 +67,14 @@ class ReturnnDatasetIterDataPipe(torch.utils.data.IterDataPipe):
67
67
 
68
68
  def reset(self):
69
69
  """
70
- :return:
70
+ This is called by PyTorch DataLoader mechanism once we create a new iterator over the DataLoader.
71
+ This happens at the beginning of each epoch.
72
+
73
+ (Note: The mechanism where ``reset()`` is actually called is very obfuscated in PyTorch.
74
+ As I understand it, there is a IterDataPipe metaclass (_IterDataPipeMeta)
75
+ which automatically registers a hook on ``__iter__`` via ``hook_iterator``.
76
+ Deep inside the complex logic of this hook, it calls ``_set_datapipe_valid_iterator_id``
77
+ which then calls ``reset()``.)
71
78
  """
72
79
  self._reset_callback()
73
80
 
@@ -34,7 +34,7 @@ from returnn.util import NumbersDict
34
34
  from returnn.util.basic import hms, NotSpecified
35
35
  from returnn.util.result_with_reason import ResultWithReason
36
36
  from returnn.util.debug import debug_shell
37
- from returnn.util.math import simplify_and_format_number
37
+ from returnn.util.math import simplify_and_format_number, merge_random_seeds
38
38
  from returnn.forward_iface import ForwardCallbackIface
39
39
 
40
40
  from .updater import Updater
@@ -282,6 +282,17 @@ class Engine(EngineBase):
282
282
  }
283
283
  )
284
284
 
285
+ # Note: The RF/Torch default random number generator influences many things during training,
286
+ # such as dropout and other random operations inside the model,
287
+ # but also some potential shuffling in the dataset iterator.
288
+ # Also see Dataset._get_default_random_seed_offset() and Dataset._get_random_seed_for_epoch().
289
+ random_seed = self.config.int("random_seed", 42)
290
+ seed_data = [self.epoch, self.global_train_step, random_seed]
291
+ if self._torch_distributed_ctx:
292
+ seed_data.append(self._torch_distributed_ctx.rank())
293
+ random_seed = merge_random_seeds(seed_data) # Join all seeds into one int.
294
+ rf.set_random_seed(random_seed)
295
+
285
296
  def _maybe_reset_dev_memory_caches(self, *, force: bool = False):
286
297
  if not force and not self._reset_dev_memory_caches:
287
298
  return
@@ -372,10 +383,9 @@ class Engine(EngineBase):
372
383
  num_seqs_ = (
373
384
  int(extern_data_raw["num_seqs"]) if extern_data_raw.get("num_seqs", None) is not None else -1
374
385
  )
375
- last_seq_idx_ = extern_data_raw["seq_idx"].max()
376
- assert last_seq_idx_ >= last_seq_idx
377
- last_seq_idx = int(last_seq_idx_)
378
- del last_seq_idx_
386
+ # Note: The batches might have been shuffled,
387
+ # thus we cannot really assert that the seq_idx is always increasing.
388
+ last_seq_idx = max(int(extern_data_raw["seq_idx"].max()), last_seq_idx)
379
389
  if step_idx == 0:
380
390
  if num_seqs_ >= 0:
381
391
  print(f"Epoch {self.epoch} num_seqs: {num_seqs_}", file=log.v5)
@@ -385,6 +395,7 @@ class Engine(EngineBase):
385
395
  del num_seqs_
386
396
  if num_seqs is not None:
387
397
  assert last_seq_idx < num_seqs
398
+ epoch_continuous = (self.epoch - 1 + (last_seq_idx + 1) / num_seqs) if num_seqs is not None else None
388
399
 
389
400
  # clear the gradients when every gradient accumulation loop starts
390
401
  if zero_grad_next_step:
@@ -417,7 +428,10 @@ class Engine(EngineBase):
417
428
 
418
429
  if accum_grad_multiple_step_dyn:
419
430
  accum_grad_multiple_step = accum_grad_multiple_step_dyn(
420
- epoch=self.epoch, global_train_step=self.global_train_step
431
+ epoch=self.epoch,
432
+ epoch_continuous=epoch_continuous,
433
+ global_train_step=self.global_train_step,
434
+ **util.get_fwd_compat_kwargs(),
421
435
  )
422
436
  cur_count_grad_accum += 1
423
437
  perform_update_step = cur_count_grad_accum >= accum_grad_multiple_step
@@ -477,9 +491,7 @@ class Engine(EngineBase):
477
491
  step_idx += 1
478
492
  self.global_train_step += 1
479
493
  self._updater.set_current_train_step(
480
- global_train_step=self.global_train_step,
481
- epoch=self.epoch,
482
- epoch_continuous=(self.epoch - 1 + (last_seq_idx + 1) / num_seqs) if num_seqs is not None else None,
494
+ global_train_step=self.global_train_step, epoch=self.epoch, epoch_continuous=epoch_continuous
483
495
  )
484
496
  except Exception as exc:
485
497
  help_on_torch_exception(exc, step_idx=step_idx, model=self._orig_model, extern_data=extern_data)
@@ -488,8 +500,8 @@ class Engine(EngineBase):
488
500
  elapsed = time.monotonic() - epoch_start_time
489
501
  elapsed_computation_percentage = elapsed_computation_time / elapsed
490
502
  print(
491
- "Trained %i steps, %s elapsed (%.1f%% computing time)"
492
- % (step_idx, hms(elapsed), (elapsed_computation_percentage * 100.0)),
503
+ "Epoch %i: Trained %i steps, %s elapsed (%.1f%% computing time)"
504
+ % (self.epoch, step_idx, hms(elapsed), (elapsed_computation_percentage * 100.0)),
493
505
  file=log.v3,
494
506
  )
495
507
 
@@ -509,7 +521,7 @@ class Engine(EngineBase):
509
521
  if self._do_save():
510
522
  self.learning_rate_control.save()
511
523
 
512
- print(f"Total train loss:", _format_score(dict(accumulated_losses_dict)), file=log.v3)
524
+ print(f"Epoch {self.epoch}: Total train loss:", _format_score(dict(accumulated_losses_dict)), file=log.v3)
513
525
 
514
526
  self._maybe_report_dev_memory_stats()
515
527
 
@@ -540,8 +552,6 @@ class Engine(EngineBase):
540
552
  self._reset_dev_memory_stats()
541
553
 
542
554
  eval_dump_str = []
543
- score_keys = None
544
- error_keys = None
545
555
 
546
556
  for dataset_name, dataset in self.eval_datasets.items():
547
557
  if skip_already_evaluated and self._is_dataset_evaluated(name=dataset_name):
@@ -583,10 +593,6 @@ class Engine(EngineBase):
583
593
  self._run_step(extern_data, train_func=True)
584
594
  train_ctx = rf.get_run_ctx()
585
595
 
586
- if score_keys is None:
587
- score_keys = set(name for name, loss in train_ctx.losses.items() if not loss.as_error)
588
- error_keys = set(name for name, loss in train_ctx.losses.items() if loss.as_error)
589
-
590
596
  losses_dict = NumbersDict(
591
597
  {
592
598
  name: (
@@ -623,14 +629,7 @@ class Engine(EngineBase):
623
629
  self.learning_rate_control.save()
624
630
 
625
631
  # Same format as the TF engine.
626
- eval_dump_str += [
627
- "%s: score %s error %s"
628
- % (
629
- dataset_name,
630
- _format_score({name: accumulated_losses_dict[name] for name in score_keys}),
631
- _format_score({name: accumulated_losses_dict[name] for name in error_keys}),
632
- )
633
- ]
632
+ eval_dump_str += ["%s: %s" % (dataset_name, _format_score(dict(accumulated_losses_dict)))]
634
633
 
635
634
  if self._torch_distributed_ctx:
636
635
  assert self._torch_distributed_ctx.rank() == 0
@@ -638,7 +637,11 @@ class Engine(EngineBase):
638
637
  torch.distributed.broadcast(_has_data, src=0)
639
638
 
640
639
  if not self._torch_distributed_ctx or self._torch_distributed_ctx.rank() == 0:
641
- print(" ".join(eval_dump_str) if eval_dump_str else "(No evaluations.)", file=log.v1)
640
+ print(
641
+ f"Epoch {self.epoch} evaluation:",
642
+ " ".join(eval_dump_str) if eval_dump_str else "(No evaluations.)",
643
+ file=log.v1,
644
+ )
642
645
 
643
646
  self._maybe_report_dev_memory_stats()
644
647
 
@@ -662,7 +665,10 @@ class Engine(EngineBase):
662
665
  for key, value in losses.items():
663
666
  losses_[key] = value
664
667
  if key in score_keys:
665
- losses_[f"{key}:exp"] = math.exp(value)
668
+ try:
669
+ losses_[f"{key}:exp"] = math.exp(value)
670
+ except OverflowError:
671
+ losses_[f"{key}:exp"] = float("inf")
666
672
  losses = NumbersDict(losses_)
667
673
  return losses
668
674
 
@@ -695,6 +701,32 @@ class Engine(EngineBase):
695
701
  max_seqs = self.config.typed_value("max_seqs", -1)
696
702
  batches_dataset = data_pipeline.BatchingIterDataPipe(wrapped_dataset, batch_size=batch_size, max_seqs=max_seqs)
697
703
 
704
+ online_shuffle_batches = self.config.typed_value("online_shuffle_batches", None)
705
+ if train and online_shuffle_batches:
706
+ if isinstance(online_shuffle_batches, int):
707
+ online_shuffle_batches = {"buffer_size": online_shuffle_batches}
708
+ elif isinstance(online_shuffle_batches, dict):
709
+ if "buffer_size" not in online_shuffle_batches:
710
+ raise ValueError(
711
+ f"config online_shuffle_batches, buffer_size not defined, got {online_shuffle_batches}"
712
+ )
713
+ else:
714
+ raise TypeError(
715
+ f"config online_shuffle_batches, expected int or dict, got {type(online_shuffle_batches)}"
716
+ )
717
+ # Note on random seed: This is handled by the PyTorch DataLoader iterator logic and IterDataPipe reset.
718
+ # Specifically, when we create a new DataLoader iterator,
719
+ # this will get fetch a new random number (from current Torch RNG state),
720
+ # use that as seed for the shuffle buffer.
721
+ # Note: In case of distributed training, it will broadcast the seed from rank 0 to all others.
722
+ # This is maybe not really what we want?
723
+ # https://discuss.pytorch.org/t/shuffleriterdatapipe-but-different-random-seed-per-distributed-rank/212612
724
+ # I currently don't really see a good way to override this behavior.
725
+ # Also note that we are likely using persistent multiprocessing data loader workers,
726
+ # so calling torch.utils.data.graph_settings.apply_random_seed here in the main proc
727
+ # will not have an effect then.
728
+ batches_dataset = torch.utils.data.datapipes.iter.Shuffler(batches_dataset, **online_shuffle_batches)
729
+
698
730
  loader_opts = self.config.typed_value("torch_dataloader_opts") or {}
699
731
  assert isinstance(loader_opts, dict), f"config torch_dataloader_opts, expected dict, got {type(loader_opts)}"
700
732
 
@@ -1333,7 +1365,7 @@ def _format_score(score: Dict[str, float]) -> str:
1333
1365
  return "None"
1334
1366
  if len(score) == 1:
1335
1367
  return _format_score_value(list(score.values())[0])
1336
- return " ".join(["%s %s" % (key.split(":", 2)[-1], _format_score_value(score[key])) for key in score.keys()])
1368
+ return " ".join(["%s %s" % (k, _format_score_value(v)) for k, v in score.items()])
1337
1369
 
1338
1370
 
1339
1371
  def _format_score_value(v: Any) -> str:
@@ -5,7 +5,7 @@ Various generic utilities, which are shared across different backend engines.
5
5
  """
6
6
 
7
7
  from __future__ import annotations
8
- from typing import Optional, Union, Any, Generic, TypeVar, Iterable, Tuple, Dict, List, Callable
8
+ from typing import Optional, Union, Any, Generic, TypeVar, Iterable, Tuple, Dict, List, Set, Callable
9
9
 
10
10
  import subprocess
11
11
  from subprocess import CalledProcessError
@@ -1962,9 +1962,9 @@ class NumbersDict:
1962
1962
  self.value = broadcast_value
1963
1963
  self.max = self._max_error
1964
1964
 
1965
- def copy(self):
1965
+ def copy(self) -> NumbersDict:
1966
1966
  """
1967
- :rtype: NumbersDict
1967
+ :return: copy
1968
1968
  """
1969
1969
  return NumbersDict(self)
1970
1970
 
@@ -1981,11 +1981,10 @@ class NumbersDict:
1981
1981
  numbers_dict={k: const_number for k in numbers_dict.dict.keys()},
1982
1982
  )
1983
1983
 
1984
- def copy_like(self, numbers_dict):
1984
+ def copy_like(self, numbers_dict: NumbersDict) -> NumbersDict:
1985
1985
  """
1986
- :param NumbersDict numbers_dict:
1986
+ :param numbers_dict:
1987
1987
  :return: copy of self with same keys as numbers_dict as far as we have them
1988
- :rtype: NumbersDict
1989
1988
  """
1990
1989
  if self.value is not None:
1991
1990
  return NumbersDict(
@@ -1998,11 +1997,11 @@ class NumbersDict:
1998
1997
  )
1999
1998
 
2000
1999
  @property
2001
- def keys_set(self):
2000
+ def keys_set(self) -> Set[str]:
2002
2001
  """
2003
2002
  Also see :func:`keys_union` if you want to have a deterministic order.
2004
2003
 
2005
- :rtype: set[str]
2004
+ :return: set of keys
2006
2005
  """
2007
2006
  return set(self.dict.keys())
2008
2007
 
@@ -2019,32 +2018,32 @@ class NumbersDict:
2019
2018
  res.append(key)
2020
2019
  return res
2021
2020
 
2022
- def __getitem__(self, key):
2021
+ def __getitem__(self, key: str):
2023
2022
  if self.value is not None:
2024
2023
  return self.dict.get(key, self.value)
2025
2024
  return self.dict[key]
2026
2025
 
2027
- def __setitem__(self, key, value):
2026
+ def __setitem__(self, key: str, value):
2028
2027
  self.dict[key] = value
2029
2028
 
2030
- def __delitem__(self, key):
2029
+ def __delitem__(self, key: str):
2031
2030
  del self.dict[key]
2032
2031
 
2033
- def __contains__(self, item):
2032
+ def __contains__(self, item: str):
2034
2033
  return item in self.dict
2035
2034
 
2036
- def get(self, key, default=None):
2035
+ def get(self, key: str, default=None):
2037
2036
  """
2038
- :param str key:
2037
+ :param key:
2039
2038
  :param T default:
2040
2039
  :rtype: object|T
2041
2040
  """
2042
2041
  # Keep consistent with self.__getitem__. If self.value is set, this will always be the default value.
2043
2042
  return self.dict.get(key, self.value if self.value is not None else default)
2044
2043
 
2045
- def pop(self, key, *args):
2044
+ def pop(self, key: str, *args):
2046
2045
  """
2047
- :param str key:
2046
+ :param key:
2048
2047
  :param T args: default, or not
2049
2048
  :rtype: object|T
2050
2049
  """
@@ -2057,22 +2056,21 @@ class NumbersDict:
2057
2056
  # which would only make sense for our values, not the dict keys.
2058
2057
  raise Exception("%s.__iter__ is undefined" % self.__class__.__name__)
2059
2058
 
2060
- def keys(self):
2059
+ def keys(self) -> Iterable[str]:
2061
2060
  """
2062
2061
  :rtype: set[str]
2063
2062
  """
2064
2063
  return self.dict.keys()
2065
2064
 
2066
- def values(self):
2065
+ def values(self) -> List[Any]:
2067
2066
  """
2068
- :rtype: list[object]
2067
+ :return: values: dict values + self.value
2069
2068
  """
2070
2069
  return list(self.dict.values()) + ([self.value] if self.value is not None else [])
2071
2070
 
2072
- def items(self):
2071
+ def items(self) -> Iterable[Tuple[str, Any]]:
2073
2072
  """
2074
2073
  :return: dict items. this excludes self.value
2075
- :rtype: set[(str,object)]
2076
2074
  """
2077
2075
  return self.dict.items()
2078
2076
 
@@ -2082,9 +2080,9 @@ class NumbersDict:
2082
2080
  """
2083
2081
  return self.value is not None or key in self.dict
2084
2082
 
2085
- def has_values(self):
2083
+ def has_values(self) -> bool:
2086
2084
  """
2087
- :rtype: bool
2085
+ :return: any values in self.dict or self.value
2088
2086
  """
2089
2087
  return bool(self.dict) or self.value is not None
2090
2088
 
@@ -2188,12 +2186,12 @@ class NumbersDict:
2188
2186
  def __neg__(self):
2189
2187
  return self.unary_op(op=lambda a: -a)
2190
2188
 
2191
- def __bool__(self):
2189
+ def __bool__(self) -> bool:
2192
2190
  return any(self.values())
2193
2191
 
2194
2192
  __nonzero__ = __bool__ # Python 2
2195
2193
 
2196
- def elem_eq(self, other, result_with_default=True):
2194
+ def elem_eq(self, other, result_with_default: bool = True) -> NumbersDict:
2197
2195
  """
2198
2196
  Element-wise equality check with other.
2199
2197
  Note about broadcast default value: Consider some key which is neither in self nor in other.
@@ -2204,8 +2202,8 @@ class NumbersDict:
2204
2202
  You can control the behavior via result_with_default.
2205
2203
 
2206
2204
  :param NumbersDict|T other:
2207
- :param bool result_with_default:
2208
- :rtype: NumbersDict
2205
+ :param result_with_default:
2206
+ :return: new NumbersDict with bool values
2209
2207
  """
2210
2208
 
2211
2209
  def op(a, b):
@@ -2225,19 +2223,17 @@ class NumbersDict:
2225
2223
  res.value = None
2226
2224
  return res
2227
2225
 
2228
- def __eq__(self, other):
2226
+ def __eq__(self, other) -> bool:
2229
2227
  """
2230
2228
  :param NumbersDict|T other:
2231
2229
  :return: whether self == other elemwise. see self.elem_eq
2232
- :rtype: bool
2233
2230
  """
2234
2231
  return all(self.elem_eq(other).values())
2235
2232
 
2236
- def __ne__(self, other):
2233
+ def __ne__(self, other) -> bool:
2237
2234
  """
2238
2235
  :param NumbersDict|T other:
2239
2236
  :return: not (self == other)
2240
- :rtype: bool
2241
2237
  """
2242
2238
  return not (self == other)
2243
2239
 
@@ -2246,11 +2242,10 @@ class NumbersDict:
2246
2242
  # and it would just confuse.
2247
2243
  raise Exception("%s.__cmp__ is undefined" % self.__class__.__name__)
2248
2244
 
2249
- def any_compare(self, other, cmp):
2245
+ def any_compare(self, other, cmp) -> bool:
2250
2246
  """
2251
2247
  :param NumbersDict other:
2252
2248
  :param ((object,object)->True) cmp:
2253
- :rtype: True
2254
2249
  """
2255
2250
  for key in self.keys():
2256
2251
  if key in other.keys():
@@ -2283,11 +2278,11 @@ class NumbersDict:
2283
2278
  return min(*args)
2284
2279
 
2285
2280
  @classmethod
2286
- def max(cls, items):
2281
+ def max(cls, items) -> NumbersDict:
2287
2282
  """
2288
2283
  Element-wise maximum for item in items.
2284
+
2289
2285
  :param list[NumbersDict|int|float] items:
2290
- :rtype: NumbersDict
2291
2286
  """
2292
2287
  assert items
2293
2288
  if len(items) == 1:
@@ -2297,11 +2292,10 @@ class NumbersDict:
2297
2292
  return cls.max([items[0], cls.max(items[1:])])
2298
2293
 
2299
2294
  @classmethod
2300
- def min(cls, items):
2295
+ def min(cls, items) -> NumbersDict:
2301
2296
  """
2302
2297
  Element-wise minimum for item in items.
2303
2298
  :param list[NumbersDict|int|float] items:
2304
- :rtype: NumbersDict
2305
2299
  """
2306
2300
  assert items
2307
2301
  if len(items) == 1:
@@ -2327,7 +2321,7 @@ class NumbersDict:
2327
2321
  """
2328
2322
  return min(self.values())
2329
2323
 
2330
- def __repr__(self):
2324
+ def __repr__(self) -> str:
2331
2325
  if self.value is None and not self.dict:
2332
2326
  return "%s()" % self.__class__.__name__
2333
2327
  if self.value is None and self.dict:
@@ -3,8 +3,9 @@ Some mathematical functions, in pure NumPy.
3
3
  """
4
4
 
5
5
  from __future__ import annotations
6
- from typing import Union, Optional, Dict
6
+ from typing import Union, Optional, Sequence, Dict
7
7
  import numpy
8
+ import hashlib
8
9
 
9
10
 
10
11
  def ceil_div(a: int, b: int) -> int:
@@ -85,3 +86,19 @@ def simplify_and_format_number(n: Union[int, float]) -> str:
85
86
  return str(n).rstrip("0").rstrip(".")
86
87
  else:
87
88
  raise TypeError(f"Expected int or float, got {n!r} type {type(n)}")
89
+
90
+
91
+ def merge_random_seeds(data_sources: Sequence[int], *, num_bytes: int = 4, signed: bool = False) -> int:
92
+ """
93
+ :param data_sources: A list of integers. We expect that they are all representable as 64-bit signed integers.
94
+ :param num_bytes: for the output seed.
95
+ :param signed: whether the output seed should be signed.
96
+ :return: A num_bytes*8-bit integer seed, deterministically derived from the input data.
97
+ """
98
+ # Convert each integer to bytes and concatenate them
99
+ combined = b"".join(int(source).to_bytes(8, "big", signed=True) for source in data_sources)
100
+ # Use SHA-256 to hash the combined bytes
101
+ hash_digest = hashlib.sha256(combined).digest()
102
+ # Convert the hash digest to an integer seed
103
+ seed = int.from_bytes(hash_digest[:num_bytes], "big", signed=signed)
104
+ return seed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20241105.131828
3
+ Version: 1.20241106.173429
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
@@ -79,6 +79,9 @@ def parse_last_fer(out: str) -> float:
79
79
  if not m:
80
80
  # example: dev: score 0.03350000149202181 error 0.009919877954075871
81
81
  m = re.match("dev: score .* error ([0-9.]+)\\s?", line)
82
+ if not m:
83
+ # example: Epoch 2 evaluation: dev: ce 0.034 fer 0.019
84
+ m = re.match("Epoch [0-9]+ evaluation: dev: .* fer ([0-9.]+)\\s?", line)
82
85
  if not m:
83
86
  continue
84
87
  parsed_fer = float(m.group(1))
@@ -1,2 +0,0 @@
1
- version = '1.20241105.131828'
2
- long_version = '1.20241105.131828+git.0494bcf'