Export model.state_dict() ========================= When to use it -------------- During model training, we save checkpoints periodically to disk. A checkpoint contains the following information: - ``model.state_dict()`` - ``optimizer.state_dict()`` - and some other information related to training When we need to resume the training process from some point, we need a checkpoint. However, if we want to publish the model for inference, then only ``model.state_dict()`` is needed. In this case, we need to strip all other information except ``model.state_dict()`` to reduce the file size of the published model. How to export ------------- Every recipe contains a file ``export.py`` that you can use to export ``model.state_dict()`` by taking some checkpoints as inputs. .. hint:: Each ``export.py`` contains well-documented usage information. In the following, we use ``_ as an example. .. note:: The steps for other recipes are almost the same. .. code-block:: bash cd egs/librispeech/ASR ./pruned_transducer_stateless3/export.py \ --exp-dir ./pruned_transducer_stateless3/exp \ --tokens data/lang_bpe_500/tokens.txt \ --epoch 20 \ --avg 10 will generate a file ``pruned_transducer_stateless3/exp/pretrained.pt``, which is a dict containing ``{"model": model.state_dict()}`` saved by ``torch.save()``. How to use the exported model ----------------------------- For each recipe, we provide pretrained models hosted on huggingface. You can find links to pretrained models in ``RESULTS.md`` of each dataset. In the following, we demonstrate how to use the pretrained model from ``_. .. code-block:: bash cd egs/librispeech/ASR git lfs install git clone https://huggingface.co/csukuangfj/icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13 After cloning the repo with ``git lfs``, you will find several files in the folder ``icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/exp`` that have a prefix ``pretrained-``. Those files contain ``model.state_dict()`` exported by the above ``export.py``. In each recipe, there is also a file ``pretrained.py``, which can use ``pretrained-xxx.pt`` to decode waves. The following is an example: .. code-block:: bash cd egs/librispeech/ASR ./pruned_transducer_stateless3/pretrained.py \ --checkpoint ./icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/exp/pretrained-iter-1224000-avg-14.pt \ --tokens ./icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/data/lang_bpe_500/tokens.txt \ --method greedy_search \ ./icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/test_wavs/1089-134686-0001.wav \ ./icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/test_wavs/1221-135766-0001.wav \ ./icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/test_wavs/1221-135766-0002.wav The above commands show how to use the exported model with ``pretrained.py`` to decode multiple sound files. Its output is given as follows for reference: .. literalinclude:: ./code/export-model-state-dict-pretrained-out.txt Use the exported model to run decode.py --------------------------------------- When we publish the model, we always note down its WERs on some test dataset in ``RESULTS.md``. This section describes how to use the pretrained model to reproduce the WER. .. code-block:: bash cd egs/librispeech/ASR git lfs install git clone https://huggingface.co/csukuangfj/icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13 cd icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/exp ln -s pretrained-iter-1224000-avg-14.pt epoch-9999.pt cd ../.. We create a symlink with name ``epoch-9999.pt`` to ``pretrained-iter-1224000-avg-14.pt``, so that we can pass ``--epoch 9999 --avg 1`` to ``decode.py`` in the following command: .. code-block:: bash ./pruned_transducer_stateless3/decode.py \ --epoch 9999 \ --avg 1 \ --exp-dir ./icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/exp \ --lang-dir ./icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/data/lang_bpe_500 \ --max-duration 600 \ --decoding-method greedy_search You will find the decoding results in ``./icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/exp/greedy_search``. .. caution:: For some recipes, you also need to pass ``--use-averaged-model False`` to ``decode.py``. The reason is that the exported pretrained model is already the averaged one. .. hint:: Before running ``decode.py``, we assume that you have already run ``prepare.sh`` to prepare the test dataset.