returnn 1.20240621.152144__tar.gz → 1.20240621.194850__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.
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/PKG-INFO +1 -1
- returnn-1.20240621.194850/_setup_info_generated.py +2 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/__main__.py +1 -2
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/basic.py +20 -1
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/distrib_files.py +10 -125
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/file_cache.py +36 -10
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn.egg-info/PKG-INFO +1 -1
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_Util.py +11 -3
- returnn-1.20240621.152144/_setup_info_generated.py +0 -2
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/.editorconfig +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/.gitignore +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/.gitmodules +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/.kateconfig +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/CHANGELOG.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/CODEOWNERS +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/CONTRIBUTING.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/LICENSE +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/MANIFEST.in +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/README.rst +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/12AX.cluster_map +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/_setup_returnn_env.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-fwd.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-horovod-mpi.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-horovod-mpi.py.sh +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-horovod-mpi.sh +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-hyper-param-tuning.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-iter-dataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-list-devices.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-lua-torch-layer.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-pretrain.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-record-and-push-to-webserver.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-returnn-as-framework.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-rf-pt-benchmark.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-rf.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-rhn-enwik8.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-sprint-interface.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-att-copy.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-attention.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-enc-dec.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-hard-att-copy.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-lstm-benchmark.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-native-lstm.12ax.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-native-lstm2.12ax.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-neural-transducer.12ax.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-rec-explicit-lstm.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-rec-explicit-rnn.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-rec-self-att.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-search-compiled-graph.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-timit-lstm-ctc.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-torch.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo.sh +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/README.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/chars.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/config_demo +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/config_fwd +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/config_real +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/decode.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/go.sh +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/lines.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/split/eval.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/split/train.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/split/valid.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/README.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/artificial/create_test_h5.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/artificial/forwardconfig +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/artificial/go.sh +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/artificial/trainconfig +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/artificial_rgb/go.sh +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/pyproject.toml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/requirements.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/__old_mod_loader__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/__setup__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/config.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/audio.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/bundle_file.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/cached.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/cached2.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/generating.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/hdf.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/lm.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/map.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/meta.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/multi_proc.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/normalization_data.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/numpy_dump.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/raw_wav.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/sprint.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/stereo.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/util/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/util/feature_extraction.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/util/strings.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/datasets/util/vocabulary.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/engine/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/engine/base.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/engine/batch.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/__main__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/.git +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/graph_editor/README.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/graph_editor/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/graph_editor/edit.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/graph_editor/reroute.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/graph_editor/select.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/graph_editor/subgraph.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/graph_editor/transform.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/extern/graph_editor/util.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/forward_iface.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_backend.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_native/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_native/backend.cpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_native/backend.hpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_native/module.cpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_native/module.hpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_native/py_utils.hpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_native/tensor_ops.cpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_native/tensor_ops.hpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_numpy_backend.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_random_journal.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/_utils.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/array_.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/attention.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/audio/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/audio/mel.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/audio/specaugment.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/backend.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/build_from_dict.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/cond.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/const.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/container.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/control_flow_ctx.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/conv.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/decoder/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/decoder/transformer.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/device.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/dims.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/dropout.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/dtype.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/encoder/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/encoder/base.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/encoder/conformer.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/gradient.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/graph.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/hooks.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/init.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/label_smoothing.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/linear.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/loop.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/loss.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/math_.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/matmul.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/module.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/normalization.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/parameter.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/piecewise_linear.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/rand.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/rec.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/reduce.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/run_ctx.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/signal.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/state.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/stepwise_scheduler.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/tensor_array.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/frontend/types.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/import_/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/import_/common.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/import_/git.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/import_/import_.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/learning_rate_control.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/log.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/native_op.cpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/native_op.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/pretrain.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/sprint/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/sprint/cache.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/sprint/control.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/sprint/error_signals.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/sprint/extern_interface.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/sprint/interface.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/README.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/_dim_extra.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/_tensor_extra.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/_tensor_mixin_base.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/_tensor_op_overloads.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/control_flow_ctx.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/dim.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/marked_dim.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/tensor.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/tensor_dict.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tensor/utils.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/compat.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/data_pipeline.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/distributed.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/engine.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/README.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/_backend.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/_utils.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/cond.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/dims.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/layer.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/loop.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/make_layer.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/masked_computation.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_low_level/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/frontend_low_level/_backend.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/horovod.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/hyper_param_tuning.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/layers/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/layers/base.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/layers/basic.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/layers/rec.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/layers/segmental_model.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/layers/signal_processing.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/layers/variable.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/native_op.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/network.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/sprint.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/updater.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/util/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/util/basic.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/util/data.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/util/gradient_checkpoint.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/util/ken_lm.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/tf/util/open_fst.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/README.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/data/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/data/extern_data.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/data/pipeline.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/data/queued_data_iter.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/data/tensor_utils.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/distributed.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/engine.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/frontend/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/frontend/_backend.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/frontend/_rand.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/frontend/bridge.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/frontend/raw_ops.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/updater.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/util/README.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/util/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/util/diagnose_gpu.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/torch/util/scaled_gradient.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/__init__.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/basic.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/better_exchook.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/bpe.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/debug.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/debug_helpers.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/fsa.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/literal_py_to_pickle.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/math.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/native_code_compiler.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/pprint.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/py-to-pickle.cpp +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/py_compat.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/py_ext_mod_compiler.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/result_with_reason.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/sig_proc.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/task_system.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/train_proc_manager.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn/util/watch_memory.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn.egg-info/SOURCES.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn.egg-info/dependency_links.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/returnn.egg-info/top_level.txt +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/rnn.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/setup.cfg +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/setup.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/DummySprintExec.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm-inspection-profile.xml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/.gitignore +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/.name +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/misc.xml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/modules.xml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/returnn.iml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/_set_num_threads1.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/_setup_returnn_env.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/_setup_test_env.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/bpe-unicode-demo.codes +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/bpe-unicode-demo.vocab +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/lexicon_opt.fst +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/lexicon_opt.isyms +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/lexicon_opt.jpg +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/lexicon_opt.osyms +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/lint_common.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/pycharm-inspect.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/pylint.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/returnn-as-framework.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/rf_utils.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/spelling.dic +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_Config.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_Dataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_Fsa.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_GeneratingDataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_HDFDataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_LearningRateControl.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_Log.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_MultiProcDataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_Pretrain.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_ResNet.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_SprintDataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_SprintInterface.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TFEngine.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TFNativeOp.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TFNetworkLayer.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TFNetworkRecLayer.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TFNetworkSigProcLayer.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TFUpdater.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TFUtil.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TF_determinism.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TaskSystem.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TaskSystem_SharedMem.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_TranslationDataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_demos.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_fork_exec.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_hdf_dump.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_array.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_attention.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_base.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_cond.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_const.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_container.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_conv.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_encoder_conformer.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_gradient.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_label_smoothing.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_loop.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_math.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_normalization.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_piecewise_linear.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_rec.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_reduce.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_rf_signal.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_tensor.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_tools.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_torch_dataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_torch_engine.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_torch_frontend.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tests/test_torch_internal_frontend.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/_setup_returnn_env.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/analyze-dataset-batches.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/bliss-collect-seq-lens.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/bliss-dump-text.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/bliss-get-segment-names.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/bliss-to-ogg-zip.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/bpe-create-lexicon.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/calculate-word-error-rate.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/cleanup-old-models.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/collect-orth-symbols.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/collect-words.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/compile_native_op.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/compile_tf_graph.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/debug-dump-search-scores.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/debug-plot-search-scores.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/dump-dataset-raw-strings.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/dump-dataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/dump-forward-stats.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/dump-forward.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/dump-network-json.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/dump-pickle.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/extract_state_tying_from_dataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/get-attention-weights.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/get-best-model-epoch.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/hdf_dump.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/hdf_dump_translation_dataset.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/import-blocks-mt-model.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/import-t2t-mt-model.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/.gitignore +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/Makefile +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/README.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/example/README.md +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/example/libs_list +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/example/state_vars_list +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/example/tensor_names_list +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/file.h +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/main.cc +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/rescorer.h +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/vocabulary.cc +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/lattice_rescorer/vocabulary.h +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/tf_avg_checkpoints.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/tf_inspect_checkpoint.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/tf_inspect_summary_log.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/torch_avg_checkpoints.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/torch_export_to_onnx.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/torch_inspect_checkpoint.py +0 -0
- {returnn-1.20240621.152144 → returnn-1.20240621.194850}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
|
@@ -29,8 +29,7 @@ from returnn.log import log
|
|
|
29
29
|
from returnn.config import Config, get_global_config
|
|
30
30
|
from returnn.datasets import Dataset, init_dataset, init_dataset_via_str
|
|
31
31
|
from returnn.datasets.hdf import HDFDataset
|
|
32
|
-
from returnn.util import debug as debug_util
|
|
33
|
-
from returnn.util import basic as util
|
|
32
|
+
from returnn.util import basic as util, debug as debug_util
|
|
34
33
|
from returnn.util.basic import BackendEngine, BehaviorVersion
|
|
35
34
|
|
|
36
35
|
# These imports are not directly used here, but make them available, as other code imports them from here.
|
|
@@ -25,6 +25,7 @@ from returnn.log import log
|
|
|
25
25
|
from returnn.engine.batch import Batch, BatchSetGenerator
|
|
26
26
|
from returnn.datasets.util.vocabulary import Vocabulary
|
|
27
27
|
from returnn.util.basic import try_run, NumbersDict, OptionalNotImplementedError
|
|
28
|
+
from returnn.util import file_cache
|
|
28
29
|
from returnn.tensor import TensorDict
|
|
29
30
|
|
|
30
31
|
if TYPE_CHECKING:
|
|
@@ -195,6 +196,7 @@ class Dataset(object):
|
|
|
195
196
|
self.shuffle_frames_of_nseqs = shuffle_frames_of_nseqs
|
|
196
197
|
self.epoch = None
|
|
197
198
|
self.zpad = None
|
|
199
|
+
self._file_cache: Optional[file_cache.FileCache] = None
|
|
198
200
|
|
|
199
201
|
def __repr__(self):
|
|
200
202
|
return "<%s %r epoch=%s>" % (
|
|
@@ -282,6 +284,13 @@ class Dataset(object):
|
|
|
282
284
|
return returnn.tf.horovod.get_ctx(config=config).rank() * 16127
|
|
283
285
|
return 0
|
|
284
286
|
|
|
287
|
+
def set_file_cache(self, cache: file_cache.FileCache):
|
|
288
|
+
"""
|
|
289
|
+
Stores the given file cache with the dataset to unregister the files within
|
|
290
|
+
the cache when the dataset is deinitialized.
|
|
291
|
+
"""
|
|
292
|
+
self._file_cache = cache
|
|
293
|
+
|
|
285
294
|
@staticmethod
|
|
286
295
|
def _parse_chunking(chunking):
|
|
287
296
|
"""
|
|
@@ -1434,7 +1443,13 @@ def init_dataset(
|
|
|
1434
1443
|
kwargs.update(default_kwargs)
|
|
1435
1444
|
if extra_kwargs:
|
|
1436
1445
|
kwargs.update(extra_kwargs)
|
|
1437
|
-
|
|
1446
|
+
cache = file_cache.get_instance()
|
|
1447
|
+
kwargs, cached_files = cache.handle_cached_files_in_config(kwargs)
|
|
1448
|
+
obj = init_dataset_via_str(config_str=config_str, **kwargs)
|
|
1449
|
+
assert isinstance(obj, Dataset)
|
|
1450
|
+
if cached_files:
|
|
1451
|
+
obj.set_file_cache(cache)
|
|
1452
|
+
return obj
|
|
1438
1453
|
assert isinstance(kwargs, dict)
|
|
1439
1454
|
kwargs = kwargs.copy()
|
|
1440
1455
|
assert "class" in kwargs
|
|
@@ -1448,9 +1463,13 @@ def init_dataset(
|
|
|
1448
1463
|
kwargs.setdefault(key, value)
|
|
1449
1464
|
if extra_kwargs:
|
|
1450
1465
|
kwargs.update(extra_kwargs)
|
|
1466
|
+
cache = file_cache.get_instance()
|
|
1467
|
+
kwargs, cached_files = cache.handle_cached_files_in_config(kwargs)
|
|
1451
1468
|
obj = clazz(**kwargs)
|
|
1452
1469
|
assert isinstance(obj, Dataset)
|
|
1453
1470
|
obj.initialize()
|
|
1471
|
+
if cached_files:
|
|
1472
|
+
obj.set_file_cache(cache)
|
|
1454
1473
|
return obj
|
|
1455
1474
|
|
|
1456
1475
|
|
|
@@ -6,7 +6,7 @@ https://github.com/rwth-i6/returnn/issues/1519
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
-
from typing import Optional, Any, Dict, Tuple, List, Sequence,
|
|
9
|
+
from typing import Optional, Any, Dict, Tuple, List, Sequence, Callable, Union
|
|
10
10
|
import os
|
|
11
11
|
import sys
|
|
12
12
|
import numpy
|
|
@@ -136,7 +136,6 @@ class DistributeFilesDataset(CachedDataset2):
|
|
|
136
136
|
get_sub_epoch_dataset: Callable[[List[FileTree]], Dict[str, Any]],
|
|
137
137
|
preload_next_n_sub_epochs: int = 1,
|
|
138
138
|
buffer_size: int = 1,
|
|
139
|
-
file_cache_opts: Optional[Dict[str, Any]] = None,
|
|
140
139
|
distrib_shard_files: bool = False,
|
|
141
140
|
_meta_info_cache: Optional[Dict[str, Any]] = None,
|
|
142
141
|
**kwargs,
|
|
@@ -157,13 +156,11 @@ class DistributeFilesDataset(CachedDataset2):
|
|
|
157
156
|
assert preload_next_n_sub_epochs >= 0
|
|
158
157
|
self.preload_next_n_sub_epochs = preload_next_n_sub_epochs
|
|
159
158
|
self.buffer_size = buffer_size
|
|
160
|
-
self.file_cache_opts = file_cache_opts or {}
|
|
161
159
|
self._file_sizes: Optional[Dict[str, int]] = None # key -> size. for equal distribution across sub epochs
|
|
162
160
|
self._data_keys: Optional[List[str]] = None
|
|
163
161
|
self._num_seqs: Optional[int] = None
|
|
164
162
|
self._shard_index, self._num_shards = _get_rank_and_size() if distrib_shard_files else (0, 1)
|
|
165
163
|
|
|
166
|
-
self._file_cache: Optional[_FileCacheProc] = None
|
|
167
164
|
self._workers: Dict[int, _WorkerProcParent] = {} # epoch -> worker
|
|
168
165
|
self._files_order_cache: Dict[int, List[List[FileTree]]] = {} # full epoch (0-indexed) -> files order
|
|
169
166
|
|
|
@@ -205,15 +202,12 @@ class DistributeFilesDataset(CachedDataset2):
|
|
|
205
202
|
return
|
|
206
203
|
# First, we need to know the num_inputs, num_outputs, total_num_seqs, labels.
|
|
207
204
|
# Init the dataset with the first file.
|
|
208
|
-
dataset_dict
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
self._data_keys = dataset.get_data_keys()
|
|
215
|
-
finally:
|
|
216
|
-
exit_hook()
|
|
205
|
+
dataset_dict = self._get_sub_dataset_dict(files=[self.files[0]])
|
|
206
|
+
dataset = init_dataset(dataset_dict, extra_kwargs={"seq_ordering": "default"}, parent_dataset=self)
|
|
207
|
+
self.num_inputs = dataset.num_inputs
|
|
208
|
+
self.num_outputs = dataset.num_outputs
|
|
209
|
+
self.labels = dataset.labels
|
|
210
|
+
self._data_keys = dataset.get_data_keys()
|
|
217
211
|
|
|
218
212
|
def _lazy_init_file_sizes(self):
|
|
219
213
|
import tree
|
|
@@ -224,17 +218,7 @@ class DistributeFilesDataset(CachedDataset2):
|
|
|
224
218
|
_get_key_for_file_tree(t): sum((os.path.getsize(fn) for fn in tree.flatten(t)), 0) for t in self.files
|
|
225
219
|
}
|
|
226
220
|
|
|
227
|
-
def _lazy_init_file_cache_proc(self):
|
|
228
|
-
if self._file_cache:
|
|
229
|
-
return
|
|
230
|
-
self._file_cache = _FileCacheProc(
|
|
231
|
-
name=f"{self.__class__.__name__} {self.name}", file_cache_opts=self.file_cache_opts
|
|
232
|
-
)
|
|
233
|
-
|
|
234
221
|
def __del__(self):
|
|
235
|
-
if self._file_cache:
|
|
236
|
-
try_run(self._file_cache.exit, kwargs={"join": False})
|
|
237
|
-
self._file_cache = None
|
|
238
222
|
for k, worker in self._workers.items():
|
|
239
223
|
try_run(worker.exit, kwargs={"join": False})
|
|
240
224
|
self._workers.clear()
|
|
@@ -256,7 +240,6 @@ class DistributeFilesDataset(CachedDataset2):
|
|
|
256
240
|
return True
|
|
257
241
|
|
|
258
242
|
self._lazy_init_file_sizes()
|
|
259
|
-
self._lazy_init_file_cache_proc()
|
|
260
243
|
|
|
261
244
|
full_epoch_0idx = (epoch - 1) // self.partition_epoch
|
|
262
245
|
|
|
@@ -300,21 +283,20 @@ class DistributeFilesDataset(CachedDataset2):
|
|
|
300
283
|
files_order: List[List[FileTree]] = self._files_order_cache[full_epoch_0idx_]
|
|
301
284
|
files_for_subep = files_order[(ep_ - 1) % self.partition_epoch]
|
|
302
285
|
print(f"{self}: using files for epoch {ep_}: {files_for_subep}", file=log.v4)
|
|
303
|
-
dataset_dict
|
|
286
|
+
dataset_dict = self._get_sub_dataset_dict(files=files_for_subep)
|
|
304
287
|
worker = _WorkerProcParent(
|
|
305
288
|
name=f"{self.__class__.__name__} {self.name} ep {epoch}",
|
|
306
289
|
epoch=ep_,
|
|
307
290
|
full_epoch_0idx=full_epoch_0idx_,
|
|
308
291
|
dataset_dict=dataset_dict,
|
|
309
292
|
buffer_size=self.buffer_size,
|
|
310
|
-
exit_hook=exit_hook,
|
|
311
293
|
)
|
|
312
294
|
self._workers[ep_] = worker
|
|
313
295
|
|
|
314
296
|
self._num_seqs = self._workers[epoch].get_num_seqs()
|
|
315
297
|
return True
|
|
316
298
|
|
|
317
|
-
def _get_sub_dataset_dict(self, files: List[FileTree]) ->
|
|
299
|
+
def _get_sub_dataset_dict(self, files: List[FileTree]) -> Dict[str, Any]:
|
|
318
300
|
dataset_dict = self.get_sub_epoch_dataset(files)
|
|
319
301
|
dataset_dict = extend_dataset_dict_from_parent_dataset(dataset_dict, parent_dataset=self)
|
|
320
302
|
if dataset_dict.get("partition_epoch", 1) != 1:
|
|
@@ -324,9 +306,7 @@ class DistributeFilesDataset(CachedDataset2):
|
|
|
324
306
|
f"{self}: sub dataset should have explicit seq_ordering "
|
|
325
307
|
f"(or seq_order_control_dataset for MetaDataset), got: {dataset_dict}"
|
|
326
308
|
)
|
|
327
|
-
|
|
328
|
-
dataset_dict, exit_hook = self._file_cache.handle_cached_files_in_config(dataset_dict)
|
|
329
|
-
return dataset_dict, exit_hook
|
|
309
|
+
return dataset_dict
|
|
330
310
|
|
|
331
311
|
@staticmethod
|
|
332
312
|
def _distribute_evenly_by_size(
|
|
@@ -417,9 +397,6 @@ class DistributeFilesDataset(CachedDataset2):
|
|
|
417
397
|
worker.exit()
|
|
418
398
|
self._workers.clear()
|
|
419
399
|
self._files_order_cache.clear()
|
|
420
|
-
if self._file_cache:
|
|
421
|
-
self._file_cache.exit()
|
|
422
|
-
self._file_cache = None
|
|
423
400
|
else:
|
|
424
401
|
if self.epoch in self._workers:
|
|
425
402
|
worker = self._workers.pop(self.epoch)
|
|
@@ -647,95 +624,3 @@ def _worker_proc_loop(
|
|
|
647
624
|
raise Exception(f"unknown msg {msg!r}")
|
|
648
625
|
except KeyboardInterrupt: # when parent dies
|
|
649
626
|
pass
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
class _FileCacheProc:
|
|
653
|
-
def __init__(self, *, name: str, file_cache_opts: Dict[str, Any]):
|
|
654
|
-
self.file_cache_opts = file_cache_opts
|
|
655
|
-
|
|
656
|
-
parent_conn, child_conn = _mp.Pipe()
|
|
657
|
-
self.parent_conn: mpConnection = parent_conn
|
|
658
|
-
|
|
659
|
-
self.proc = _mp.Process(
|
|
660
|
-
name=f"{name} file cache",
|
|
661
|
-
target=_file_cache_proc_loop,
|
|
662
|
-
args=(file_cache_opts, child_conn),
|
|
663
|
-
daemon=True,
|
|
664
|
-
)
|
|
665
|
-
self.proc.start()
|
|
666
|
-
# Make sure the child connection is closed here.
|
|
667
|
-
# It stays open in the child, until the child dies.
|
|
668
|
-
# When that happens, now any consecutive read on the pipe
|
|
669
|
-
# should yield an exception -- which is what we want,
|
|
670
|
-
# otherwise it would just hang.
|
|
671
|
-
child_conn.close()
|
|
672
|
-
|
|
673
|
-
def handle_cached_files_in_config(self, config: Dict[str, Any]) -> Tuple[Dict[str, Any], _FileCacheExitHook]:
|
|
674
|
-
""":func:`FileCache.handle_cached_files_in_config`"""
|
|
675
|
-
self.parent_conn.send(("handle_cached_files_in_config", {"config": config}))
|
|
676
|
-
msg, (res, files) = self.parent_conn.recv()
|
|
677
|
-
assert msg == "config_and_cached_files" and isinstance(config, dict) and isinstance(files, list)
|
|
678
|
-
return res, _FileCacheExitHook(self, files)
|
|
679
|
-
|
|
680
|
-
def release_files(self, filenames: Collection[str]):
|
|
681
|
-
""":func:`FileCache.release_files`"""
|
|
682
|
-
self.parent_conn.send(("release_files", {"filenames": filenames}))
|
|
683
|
-
|
|
684
|
-
def exit(self, *, join: bool = True):
|
|
685
|
-
"""exit"""
|
|
686
|
-
if self.proc.exitcode is not None: # already stopped?
|
|
687
|
-
return
|
|
688
|
-
self.parent_conn.send(("exit", {}))
|
|
689
|
-
if join:
|
|
690
|
-
self.proc.join()
|
|
691
|
-
|
|
692
|
-
def __del__(self):
|
|
693
|
-
# noinspection PyBroadException
|
|
694
|
-
try:
|
|
695
|
-
self.exit(join=False)
|
|
696
|
-
except Exception:
|
|
697
|
-
pass
|
|
698
|
-
else:
|
|
699
|
-
try_run(self.proc.join)
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
class _FileCacheExitHook:
|
|
703
|
-
def __init__(self, file_cache_proc: _FileCacheProc, cached_files: List[str]):
|
|
704
|
-
self.file_cache_proc = file_cache_proc
|
|
705
|
-
self.cached_files = cached_files
|
|
706
|
-
|
|
707
|
-
def __call__(self):
|
|
708
|
-
if self.file_cache_proc.proc.exitcode is not None:
|
|
709
|
-
return
|
|
710
|
-
self.file_cache_proc.release_files(self.cached_files)
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
def _file_cache_proc_loop(
|
|
714
|
-
file_cache_opts: Dict[str, Any],
|
|
715
|
-
parent_conn: mpConnection,
|
|
716
|
-
):
|
|
717
|
-
if sys.platform == "linux":
|
|
718
|
-
with open("/proc/self/comm", "w") as f:
|
|
719
|
-
f.write(f"File cache")
|
|
720
|
-
|
|
721
|
-
assert isinstance(file_cache_opts, dict)
|
|
722
|
-
assert isinstance(parent_conn, mpConnection)
|
|
723
|
-
|
|
724
|
-
from returnn.util.file_cache import FileCache
|
|
725
|
-
|
|
726
|
-
file_cache = FileCache(**file_cache_opts)
|
|
727
|
-
|
|
728
|
-
try:
|
|
729
|
-
while True:
|
|
730
|
-
msg, kwargs = parent_conn.recv()
|
|
731
|
-
if msg == "exit":
|
|
732
|
-
break
|
|
733
|
-
elif msg == "handle_cached_files_in_config":
|
|
734
|
-
res, files = file_cache.handle_cached_files_in_config(**kwargs)
|
|
735
|
-
parent_conn.send(("config_and_cached_files", (res, files)))
|
|
736
|
-
elif msg == "release_files":
|
|
737
|
-
file_cache.release_files(**kwargs)
|
|
738
|
-
else:
|
|
739
|
-
raise Exception(f"unknown msg {msg!r}")
|
|
740
|
-
except KeyboardInterrupt: # when parent dies
|
|
741
|
-
pass
|
|
@@ -9,9 +9,10 @@ See https://github.com/rwth-i6/returnn/issues/1519 for initial discussion.
|
|
|
9
9
|
Main class is :class:`FileCache`.
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
-
from typing import Any, Collection, List, Tuple
|
|
12
|
+
from typing import Any, Collection, List, Optional, Tuple
|
|
13
13
|
import errno
|
|
14
14
|
import os
|
|
15
|
+
import pathlib
|
|
15
16
|
import time
|
|
16
17
|
import shutil
|
|
17
18
|
from dataclasses import dataclass
|
|
@@ -19,9 +20,10 @@ from collections import defaultdict
|
|
|
19
20
|
from contextlib import contextmanager
|
|
20
21
|
from threading import Thread, Event
|
|
21
22
|
from .basic import expand_env_vars, LockFile, human_bytes_size
|
|
23
|
+
from returnn.config import Config, get_global_config
|
|
22
24
|
|
|
23
25
|
|
|
24
|
-
__all__ = ["FileCache", "CachedFile"]
|
|
26
|
+
__all__ = ["FileCache", "CachedFile", "get_instance"]
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
class FileCache:
|
|
@@ -78,8 +80,6 @@ class FileCache:
|
|
|
78
80
|
assert cleanup_disk_usage_wanted_multiplier >= 1.0
|
|
79
81
|
self._cleanup_disk_usage_wanted_multiplier = cleanup_disk_usage_wanted_multiplier
|
|
80
82
|
self._touch_files_thread = _TouchFilesThread(cache_base_dir=self.cache_directory)
|
|
81
|
-
self._touch_files_thread.start()
|
|
82
|
-
self._recent_full_cleanup_time = float("-inf")
|
|
83
83
|
assert num_tries > 0
|
|
84
84
|
self._num_tries = num_tries
|
|
85
85
|
|
|
@@ -151,13 +151,21 @@ class FileCache:
|
|
|
151
151
|
int(self._cleanup_disk_usage_wanted_multiplier * need_at_least_free_space_size),
|
|
152
152
|
int(self._cleanup_disk_usage_wanted_free_ratio * disk_usage.total),
|
|
153
153
|
)
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
154
|
+
cleanup_timestamp_file = self.cache_directory + "/.recent_full_cleanup"
|
|
155
|
+
try:
|
|
156
|
+
last_full_cleanup = os.stat(cleanup_timestamp_file).st_mtime
|
|
157
|
+
except FileNotFoundError:
|
|
158
|
+
last_full_cleanup = float("-inf")
|
|
158
159
|
# Get current time now, so that cur_time - mtime is pessimistic,
|
|
159
160
|
# and does not count the time for the cleanup itself.
|
|
160
161
|
cur_time = time.time()
|
|
162
|
+
# If we have enough free space, and we did a full cleanup recently, we don't need to do anything.
|
|
163
|
+
if want_free_space_size <= disk_usage.free and cur_time - last_full_cleanup < 60 * 10:
|
|
164
|
+
return
|
|
165
|
+
# immediately update the file's timestamp to reduce racyness between worker processes
|
|
166
|
+
# Path().touch() also creates the file if it doesn't exist yet
|
|
167
|
+
pathlib.Path(cleanup_timestamp_file).touch(exist_ok=True)
|
|
168
|
+
# Do a full cleanup, i.e. iterate through all files in cache directory and check their mtime.
|
|
161
169
|
all_files = [] # mtime, neg size (better for sorting), filename
|
|
162
170
|
for root, dirs, files in os.walk(self.cache_directory):
|
|
163
171
|
for rel_fn in files:
|
|
@@ -256,8 +264,6 @@ class FileCache:
|
|
|
256
264
|
except Exception as exc:
|
|
257
265
|
print(f"FileCache: Error while removing empty dir {root}: {type(exc).__name__}: {exc}")
|
|
258
266
|
|
|
259
|
-
self._recent_full_cleanup_time = time.monotonic()
|
|
260
|
-
|
|
261
267
|
def handle_cached_files_in_config(self, config: Any) -> Tuple[Any, List[str]]:
|
|
262
268
|
"""
|
|
263
269
|
:param config: some config, e.g. dict, or any nested structure
|
|
@@ -337,6 +343,17 @@ class FileCache:
|
|
|
337
343
|
return True
|
|
338
344
|
|
|
339
345
|
|
|
346
|
+
def get_instance(config: Optional[Config] = None) -> FileCache:
|
|
347
|
+
"""
|
|
348
|
+
Returns a file cache instance potentially initialized by the global config.
|
|
349
|
+
|
|
350
|
+
Uses defaults if no global config is set.
|
|
351
|
+
"""
|
|
352
|
+
config = config or get_global_config(return_empty_if_none=True)
|
|
353
|
+
kwargs = config.typed_value("file_cache_opts") or {}
|
|
354
|
+
return FileCache(**kwargs)
|
|
355
|
+
|
|
356
|
+
|
|
340
357
|
def _copy_with_prealloc(src: str, dst: str):
|
|
341
358
|
"""
|
|
342
359
|
Copies the file at `src` to `dst` preallocating the space at `dst` before the
|
|
@@ -387,6 +404,7 @@ class _TouchFilesThread(Thread):
|
|
|
387
404
|
self.files = defaultdict(int) # usage counter
|
|
388
405
|
self.interval = interval
|
|
389
406
|
self.cache_base_dir = cache_base_dir
|
|
407
|
+
self._is_started = False # careful: `_started` is already a member of the base class
|
|
390
408
|
|
|
391
409
|
def run(self):
|
|
392
410
|
"""thread main loop"""
|
|
@@ -400,9 +418,17 @@ class _TouchFilesThread(Thread):
|
|
|
400
418
|
if self.stop.wait(self.interval):
|
|
401
419
|
return
|
|
402
420
|
|
|
421
|
+
def start_once(self):
|
|
422
|
+
"""reentrant variant of start() that can safely be called multiple times"""
|
|
423
|
+
if self._is_started:
|
|
424
|
+
return
|
|
425
|
+
self._is_started = True
|
|
426
|
+
self.start()
|
|
427
|
+
|
|
403
428
|
def files_extend(self, files: Collection[str]):
|
|
404
429
|
"""append"""
|
|
405
430
|
assert isinstance(files, (list, set, tuple))
|
|
431
|
+
self.start_once()
|
|
406
432
|
for file in files:
|
|
407
433
|
self.files[file] += 1
|
|
408
434
|
|
|
@@ -870,7 +870,12 @@ def test_file_cache():
|
|
|
870
870
|
# Check cleanup mechanism.
|
|
871
871
|
cache._cleanup_files_always_older_than_days = 4 / 60 / 60 / 24
|
|
872
872
|
print("Cache older than secs:", cache._cleanup_files_always_older_than_days * 24 * 60 * 60)
|
|
873
|
-
|
|
873
|
+
cleanup_timestamp_file = cache_dir + "/.recent_full_cleanup"
|
|
874
|
+
try:
|
|
875
|
+
last_full_cleanup = os.stat(cleanup_timestamp_file).st_mtime
|
|
876
|
+
except FileNotFoundError:
|
|
877
|
+
last_full_cleanup = float("-inf")
|
|
878
|
+
print("Recent cleanup is ago:", time.time() - last_full_cleanup, "secs")
|
|
874
879
|
# Note: After the first cleanup, there are still dirs maybe left over, because dirs are only cleaned
|
|
875
880
|
# when their mtime is a older than some threshold.
|
|
876
881
|
# However, when we just deleted some file inside, that would have updated the mtime of the dir.
|
|
@@ -879,14 +884,17 @@ def test_file_cache():
|
|
|
879
884
|
prev_count_dirs = None
|
|
880
885
|
while True:
|
|
881
886
|
time.sleep(0.1)
|
|
882
|
-
|
|
887
|
+
os.unlink(cleanup_timestamp_file) # reset
|
|
888
|
+
time.sleep(0.1)
|
|
883
889
|
cache.cleanup()
|
|
884
890
|
count_files = 0
|
|
885
891
|
count_dirs = 0
|
|
886
892
|
for root, dirs, files in os.walk(cache_dir):
|
|
893
|
+
# ignore cleanup timestamp file
|
|
887
894
|
for fn in dirs + files:
|
|
888
895
|
print(f"{root}/{fn}", "age:", time.time() - os.stat(f"{root}/{fn}").st_mtime, "sec")
|
|
889
|
-
|
|
896
|
+
leftover_files = [f for f in files if "recent_full_cleanup" not in f]
|
|
897
|
+
count_files += len(leftover_files)
|
|
890
898
|
count_dirs += len(dirs)
|
|
891
899
|
print("count files:", count_files, "count dirs:", count_dirs)
|
|
892
900
|
assert count_files == 0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-hyper-param-tuning.config
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-record-and-push-to-webserver.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-chunking-blstm.12ax.config
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-contribrnn-lstm.12ax.config
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-maxgradnorm-lstm.12ax.config
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-native-lstm-lowmem.12ax.config
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-native-lstm.12ax.config
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-native-lstm2.12ax.config
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-native-lstm2.12ax.tuned.config
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-neural-transducer.12ax.config
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-rec-explicit-lstm.config
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-rec-explicit-rnn.config
RENAMED
|
File without changes
|
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-search-compiled-graph.py
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-tf-vanilla-lstm.12ax.config
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/demo-upd-mult-model.lstm.12ax.config
RENAMED
|
File without changes
|
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/create_IAM_dataset.py
RENAMED
|
File without changes
|
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/IAM/features/raw/demo.h5
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/artificial/create_test_h5.py
RENAMED
|
File without changes
|
{returnn-1.20240621.152144 → returnn-1.20240621.194850}/demos/mdlstm/artificial/forwardconfig
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|