Skip to content

Commit df11316

Browse files
committed
whisper.wasm : add 4-bit quantized models
1 parent df37e2b commit df11316

File tree

2 files changed

+54
-8
lines changed

2 files changed

+54
-8
lines changed

examples/whisper.wasm/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ set_target_properties(${TARGET} PROPERTIES LINK_FLAGS " \
3232
--bind \
3333
-s USE_PTHREADS=1 \
3434
-s PTHREAD_POOL_SIZE=8 \
35-
-s INITIAL_MEMORY=1500MB \
36-
-s TOTAL_MEMORY=1500MB \
35+
-s INITIAL_MEMORY=2000MB \
36+
-s TOTAL_MEMORY=2000MB \
3737
-s FORCE_FILESYSTEM=1 \
3838
-s EXPORTED_RUNTIME_METHODS=\"['print', 'printErr', 'ccall', 'cwrap']\" \
3939
${EXTRA_FLAGS} \

examples/whisper.wasm/index-tmpl.html

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,30 @@
4040

4141
Note that the computation is quite heavy and may take a few seconds to complete.<br>
4242
The transcription results will be displayed in the text area below.<br><br>
43-
<b>Important: your browser must support WASM SIMD instructions for this to work.</b>
43+
<b>Important: your browser must support WASM SIMD instructions for this to work</b><br><br>
44+
<b>Important: quantized models are still in experimental stage</b>
4445

4546
<br><br><hr>
4647

4748
<div id="model">
48-
Whisper model: <span id="model-whisper-status"></span>
49+
Whisper models: <span id="model-whisper-status"></span><br><br>
4950
<button id="fetch-whisper-tiny-en" onclick="loadWhisper('tiny.en')">tiny.en (75 MB)</button>
5051
<button id="fetch-whisper-tiny" onclick="loadWhisper('tiny')">tiny (75 MB)</button>
5152
<button id="fetch-whisper-base-en" onclick="loadWhisper('base.en')">base.en (142 MB)</button>
5253
<button id="fetch-whisper-base" onclick="loadWhisper('base')">base (142 MB)</button>
5354
<button id="fetch-whisper-small-en" onclick="loadWhisper('small.en')">small.en (466 MB)</button>
5455
<button id="fetch-whisper-small" onclick="loadWhisper('small')">small (466 MB)</button>
55-
<span id="fetch-whisper-progress"></span>
56-
5756
<input type="file" id="whisper-file" name="file" onchange="loadFile(event, 'whisper.bin')" />
57+
<br><br>
58+
Quantized models:<br><br>
59+
<button id="fetch-whisper-base-en-q4_0" onclick="loadWhisper('base-en-q4_0')">base.en (4bit, 49 MB)</button>
60+
<button id="fetch-whisper-base-q4_0" onclick="loadWhisper('base-q4_0')">base (4bit, 49 MB)</button>
61+
<button id="fetch-whisper-small-en-q4_0" onclick="loadWhisper('small-en-q4_0')">small.en (4bit, 152 MB)</button>
62+
<button id="fetch-whisper-small-q4_0" onclick="loadWhisper('small-q4_0')">small (4bit, 152 MB)</button><br>
63+
<button id="fetch-whisper-medium-en-q4_0" onclick="loadWhisper('medium-en-q4_0')">medium.en (4bit, 469 MB)</button>
64+
<button id="fetch-whisper-medium-q4_0" onclick="loadWhisper('medium-q4_0')">medium (4bit, 469 MB)</button>
65+
<button id="fetch-whisper-large-q4_0" onclick="loadWhisper('large-q4_0')">large (4bit, 985 MB)</button>
66+
<span id="fetch-whisper-progress"></span>
5867
</div>
5968

6069
<br>
@@ -263,7 +272,7 @@
263272

264273
Module.FS_createDataFile("/", fname, buf, true, true);
265274

266-
model_whisper = fname;
275+
//model_whisper = fname;
267276

268277
document.getElementById('model-whisper-status').innerHTML = 'loaded "' + model_whisper + '"!';
269278

@@ -292,6 +301,15 @@
292301
document.getElementById('fetch-whisper-tiny' ).style.display = 'none';
293302
document.getElementById('fetch-whisper-base' ).style.display = 'none';
294303
document.getElementById('fetch-whisper-small' ).style.display = 'none';
304+
305+
document.getElementById('fetch-whisper-base-en-q4_0' ).style.display = 'none';
306+
document.getElementById('fetch-whisper-base-q4_0' ).style.display = 'none';
307+
document.getElementById('fetch-whisper-small-en-q4_0' ).style.display = 'none';
308+
document.getElementById('fetch-whisper-small-q4_0' ).style.display = 'none';
309+
document.getElementById('fetch-whisper-medium-en-q4_0').style.display = 'none';
310+
document.getElementById('fetch-whisper-medium-q4_0' ).style.display = 'none';
311+
document.getElementById('fetch-whisper-large-q4_0' ).style.display = 'none';
312+
295313
document.getElementById('whisper-file' ).style.display = 'none';
296314
document.getElementById('model-whisper-status' ).innerHTML = 'loaded model: ' + file.name;
297315
}
@@ -304,6 +322,14 @@
304322
'base': 'https://whisper.ggerganov.com/ggml-model-whisper-base.bin',
305323
'small.en': 'https://whisper.ggerganov.com/ggml-model-whisper-small.en.bin',
306324
'small': 'https://whisper.ggerganov.com/ggml-model-whisper-small.bin',
325+
326+
'base-en-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-base.en-q4_0.bin',
327+
'base-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-base-q4_0.bin',
328+
'small-en-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-small.en-q4_0.bin',
329+
'small-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-small-q4_0.bin',
330+
'medium-en-q4_0':'https://whisper.ggerganov.com/ggml-model-whisper-medium.en-q4_0.bin',
331+
'medium-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-medium-q4_0.bin',
332+
'large-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-large-q4_0.bin',
307333
};
308334

309335
let sizes = {
@@ -313,6 +339,14 @@
313339
'base': 142,
314340
'small.en': 466,
315341
'small': 466,
342+
343+
'base-en-q4_0': 49,
344+
'base-q4_0': 49,
345+
'small-en-q4_0': 152,
346+
'small-q4_0': 152,
347+
'medium-en-q4_0': 469,
348+
'medium-q4_0': 469,
349+
'large-q4_0': 985,
316350
};
317351

318352
let url = urls[model];
@@ -327,6 +361,15 @@
327361
document.getElementById('fetch-whisper-tiny' ).style.display = 'none';
328362
document.getElementById('fetch-whisper-base' ).style.display = 'none';
329363
document.getElementById('fetch-whisper-small' ).style.display = 'none';
364+
365+
document.getElementById('fetch-whisper-base-en-q4_0' ).style.display = 'none';
366+
document.getElementById('fetch-whisper-base-q4_0' ).style.display = 'none';
367+
document.getElementById('fetch-whisper-small-en-q4_0' ).style.display = 'none';
368+
document.getElementById('fetch-whisper-small-q4_0' ).style.display = 'none';
369+
document.getElementById('fetch-whisper-medium-en-q4_0').style.display = 'none';
370+
document.getElementById('fetch-whisper-medium-q4_0' ).style.display = 'none';
371+
document.getElementById('fetch-whisper-large-q4_0' ).style.display = 'none';
372+
330373
document.getElementById('whisper-file' ).style.display = 'none';
331374
document.getElementById('model-whisper-status' ).innerHTML = 'loading model: ' + model;
332375

@@ -343,6 +386,9 @@
343386
el = document.getElementById('fetch-whisper-tiny' ); if (el) el.style.display = 'inline-block';
344387
el = document.getElementById('fetch-whisper-base' ); if (el) el.style.display = 'inline-block';
345388
el = document.getElementById('fetch-whisper-small' ); if (el) el.style.display = 'inline-block';
389+
390+
el = document.getElementById('fetch-whisper-large-q4_0'); if (el) el.style.display = 'inline-block';
391+
346392
el = document.getElementById('whisper-file' ); if (el) el.style.display = 'inline-block';
347393
el = document.getElementById('model-whisper-status' ); if (el) el.innerHTML = '';
348394
};
@@ -354,7 +400,7 @@
354400
// audio file
355401
//
356402

357-
const kMaxAudio_s = 120;
403+
const kMaxAudio_s = 30*60;
358404
const kSampleRate = 16000;
359405

360406
window.AudioContext = window.AudioContext || window.webkitAudioContext;

0 commit comments

Comments
 (0)