]> git.djapps.eu Git - pkg/ggml/sources/whisper.cpp/commitdiff
whisper : add large-v3-turbo (#2440)
authorGeorgi Gerganov <redacted>
Tue, 1 Oct 2024 12:57:06 +0000 (15:57 +0300)
committerGitHub <redacted>
Tue, 1 Oct 2024 12:57:06 +0000 (15:57 +0300)
16 files changed:
.gitignore
Makefile
README.md
bindings/go/examples/go-model-download/main.go
examples/livestream.sh
examples/twitch.sh
models/README.md
models/convert-h5-to-coreml.py
models/convert-whisper-to-coreml.py
models/convert-whisper-to-openvino.py
models/download-coreml-model.sh
models/download-ggml-model.cmd
models/download-ggml-model.sh
scripts/bench.py
scripts/convert-all.sh
tests/run-tests.sh

index 44648fa7ba010b3392e9f7b3c4e903c7ab1fb0ee..8301c12b0b69e2a05b5dee71549a6915cde3bdd7 100644 (file)
@@ -3,6 +3,7 @@
 .cache/
 .coreml/
 .test/
+.venv/
 .vs/
 .vscode/
 .DS_Store
index 61de7dfe5b554ac43f068fc44cb49b620d7077cb..3c69aa8532a9186ce0531f7449db5ae262425bd0 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1145,8 +1145,9 @@ samples:
 .PHONY: large-v1
 .PHONY: large-v2
 .PHONY: large-v3
+.PHONY: large-v3-turbo
 
-tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 large-v3: main
+tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 large-v3 large-v3-turbo: main
        bash ./models/download-ggml-model.sh $@
        @echo ""
        @echo "==============================================="
index 808717cb6078a0bffba53b2d188342a367b7696f..7c5b5d17e2384db3f9d730aa95fd066b4abf7c93 100644 (file)
--- a/README.md
+++ b/README.md
@@ -236,6 +236,7 @@ make medium
 make large-v1
 make large-v2
 make large-v3
+make large-v3-turbo
 ```
 
 ## Memory usage
index 3522d881717b42246a5c41c2da0b3af6575b9262..d0c1cc78b1e4bad7afbf48e9f0df5478153f6dce 100644 (file)
@@ -24,7 +24,7 @@ const (
 
 var (
        // The models which will be downloaded, if no model is specified as an argument
-       modelNames = []string{"ggml-tiny.en", "ggml-tiny", "ggml-base.en", "ggml-base", "ggml-small.en", "ggml-small", "ggml-medium.en", "ggml-medium", "ggml-large-v1", "ggml-large-v2", "ggml-large-v3"}
+       modelNames = []string{"ggml-tiny.en", "ggml-tiny", "ggml-base.en", "ggml-base", "ggml-small.en", "ggml-small", "ggml-medium.en", "ggml-medium", "ggml-large-v1", "ggml-large-v2", "ggml-large-v3", "large-v3-turbo"}
 )
 
 var (
index fbeb6dbccfdb92584df07f07e6fef9050c396934..7c044199c7a36441c2a6a4d2214984c810e1aeee 100755 (executable)
@@ -48,7 +48,7 @@ if [ -n "$3" ]; then
 fi
 
 # Whisper models
-models=( "tiny.en" "tiny" "base.en" "base" "small.en" "small" "medium.en" "medium" "large-v1" "large-v2" "large-v3" )
+models=( "tiny.en" "tiny" "base.en" "base" "small.en" "small" "medium.en" "medium" "large-v1" "large-v2" "large-v3" "large-v3-turbo" )
 
 # list available models
 function list_models {
index 0403fea90153b4ba65f64d5402984bdabcbe1d3e..1cd81428364dbb1dc63c3c970ab81c472079464e 100755 (executable)
@@ -21,7 +21,7 @@ help()
     echo "Usage: ./twitch.sh -s [step] -m [model] -t [threads] [url]"
     echo "options:"
     echo "-s       Step in seconds (default is $step)."
-    echo "-m       Choose model, options are: 'tiny.en' 'tiny' 'base.en' 'base' 'small.en' 'small' 'medium.en' 'medium' 'large-v1' 'large-v2' 'large-v3' (default is '$model')."
+    echo "-m       Choose model, options are: 'tiny.en' 'tiny' 'base.en' 'base' 'small.en' 'small' 'medium.en' 'medium' 'large-v1' 'large-v2' 'large-v3' 'large-v3-turbo' (default is '$model')."
     echo "-t       Number of threads to use."
     echo "-h       Print this help page."
     echo
index 3ef84a4e55d9ba4a922670546bb6cc9f6a8467a1..3f5f4b51e28e83d723c49f24f75a680befade310 100644 (file)
@@ -42,22 +42,24 @@ rmdir models/whisper-medium
 
 ## Available models
 
-| Model         | Disk    | SHA                                        |
-| ------------- | ------- | ------------------------------------------ |
-| tiny          | 75 MiB  | `bd577a113a864445d4c299885e0cb97d4ba92b5f` |
-| tiny.en       | 75 MiB  | `c78c86eb1a8faa21b369bcd33207cc90d64ae9df` |
-| base          | 142 MiB | `465707469ff3a37a2b9b8d8f89f2f99de7299dac` |
-| base.en       | 142 MiB | `137c40403d78fd54d454da0f9bd998f78703390c` |
-| small         | 466 MiB | `55356645c2b361a969dfd0ef2c5a50d530afd8d5` |
-| small.en      | 466 MiB | `db8a495a91d927739e50b3fc1cc4c6b8f6c2d022` |
-| small.en-tdrz | 465 MiB | `b6c6e7e89af1a35c08e6de56b66ca6a02a2fdfa1` |
-| medium        | 1.5 GiB | `fd9727b6e1217c2f614f9b698455c4ffd82463b4` |
-| medium.en     | 1.5 GiB | `8c30f0e44ce9560643ebd10bbe50cd20eafd3723` |
-| large-v1      | 2.9 GiB | `b1caaf735c4cc1429223d5a74f0f4d0b9b59a299` |
-| large-v2      | 2.9 GiB | `0f4c8e34f21cf1a914c59d8b3ce882345ad349d6` |
-| large-v2-q5_0 | 1.1 GiB | `00e39f2196344e901b3a2bd5814807a769bd1630` |
-| large-v3      | 2.9 GiB | `ad82bf6a9043ceed055076d0fd39f5f186ff8062` |
-| large-v3-q5_0 | 1.1 GiB | `e6e2ed78495d403bef4b7cff42ef4aaadcfea8de` |
+| Model               | Disk    | SHA                                        |
+| ------------------- | ------- | ------------------------------------------ |
+| tiny                | 75 MiB  | `bd577a113a864445d4c299885e0cb97d4ba92b5f` |
+| tiny.en             | 75 MiB  | `c78c86eb1a8faa21b369bcd33207cc90d64ae9df` |
+| base                | 142 MiB | `465707469ff3a37a2b9b8d8f89f2f99de7299dac` |
+| base.en             | 142 MiB | `137c40403d78fd54d454da0f9bd998f78703390c` |
+| small               | 466 MiB | `55356645c2b361a969dfd0ef2c5a50d530afd8d5` |
+| small.en            | 466 MiB | `db8a495a91d927739e50b3fc1cc4c6b8f6c2d022` |
+| small.en-tdrz       | 465 MiB | `b6c6e7e89af1a35c08e6de56b66ca6a02a2fdfa1` |
+| medium              | 1.5 GiB | `fd9727b6e1217c2f614f9b698455c4ffd82463b4` |
+| medium.en           | 1.5 GiB | `8c30f0e44ce9560643ebd10bbe50cd20eafd3723` |
+| large-v1            | 2.9 GiB | `b1caaf735c4cc1429223d5a74f0f4d0b9b59a299` |
+| large-v2            | 2.9 GiB | `0f4c8e34f21cf1a914c59d8b3ce882345ad349d6` |
+| large-v2-q5_0       | 1.1 GiB | `00e39f2196344e901b3a2bd5814807a769bd1630` |
+| large-v3            | 2.9 GiB | `ad82bf6a9043ceed055076d0fd39f5f186ff8062` |
+| large-v3-q5_0       | 1.1 GiB | `e6e2ed78495d403bef4b7cff42ef4aaadcfea8de` |
+| large-v3-turbo      | 1.5 GiB | `4af2b29d7ec73d781377bfd1758ca957a807e941` |
+| large-v3-turbo-q5_0 | 547 MiB | `e050f7970618a659205450ad97eb95a18d69c9ee` |
 
 Models are multilingual unless the model name includes `.en`. Models ending in `-q5_0` are [quantized](../README.md#quantization). Models ending in `-tdrz` support local diarization (marking of speaker turns) using [tinydiarize](https://github.com/akashmjn/tinydiarize). More information about models is available [upstream (openai/whisper)](https://github.com/openai/whisper#available-models-and-languages). The list above is a subset of the models supported by the [download-ggml-model.sh](download-ggml-model.sh) script, but many more are available at https://huggingface.co/ggerganov/whisper.cpp/tree/main and elsewhere.
 
index 57341ab0995f7e8274cfa552c151e318a085fbd7..541fa2e195c856106bb4ddfbe69978fe6560e42b 100644 (file)
@@ -78,14 +78,14 @@ def convert_hf_whisper(hf_model_name_or_path: str, whisper_state_path: str):
 # Ported from models/convert-whisper-to-coreml.py
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
-    parser.add_argument("--model-name", type=str, help="name of model to convert (e.g. tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v1, large-v2, large-v3)", required=True)
+    parser.add_argument("--model-name", type=str, help="name of model to convert (e.g. tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v1, large-v2, large-v3, large-v3-turbo)", required=True)
     parser.add_argument("--model-path", type=str, help="path to the model (e.g. if published on HuggingFace: Oblivion208/whisper-tiny-cantonese)", required=True)
     parser.add_argument("--encoder-only", type=bool, help="only convert encoder", default=False)
     parser.add_argument("--quantize",     type=bool, help="quantize weights to F16", default=False)
     parser.add_argument("--optimize-ane", type=bool, help="optimize for ANE execution (currently broken)", default=False)
     args = parser.parse_args()
 
-    if args.model_name not in ["tiny", "tiny.en", "base", "base.en", "small", "small.en", "medium", "medium.en", "large-v1", "large-v2", "large-v3"]:
+    if args.model_name not in ["tiny", "tiny.en", "base", "base.en", "small", "small.en", "medium", "medium.en", "large-v1", "large-v2", "large-v3", "large-v3-turbo"]:
         raise ValueError("Invalid model name")
 
     pt_target_path = f"models/hf-{args.model_name}.pt"
index 046aabd224e0150fa9724e0737c85824af177e12..f66683e9b217ee2a6f470876a9085106e4266062 100644 (file)
@@ -283,13 +283,13 @@ def convert_decoder(hparams, model, quantize=False):
 
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
-    parser.add_argument("--model", type=str, help="model to convert (e.g. tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v1, large-v2, large-v3)", required=True)
+    parser.add_argument("--model", type=str, help="model to convert (e.g. tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v1, large-v2, large-v3, large-v3-turbo)", required=True)
     parser.add_argument("--encoder-only", type=bool, help="only convert encoder", default=False)
     parser.add_argument("--quantize",     type=bool, help="quantize weights to F16", default=False)
     parser.add_argument("--optimize-ane", type=bool, help="optimize for ANE execution (currently broken)", default=False)
     args = parser.parse_args()
 
-    if args.model not in ["tiny", "tiny.en", "base", "base.en", "small", "small.en", "small.en-tdrz", "medium", "medium.en", "large-v1", "large-v2", "large-v3"]:
+    if args.model not in ["tiny", "tiny.en", "base", "base.en", "small", "small.en", "small.en-tdrz", "medium", "medium.en", "large-v1", "large-v2", "large-v3", "large-v3-turbo"]:
         raise ValueError("Invalid model name")
 
     whisper = load_model(args.model).cpu()
index 5df0be78d9b4a17e0ffd1899f521e1eae7583877..3124dd3d7cf36da61220e70dda084c9d7afa564c 100644 (file)
@@ -45,10 +45,10 @@ def convert_encoder(hparams, encoder, mname):
 
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
-    parser.add_argument("--model", type=str, help="model to convert (e.g. tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v1, large-v2, large-v3)", required=True)
+    parser.add_argument("--model", type=str, help="model to convert (e.g. tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v1, large-v2, large-v3, large-v3-turbo)", required=True)
     args = parser.parse_args()
 
-    if args.model not in ["tiny", "tiny.en", "base", "base.en", "small", "small.en", "medium", "medium.en", "large-v1", "large-v2", "large-v3"]:
+    if args.model not in ["tiny", "tiny.en", "base", "base.en", "small", "small.en", "medium", "medium.en", "large-v1", "large-v2", "large-v3", "large-v3-turbo"]:
         raise ValueError("Invalid model name")
 
     whisper = load_model(args.model).cpu()
index 405b355ea02c2e63bb6faa8cf422b99cf163abd7..dca26a2067b9fdb023e5d273fd1e534672b6a0f1 100755 (executable)
@@ -22,7 +22,7 @@ get_script_path() {
 models_path="$(get_script_path)"
 
 # Whisper models
-models="tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 large-v3"
+models="tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 large-v3 large-v3-turbo"
 
 # list available models
 list_models() {
index 4d21531d2e1d32346a17f9b2ffd053ebeee1119e..5d5b3b86267c584e5f389052a854c83a83586e63 100644 (file)
@@ -8,7 +8,7 @@ popd
 set argc=0
 for %%x in (%*) do set /A argc+=1
 
-set models=tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 large-v3
+set models=tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 large-v3 large-v3-turbo
 
 if %argc% neq 1 (
   echo.
index ca2cefe74068497b5b2434066f939af410840aee..e555aee8bdb072dbbddff583dcbba050921069cb 100755 (executable)
@@ -46,7 +46,9 @@ large-v1
 large-v2
 large-v2-q5_0
 large-v3
-large-v3-q5_0"
+large-v3-q5_0
+large-v3-turbo
+large-v3-turbo-q5_0"
 
 # list available models
 list_models() {
index 25a09db80b01029c0a1e8a083579fe9a8c49271c..143f4fbaed790c0f7ee0fb033268ed4a95783b19 100644 (file)
@@ -64,6 +64,7 @@ models = [
     "ggml-large-v1.bin",
     "ggml-large-v2.bin",
     "ggml-large-v3.bin",
+    "ggml-large-v3-turbo.bin",
 ]
 
 
index ff765c92d9e7e11ab5db18eee30121ad93429d61..82cc8013ae476b0d621711eeb797aee9972a4987 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-models=( "tiny.en" "tiny" "base.en" "base" "small.en" "small" "medium.en" "medium" "large-v1" "large-v2" "large-v3" )
+models=( "tiny.en" "tiny" "base.en" "base" "small.en" "small" "medium.en" "medium" "large-v1" "large-v2" "large-v3" "large-v3-turbo" )
 
 for model in "${models[@]}"; do
     python3 models/convert-pt-to-ggml.py ~/.cache/whisper/$model.pt ../whisper models/
index a9606a1f8a826e12e30f7839ce967726de99ee28..71f9f2d39784c03e3067518101bfc1dbd979ab13 100755 (executable)
@@ -19,7 +19,7 @@
 cd `dirname $0`
 
 # Whisper models
-models=( "tiny.en" "tiny" "base.en" "base" "small.en" "small" "medium.en" "medium" "large-v1" "large-v2" "large-v3" )
+models=( "tiny.en" "tiny" "base.en" "base" "small.en" "small" "medium.en" "medium" "large-v1" "large-v2" "large-v3" "large-v3-turbo" )
 
 # list available models
 function list_models {