From c5796e3f9afd96a3b70d701e88de891d415cd893 Mon Sep 17 00:00:00 2001
From: csukuangfj
Date: Fri, 14 Oct 2022 02:18:34 +0000
Subject: [PATCH] deploy: 11bff575863064b0d0ee6792b1505a82bff0a5fd
---
_sources/index.rst.txt | 1 +
.../export-model-state-dict.rst.txt | 135 +++++++++
_sources/model-export/export-ncnn.rst.txt | 12 +
_sources/model-export/export-onnx.rst.txt | 69 +++++
.../export-with-torch-jit-script.rst.txt | 58 ++++
.../export-with-torch-jit-trace.rst.txt | 69 +++++
_sources/model-export/index.rst.txt | 14 +
.../lstm_pruned_stateless_transducer.rst.txt | 2 +
contributing/code-style.html | 1 +
contributing/doc.html | 1 +
contributing/how-to-create-a-recipe.html | 1 +
contributing/index.html | 1 +
genindex.html | 1 +
huggingface/index.html | 1 +
huggingface/pretrained-models.html | 1 +
huggingface/spaces.html | 1 +
index.html | 9 +
installation/index.html | 5 +-
model-export/export-model-state-dict.html | 262 ++++++++++++++++++
model-export/export-ncnn.html | 125 +++++++++
model-export/export-onnx.html | 182 ++++++++++++
.../export-with-torch-jit-script.html | 172 ++++++++++++
model-export/export-with-torch-jit-trace.html | 183 ++++++++++++
model-export/index.html | 148 ++++++++++
objects.inv | Bin 719 -> 908 bytes
recipes/aishell/conformer_ctc.html | 1 +
recipes/aishell/index.html | 1 +
recipes/aishell/stateless_transducer.html | 1 +
recipes/aishell/tdnn_lstm_ctc.html | 1 +
recipes/index.html | 5 +-
recipes/librispeech/conformer_ctc.html | 1 +
recipes/librispeech/index.html | 1 +
.../lstm_pruned_stateless_transducer.html | 7 +-
recipes/librispeech/tdnn_lstm_ctc.html | 1 +
recipes/timit/index.html | 1 +
recipes/timit/tdnn_ligru_ctc.html | 1 +
recipes/timit/tdnn_lstm_ctc.html | 1 +
recipes/yesno/index.html | 1 +
recipes/yesno/tdnn.html | 1 +
search.html | 1 +
searchindex.js | 2 +-
41 files changed, 1473 insertions(+), 8 deletions(-)
create mode 100644 _sources/model-export/export-model-state-dict.rst.txt
create mode 100644 _sources/model-export/export-ncnn.rst.txt
create mode 100644 _sources/model-export/export-onnx.rst.txt
create mode 100644 _sources/model-export/export-with-torch-jit-script.rst.txt
create mode 100644 _sources/model-export/export-with-torch-jit-trace.rst.txt
create mode 100644 _sources/model-export/index.rst.txt
create mode 100644 model-export/export-model-state-dict.html
create mode 100644 model-export/export-ncnn.html
create mode 100644 model-export/export-onnx.html
create mode 100644 model-export/export-with-torch-jit-script.html
create mode 100644 model-export/export-with-torch-jit-trace.html
create mode 100644 model-export/index.html
diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt
index 29491e3dc..be9977ca9 100644
--- a/_sources/index.rst.txt
+++ b/_sources/index.rst.txt
@@ -21,6 +21,7 @@ speech recognition recipes using `k2 `_.
:caption: Contents:
installation/index
+ model-export/index
recipes/index
contributing/index
huggingface/index
diff --git a/_sources/model-export/export-model-state-dict.rst.txt b/_sources/model-export/export-model-state-dict.rst.txt
new file mode 100644
index 000000000..c3bbd5708
--- /dev/null
+++ b/_sources/model-export/export-model-state-dict.rst.txt
@@ -0,0 +1,135 @@
+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 \
+ --bpe-model data/lang_bpe_500/bpe.model \
+ --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 \
+ --bpe-model ./icefall-asr-librispeech-pruned-transducer-stateless3-2022-05-13/data/lang_bpe_500/bpe.model \
+ --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.
diff --git a/_sources/model-export/export-ncnn.rst.txt b/_sources/model-export/export-ncnn.rst.txt
new file mode 100644
index 000000000..3dbb8b514
--- /dev/null
+++ b/_sources/model-export/export-ncnn.rst.txt
@@ -0,0 +1,12 @@
+Export to ncnn
+==============
+
+We support exporting LSTM transducer models to `ncnn `_.
+
+Please refer to :ref:`export-model-for-ncnn` for details.
+
+We also provide ``_
+performing speech recognition using ``ncnn`` with exported models.
+It has been tested on Linux, macOS, Windows, and Raspberry Pi. The project is
+self-contained and can be statically linked to produce a binary containing
+everything needed.
diff --git a/_sources/model-export/export-onnx.rst.txt b/_sources/model-export/export-onnx.rst.txt
new file mode 100644
index 000000000..dd4b3437a
--- /dev/null
+++ b/_sources/model-export/export-onnx.rst.txt
@@ -0,0 +1,69 @@
+Export to ONNX
+==============
+
+In this section, we describe how to export models to ONNX.
+
+.. hint::
+
+ Only non-streaming conformer transducer models are tested.
+
+
+When to use it
+--------------
+
+It you want to use an inference framework that supports ONNX
+to run the pretrained model.
+
+
+How to export
+-------------
+
+We use
+``_
+as an example in the following.
+
+.. code-block:: bash
+
+ cd egs/librispeech/ASR
+ epoch=14
+ avg=2
+
+ ./pruned_transducer_stateless3/export.py \
+ --exp-dir ./pruned_transducer_stateless3/exp \
+ --bpe-model data/lang_bpe_500/bpe.model \
+ --epoch $epoch \
+ --avg $avg \
+ --onnx 1
+
+It will generate the following files inside ``pruned_transducer_stateless3/exp``:
+
+ - ``encoder.onnx``
+ - ``decoder.onnx``
+ - ``joiner.onnx``
+ - ``joiner_encoder_proj.onnx``
+ - ``joiner_decoder_proj.onnx``
+
+You can use ``./pruned_transducer_stateless3/exp/onnx_pretrained.py`` to decode
+waves with the generated files:
+
+.. code-block:: bash
+
+ ./pruned_transducer_stateless3/onnx_pretrained.py \
+ --bpe-model ./data/lang_bpe_500/bpe.model \
+ --encoder-model-filename ./pruned_transducer_stateless3/exp/encoder.onnx \
+ --decoder-model-filename ./pruned_transducer_stateless3/exp/decoder.onnx \
+ --joiner-model-filename ./pruned_transducer_stateless3/exp/joiner.onnx \
+ --joiner-encoder-proj-model-filename ./pruned_transducer_stateless3/exp/joiner_encoder_proj.onnx \
+ --joiner-decoder-proj-model-filename ./pruned_transducer_stateless3/exp/joiner_decoder_proj.onnx \
+ /path/to/foo.wav \
+ /path/to/bar.wav \
+ /path/to/baz.wav
+
+
+How to use the exported model
+-----------------------------
+
+We also provide ``_
+performing speech recognition using `onnxruntime `_
+with exported models.
+It has been tested on Linux, macOS, and Windows.
diff --git a/_sources/model-export/export-with-torch-jit-script.rst.txt b/_sources/model-export/export-with-torch-jit-script.rst.txt
new file mode 100644
index 000000000..a041dc1d5
--- /dev/null
+++ b/_sources/model-export/export-with-torch-jit-script.rst.txt
@@ -0,0 +1,58 @@
+.. _export-model-with-torch-jit-script:
+
+Export model with torch.jit.script()
+===================================
+
+In this section, we describe how to export a model via
+``torch.jit.script()``.
+
+When to use it
+--------------
+
+If we want to use our trained model with torchscript,
+we can use ``torch.jit.script()``.
+
+.. hint::
+
+ See :ref:`export-model-with-torch-jit-trace`
+ if you want to use ``torch.jit.trace()``.
+
+How to export
+-------------
+
+We use
+``_
+as an example in the following.
+
+.. code-block:: bash
+
+ cd egs/librispeech/ASR
+ epoch=14
+ avg=1
+
+ ./pruned_transducer_stateless3/export.py \
+ --exp-dir ./pruned_transducer_stateless3/exp \
+ --bpe-model data/lang_bpe_500/bpe.model \
+ --epoch $epoch \
+ --avg $avg \
+ --jit 1
+
+It will generate a file ``cpu_jit.pt`` in ``pruned_transducer_stateless3/exp``.
+
+.. caution::
+
+ Don't be confused by ``cpu`` in ``cpu_jit.pt``. We move all parameters
+ to CPU before saving it into a ``pt`` file; that's why we use ``cpu``
+ in the filename.
+
+How to use the exported model
+-----------------------------
+
+Please refer to the following pages for usage:
+
+- ``_
+- ``_
+- ``_
+- ``_
+- ``_
+- ``_
diff --git a/_sources/model-export/export-with-torch-jit-trace.rst.txt b/_sources/model-export/export-with-torch-jit-trace.rst.txt
new file mode 100644
index 000000000..506459909
--- /dev/null
+++ b/_sources/model-export/export-with-torch-jit-trace.rst.txt
@@ -0,0 +1,69 @@
+.. _export-model-with-torch-jit-trace:
+
+Export model with torch.jit.trace()
+===================================
+
+In this section, we describe how to export a model via
+``torch.jit.trace()``.
+
+When to use it
+--------------
+
+If we want to use our trained model with torchscript,
+we can use ``torch.jit.trace()``.
+
+.. hint::
+
+ See :ref:`export-model-with-torch-jit-script`
+ if you want to use ``torch.jit.script()``.
+
+How to export
+-------------
+
+We use
+``_
+as an example in the following.
+
+.. code-block:: bash
+
+ iter=468000
+ avg=16
+
+ cd egs/librispeech/ASR
+
+ ./lstm_transducer_stateless2/export.py \
+ --exp-dir ./lstm_transducer_stateless2/exp \
+ --bpe-model data/lang_bpe_500/bpe.model \
+ --iter $iter \
+ --avg $avg \
+ --jit-trace 1
+
+It will generate three files inside ``lstm_transducer_stateless2/exp``:
+
+ - ``encoder_jit_trace.pt``
+ - ``decoder_jit_trace.pt``
+ - ``joiner_jit_trace.pt``
+
+You can use
+``_
+to decode sound files with the following commands:
+
+.. code-block:: bash
+
+ cd egs/librispeech/ASR
+ ./lstm_transducer_stateless2/jit_pretrained.py \
+ --bpe-model ./data/lang_bpe_500/bpe.model \
+ --encoder-model-filename ./lstm_transducer_stateless2/exp/encoder_jit_trace.pt \
+ --decoder-model-filename ./lstm_transducer_stateless2/exp/decoder_jit_trace.pt \
+ --joiner-model-filename ./lstm_transducer_stateless2/exp/joiner_jit_trace.pt \
+ /path/to/foo.wav \
+ /path/to/bar.wav \
+ /path/to/baz.wav
+
+How to use the exported models
+------------------------------
+
+Please refer to
+``_
+for its usage in `sherpa `_.
+You can also find pretrained models there.
diff --git a/_sources/model-export/index.rst.txt b/_sources/model-export/index.rst.txt
new file mode 100644
index 000000000..9b7a2ee2d
--- /dev/null
+++ b/_sources/model-export/index.rst.txt
@@ -0,0 +1,14 @@
+Model export
+============
+
+In this section, we describe various ways to export models.
+
+
+
+.. toctree::
+
+ export-model-state-dict
+ export-with-torch-jit-trace
+ export-with-torch-jit-script
+ export-onnx
+ export-ncnn
diff --git a/_sources/recipes/librispeech/lstm_pruned_stateless_transducer.rst.txt b/_sources/recipes/librispeech/lstm_pruned_stateless_transducer.rst.txt
index b9d5bdcba..643855cc2 100644
--- a/_sources/recipes/librispeech/lstm_pruned_stateless_transducer.rst.txt
+++ b/_sources/recipes/librispeech/lstm_pruned_stateless_transducer.rst.txt
@@ -515,6 +515,8 @@ To use the generated files with ``./lstm_transducer_stateless2/jit_pretrained``:
Please see ``_
for how to use the exported models in ``sherpa``.
+.. _export-model-for-ncnn:
+
Export model for ncnn
~~~~~~~~~~~~~~~~~~~~~
diff --git a/contributing/code-style.html b/contributing/code-style.html
index 514e1c12d..8e3785bf5 100644
--- a/contributing/code-style.html
+++ b/contributing/code-style.html
@@ -42,6 +42,7 @@
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.
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 gitlfs, 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:
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:
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.
We create a symlink with name epoch-9999.pt to pretrained-iter-1224000-avg-14.pt,
+so that we can pass --epoch9999--avg1 to decode.py in the following
+command:
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-modelFalse
+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.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/model-export/export-ncnn.html b/model-export/export-ncnn.html
new file mode 100644
index 000000000..2338e1df1
--- /dev/null
+++ b/model-export/export-ncnn.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+ Export to ncnn — icefall 0.1 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
We also provide https://github.com/k2-fsa/sherpa-ncnn
+performing speech recognition using ncnn with exported models.
+It has been tested on Linux, macOS, Windows, and Raspberry Pi. The project is
+self-contained and can be statically linked to produce a binary containing
+everything needed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/model-export/export-onnx.html b/model-export/export-onnx.html
new file mode 100644
index 000000000..0c316d7d0
--- /dev/null
+++ b/model-export/export-onnx.html
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+ Export to ONNX — icefall 0.1 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+