-
Notifications
You must be signed in to change notification settings - Fork 6k
parakeet : add support for NVIDIA Parakeet #3735
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 3 commits
Commits
Show all changes
80 commits
Select commit
Hold shift + click to select a range
ad6274f
parakeet : add support for NVIDIA Parakeet
danbev 661c9e2
ci : add -DGGML_NATIVE=OFF to windows job
danbev 1e0c5dd
ci : add GGML_BMI2=OFF to window job
danbev 1ed636a
examples : set flash attention to false for parakeet-cli [no ci]
danbev ac39626
parakeet : initialize ggml_tensors pointers to nullptr [no ci]
danbev 05ffa91
parakeet : remove non relavant fields in parakeet_state [no ci]
danbev b899ce0
parakeet : fix indentation in default params [no ci]
danbev 9fe3b5c
parakeet : check and free ggml_backend_sched_t [no-ci]
danbev ceaa8bb
parakeet : group related types and helpers [no ci]
danbev 6e61988
parakeet : remove parakeet_full_parallel() API and implementation [no…
danbev 66e6b09
parakeet : remove unused timeing fields [no ci]
danbev 2ad47d1
parakeet : generate rel pos tensor in graph instead of in conversion …
danbev 42dcf19
examples : print system info and timings for parakeet-cli [no ci]
danbev 2f9216f
parakeet : add missing free of batch.i_time [no ci]
danbev 27cc5d7
examples : add --output-txt and --output-file to parakeet-cli [no ci]
danbev 93806f4
examples : add --no-prints to parakeet-cli
danbev 3f6b17c
tests : add script to benchmark parakeet.cpp on LibriSpeech [no ci]
danbev d8b74e4
squash! tests : add script to benchmark parakeet.cpp on LibriSpeech […
danbev 3fa1f69
parakeet : enable model conversion on win [no ci]
danbev 0c4f4ba
parakeet : add parakeet_reset_state function [no ci]
danbev cb611a4
examples : reuse context in parakeet-cli [no ci]
danbev 54ec90e
Merge remote-tracking branch 'upstream/master' into parakeet-support
danbev 646976b
parakeet : remove unused functions [no ci]
danbev 5cc5a55
parakeet : remove unused include [no ci]
danbev f9dc488
parakeet : zero initialize samples_padded [no ci]
danbev 64160ed
parakeet : add mel_worker_params struct [no ci]
danbev 89d59f3
parakeet : add missing eps to model output and align [no ci]
danbev a803541
parakeet : fix n_tensor calculation and cleanup [no ci]
danbev a24a5db
parakeet : remove empty block [no ci]
danbev ab031ed
parakeet : clean up comments [no ci]
danbev d934101
parakeet : clear tdt_stream_state in parakeet_reset_state
danbev 7e0e274
parakeet : add parakeet_stream_clear helper function
danbev ab609b0
parakeet : minor cleanup of parakeet.h [no ci]
danbev 9164f9c
parakeet : remove flash attention param
danbev c68ab47
Merge remote-tracking branch 'upstream/master' into parakeet-support
danbev efab3e1
Merge remote-tracking branch 'upstream/master' into parakeet-support
danbev 094fa51
parakeet : add progress_callback call
danbev 5edf4a5
parakeet : call encoder_begin_callback
danbev 319ccc4
parakeet : enable abort_callback to be called
danbev cb7725c
Merge remote-tracking branch 'upstream/master' into parakeet-support
danbev 9f1b430
parakeet : replace hardcode dimensions [no ci]
danbev a24aa3f
parakeet : add missing n_conv_kernel from orig model [no ci]
danbev 9c99575
parakeet : remove more hardcoded dimensions/values [no ci]
danbev 83b618e
parakeet : add small test model and generator script
danbev 1443301
parakeet : updated test model to avoid NaN
danbev 78db596
parakeet : fix segment fault in test-parakeet-stream
danbev 29933c4
Merge remote-tracking branch 'upstream/master' into parakeet-support
danbev 8302e8e
fix asan issue with test model
danbev a8cc3fa
Merge remote-tracking branch 'upstream/master' into parakeet-support
danbev 3ce5332
Merge remote-tracking branch 'upstream/master' into parakeet-support
danbev da55e1e
parakeet : remove flash attn options from README.md [no ci]
danbev ce4e756
parakeet : add exception handling to parakeet_model_load [no ci]
danbev 2d5219a
cmake : use CMAKE_INSTALL_LIBDIR for parakeet.cpp [no ci]
danbev b9ea94a
parakeet : remove unnecessary ggml_cont operations
danbev 0bfa13d
parakeet : remove redundant ggml_cont in encoder graph
danbev fa763f6
parakeet : merge/fuse subsampling and encoder
danbev 8cd9718
parakeet : remove streaming path from parakeet_full_with_state
danbev 4d410be
parakeet : add parakeet_stream_params [no ci]
danbev 78c82d9
parakeet: use local encoder attention for long audio
danbev ac935e3
parakeet : support f16 model conversion [no ci]
danbev 0764628
parakeet : add quantization support [no ci]
danbev f55f7eb
tests : update run-tests.sh to support parakeet models [no ci]
danbev c1d57fa
parakeet : fix parakeet_log_callback_default [no ci]
danbev 94c226b
parakeet : clean up of local attention [no ci]
danbev 210c05e
parakeet : clarify stride-shift code comment [no ci]
danbev 804771c
scripts : add quantize-parakeet.sh script [no ci]
danbev b0946f4
parakeet : fix skip list in parakeet-quantize [no ci]
danbev 9fef588
scripts : use Q8_0 as the example in parakeet model card [no ci]
danbev 81d1469
scripts : add ggml- prefix to HF models [no ci]
danbev 572a798
parakeet : add prediction timing and fix sample time [no ci]
danbev c5b308a
parakeet : use persistent tensor for encoder output
danbev eb8f824
parakeet : rename whisper_backend_init_gpu
danbev 80e68a8
parakeet : avoid copying pred_h as input to joint network
danbev 23b2eb5
parakeet : avoid forcing token embedding lookup onto CPU
danbev 0024ebd
parakeet : reduce operations in LSTM layers
danbev 7c06be7
parakeet : update for-tests-ggml-parakeet-dtd.bin
danbev e11a11e
parakeet : correct packed gates comment [no ci]
danbev b05d775
parakeet : use ggml-org HF org [no ci]
danbev 17888ae
Merge remote-tracking branch 'upstream/master' into parakeet-support
danbev 8cc7881
Merge remote-tracking branch 'upstream/master' into parakeet-support
danbev File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| set(PARAKEET_VERSION @WHISPER_INSTALL_VERSION@) | ||
| set(PARAKEET_BUILD_COMMIT @WHISPER_BUILD_COMMIT@) | ||
| set(PARAKEET_BUILD_NUMBER @WHISPER_BUILD_NUMBER@) | ||
| set(PARAKEET_SHARED_LIB @BUILD_SHARED_LIBS@) | ||
|
|
||
| @PACKAGE_INIT@ | ||
|
|
||
| set_and_check(PARAKEET_INCLUDE_DIR "@PACKAGE_PARAKEET_INCLUDE_INSTALL_DIR@") | ||
| set_and_check(PARAKEET_LIB_DIR "@PACKAGE_PARAKEET_LIB_INSTALL_DIR@") | ||
| set_and_check(PARAKEET_BIN_DIR "@PACKAGE_PARAKEET_BIN_INSTALL_DIR@") | ||
|
|
||
| find_package(ggml REQUIRED HINTS ${PARAKEET_LIB_DIR}/cmake) | ||
|
|
||
| find_library(parakeet_LIBRARY parakeet | ||
| REQUIRED | ||
| HINTS ${PARAKEET_LIB_DIR} | ||
| NO_CMAKE_FIND_ROOT_PATH | ||
| ) | ||
|
|
||
| add_library(parakeet UNKNOWN IMPORTED) | ||
| set_target_properties(parakeet | ||
| PROPERTIES | ||
| INTERFACE_INCLUDE_DIRECTORIES "${PARAKEET_INCLUDE_DIR}" | ||
| INTERFACE_LINK_LIBRARIES "ggml::ggml;ggml::ggml-base;" | ||
| IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" | ||
| IMPORTED_LOCATION "${parakeet_LIBRARY}" | ||
| INTERFACE_COMPILE_FEATURES cxx_std_11 | ||
| POSITION_INDEPENDENT_CODE ON) | ||
|
|
||
| check_required_components(parakeet) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| prefix=@CMAKE_INSTALL_PREFIX@ | ||
| exec_prefix=${prefix} | ||
| libdir=${exec_prefix}/lib | ||
| includedir=${prefix}/include | ||
|
|
||
| Name: parakeet | ||
| Description: Port of NVIDIA's Parakeet model in C/C++ | ||
| Version: @PROJECT_VERSION@ | ||
| Libs: -L${libdir} -lggml -lggml-base -lparakeet | ||
| Cflags: -I${includedir} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| set(TARGET parakeet-cli) | ||
| add_executable(${TARGET} parakeet-cli.cpp) | ||
|
|
||
| include(DefaultTargetOptions) | ||
|
|
||
| target_link_libraries(${TARGET} PRIVATE common parakeet ${FFMPEG_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) | ||
|
|
||
| install(TARGETS ${TARGET} RUNTIME) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,112 @@ | ||
| # whisper.cpp/examples/parakeet-cli | ||
|
|
||
| This is an example of using the [Parakeet] model in whisper.cpp. | ||
|
|
||
| ### Download converted model | ||
| ```console | ||
| $ hf download danbev/parakeet parakeet-tdt-0.6b-v3.bin --local-dir models | ||
| ``` | ||
|
|
||
| ### Building | ||
| ```console | ||
| $ cmake -B build -S . | ||
| $ cmake --build build --target parakeet-cli -j 12 | ||
| ``` | ||
|
|
||
| ### Usage | ||
| ```console | ||
| $ ./build/bin/parakeet-cli --help | ||
|
|
||
| usage: ./build/bin/parakeet-cli [options] file0 file1 ... | ||
| supported audio formats: flac, mp3, ogg, wav | ||
|
|
||
| options: | ||
| -h, --help [default] show this help message and exit | ||
| -t N, --threads N [4 ] number of threads to use during computation | ||
| -cl N, --chunk-length N [10000 ] chunk length in milliseconds | ||
| -lc N, --left-context N [10000 ] left context in milliseconds | ||
| -rc N, --right-context N [4960 ] right context in milliseconds | ||
| -m, --model FILE [models/ggml-parakeet-tdt-0.6b-v3.bin] model path | ||
| -f, --file FILE [ ] input audio file | ||
| -ng, --no-gpu [false ] disable GPU | ||
| -dev N, --device N [0 ] GPU device to use | ||
| -fa, --flash-attn [true ] enable flash attention | ||
| -nfa, --no-flash-attn [false ] disable flash attention | ||
| -ps, --print-segments [false ] print segment information | ||
| ``` | ||
|
|
||
| ### Example | ||
| ```console | ||
| $ ./build/bin/parakeet-cli -m models/parakeet-tdt-0.6b-v3.bin -f samples/jfk.wav | ||
| Processing audio (176000 samples, 11.00 seconds) | ||
| Processing audio: total_frames=1101, chunk_size=1101 | ||
| parakeet_decode: starting decode with n_frames=138 | ||
| And so, my fellow Americans, ask not what your country can do for you, ask what you can do for your country. | ||
| ``` | ||
|
|
||
| To print segment information: | ||
| ```console | ||
| $ ./build/bin/parakeet-cli -m models/parakeet-tdt-0.6b-v3.bin -f samples/jfk.wav --print-segments | ||
| Processing audio (176000 samples, 11.00 seconds) | ||
| Processing audio: total_frames=1101, chunk_size=1101 | ||
| parakeet_decode: starting decode with n_frames=138 | ||
| And so, my fellow Americans, ask not what your country can do for you, ask what you can do for your country. | ||
|
|
||
| Segments (1): | ||
| Segment 0: [0 -> 1101] "And so, my fellow Americans, ask not what your country can do for you, ask what you can do for your country." | ||
| Tokens [38]: | ||
| [ 0] id= 1976 frame= 3 dur_idx= 4 dur_val= 4 p=0.9996 plog=-15.6206 t0= 24 t1= 56 word_start=true "▁And" | ||
| [ 1] id= 547 frame= 7 dur_idx= 4 dur_val= 4 p=0.9999 plog=-18.7922 t0= 56 t1= 88 word_start=true "▁so" | ||
| [ 2] id= 7877 frame= 11 dur_idx= 2 dur_val= 2 p=0.8451 plog=-14.5929 t0= 88 t1= 88 word_start=false "," | ||
| [ 3] id= 1103 frame= 13 dur_idx= 3 dur_val= 3 p=0.9996 plog=-15.6127 t0= 104 t1= 128 word_start=true "▁my" | ||
| [ 4] id= 309 frame= 16 dur_idx= 1 dur_val= 1 p=0.9912 plog=-11.9635 t0= 128 t1= 136 word_start=true "▁f" | ||
| [ 5] id= 530 frame= 17 dur_idx= 2 dur_val= 2 p=1.0000 plog=-13.5239 t0= 136 t1= 152 word_start=false "ell" | ||
| [ 6] id= 596 frame= 19 dur_idx= 3 dur_val= 3 p=1.0000 plog=-16.3120 t0= 152 t1= 176 word_start=false "ow" | ||
| [ 7] id= 3213 frame= 22 dur_idx= 4 dur_val= 4 p=0.9999 plog=-10.1462 t0= 176 t1= 208 word_start=true "▁Amer" | ||
| [ 8] id= 404 frame= 26 dur_idx= 4 dur_val= 4 p=1.0000 plog=-25.0910 t0= 208 t1= 240 word_start=false "ic" | ||
| [ 9] id= 667 frame= 30 dur_idx= 4 dur_val= 4 p=1.0000 plog=-27.1707 t0= 240 t1= 272 word_start=false "ans" | ||
| [10] id= 7877 frame= 37 dur_idx= 4 dur_val= 4 p=0.9094 plog=-16.3405 t0= 272 t1= 272 word_start=false "," | ||
| [11] id= 279 frame= 41 dur_idx= 4 dur_val= 4 p=0.9980 plog=-19.7244 t0= 328 t1= 360 word_start=true "▁a" | ||
| [12] id= 583 frame= 45 dur_idx= 4 dur_val= 4 p=1.0000 plog=-24.5312 t0= 360 t1= 392 word_start=false "sk" | ||
| [13] id= 1491 frame= 53 dur_idx= 4 dur_val= 4 p=1.0000 plog=-23.2991 t0= 424 t1= 456 word_start=true "▁not" | ||
| [14] id= 3470 frame= 65 dur_idx= 4 dur_val= 4 p=0.9995 plog=-16.7306 t0= 520 t1= 552 word_start=true "▁what" | ||
| [15] id= 3629 frame= 69 dur_idx= 2 dur_val= 2 p=0.8139 plog=-11.6486 t0= 552 t1= 568 word_start=true "▁your" | ||
| [16] id= 867 frame= 75 dur_idx= 1 dur_val= 1 p=0.9980 plog=-12.5265 t0= 600 t1= 608 word_start=true "▁co" | ||
| [17] id= 331 frame= 76 dur_idx= 2 dur_val= 2 p=1.0000 plog=-11.6697 t0= 608 t1= 624 word_start=false "un" | ||
| [18] id= 958 frame= 78 dur_idx= 2 dur_val= 2 p=1.0000 plog=-11.3621 t0= 624 t1= 640 word_start=false "tr" | ||
| [19] id= 7893 frame= 80 dur_idx= 2 dur_val= 2 p=1.0000 plog=-14.3245 t0= 640 t1= 656 word_start=false "y" | ||
| [20] id= 2059 frame= 82 dur_idx= 3 dur_val= 3 p=1.0000 plog=-17.7694 t0= 656 t1= 680 word_start=true "▁can" | ||
| [21] id= 458 frame= 85 dur_idx= 4 dur_val= 4 p=1.0000 plog=-23.2510 t0= 680 t1= 712 word_start=true "▁do" | ||
| [22] id= 509 frame= 89 dur_idx= 4 dur_val= 4 p=1.0000 plog=-23.0688 t0= 712 t1= 744 word_start=true "▁for" | ||
| [23] id= 1180 frame= 93 dur_idx= 4 dur_val= 4 p=0.9999 plog=-25.0567 t0= 744 t1= 776 word_start=true "▁you" | ||
| [24] id= 7877 frame= 98 dur_idx= 4 dur_val= 4 p=0.8820 plog=-14.2549 t0= 776 t1= 776 word_start=false "," | ||
| [25] id= 279 frame=102 dur_idx= 3 dur_val= 3 p=0.9992 plog=-16.8176 t0= 816 t1= 840 word_start=true "▁a" | ||
| [26] id= 583 frame=105 dur_idx= 4 dur_val= 4 p=1.0000 plog=-21.0352 t0= 840 t1= 872 word_start=false "sk" | ||
| [27] id= 3470 frame=109 dur_idx= 3 dur_val= 3 p=0.9999 plog=-15.4659 t0= 872 t1= 896 word_start=true "▁what" | ||
| [28] id= 1180 frame=112 dur_idx= 4 dur_val= 4 p=0.9997 plog=-17.6392 t0= 896 t1= 928 word_start=true "▁you" | ||
| [29] id= 2059 frame=116 dur_idx= 3 dur_val= 3 p=0.9999 plog=-15.5484 t0= 928 t1= 952 word_start=true "▁can" | ||
| [30] id= 458 frame=119 dur_idx= 2 dur_val= 2 p=1.0000 plog=-15.9953 t0= 952 t1= 968 word_start=true "▁do" | ||
| [31] id= 509 frame=121 dur_idx= 3 dur_val= 3 p=1.0000 plog=-15.9605 t0= 968 t1= 992 word_start=true "▁for" | ||
| [32] id= 3629 frame=124 dur_idx= 2 dur_val= 2 p=0.9994 plog=-12.2083 t0= 992 t1=1008 word_start=true "▁your" | ||
| [33] id= 867 frame=126 dur_idx= 2 dur_val= 2 p=0.9969 plog=-9.1252 t0=1008 t1=1024 word_start=true "▁co" | ||
| [34] id= 331 frame=128 dur_idx= 1 dur_val= 1 p=0.9999 plog=-12.6911 t0=1024 t1=1032 word_start=false "un" | ||
| [35] id= 958 frame=129 dur_idx= 1 dur_val= 1 p=1.0000 plog=-8.8885 t0=1032 t1=1040 word_start=false "tr" | ||
| [36] id= 7893 frame=130 dur_idx= 2 dur_val= 2 p=1.0000 plog=-14.1441 t0=1040 t1=1056 word_start=false "y" | ||
| [37] id= 7883 frame=132 dur_idx= 4 dur_val= 4 p=0.9567 plog=-11.5227 t0=1056 t1=1056 word_start=false "." | ||
| ``` | ||
|
|
||
| ### Model conversion | ||
| Clone the original model from Hugging Face: | ||
| ```console | ||
| $ git clone https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3 | ||
| ``` | ||
| Convert the model: | ||
| ```console | ||
| (venv) $ python models/convert-parakeet-to-ggml.py \ | ||
| --model <path to cloned model> \ | ||
| --use-f32 \ | ||
| --out-dir models \ | ||
| --out-name ggml-parakeet-tdt-0.6b-v3.bin | ||
| ``` | ||
|
|
||
| [Parakeet]: https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3 | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.