Skip to content

Commit 3916503

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

File tree

2 files changed

+59
-9
lines changed

2 files changed

+59
-9
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: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,34 @@
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:</b>
44+
<ul>
45+
<li>your browser must support WASM SIMD instructions for this to work</li>
46+
<li>quantized models are still in experimental stage</li>
47+
<li>Firefox cannot load files larger than 256 MB - use Chrome instead</li>
48+
</ul>
4449

45-
<br><br><hr>
50+
<hr>
4651

4752
<div id="model">
48-
Whisper model: <span id="model-whisper-status"></span>
53+
Whisper models: <span id="model-whisper-status"></span><br><br>
4954
<button id="fetch-whisper-tiny-en" onclick="loadWhisper('tiny.en')">tiny.en (75 MB)</button>
5055
<button id="fetch-whisper-tiny" onclick="loadWhisper('tiny')">tiny (75 MB)</button>
5156
<button id="fetch-whisper-base-en" onclick="loadWhisper('base.en')">base.en (142 MB)</button>
5257
<button id="fetch-whisper-base" onclick="loadWhisper('base')">base (142 MB)</button>
5358
<button id="fetch-whisper-small-en" onclick="loadWhisper('small.en')">small.en (466 MB)</button>
5459
<button id="fetch-whisper-small" onclick="loadWhisper('small')">small (466 MB)</button>
55-
<span id="fetch-whisper-progress"></span>
56-
5760
<input type="file" id="whisper-file" name="file" onchange="loadFile(event, 'whisper.bin')" />
61+
<br><br>
62+
Quantized models:<br><br>
63+
<button id="fetch-whisper-base-en-q4_0" onclick="loadWhisper('base-en-q4_0')">base.en (4bit, 49 MB)</button>
64+
<button id="fetch-whisper-base-q4_0" onclick="loadWhisper('base-q4_0')">base (4bit, 49 MB)</button>
65+
<button id="fetch-whisper-small-en-q4_0" onclick="loadWhisper('small-en-q4_0')">small.en (4bit, 152 MB)</button>
66+
<button id="fetch-whisper-small-q4_0" onclick="loadWhisper('small-q4_0')">small (4bit, 152 MB)</button><br>
67+
<button id="fetch-whisper-medium-en-q4_0" onclick="loadWhisper('medium-en-q4_0')">medium.en (4bit, 469 MB)</button>
68+
<button id="fetch-whisper-medium-q4_0" onclick="loadWhisper('medium-q4_0')">medium (4bit, 469 MB)</button>
69+
<button id="fetch-whisper-large-q4_0" onclick="loadWhisper('large-q4_0')">large (4bit, 985 MB)</button>
70+
<span id="fetch-whisper-progress"></span>
5871
</div>
5972

6073
<br>
@@ -263,7 +276,7 @@
263276

264277
Module.FS_createDataFile("/", fname, buf, true, true);
265278

266-
model_whisper = fname;
279+
//model_whisper = fname;
267280

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

@@ -292,6 +305,15 @@
292305
document.getElementById('fetch-whisper-tiny' ).style.display = 'none';
293306
document.getElementById('fetch-whisper-base' ).style.display = 'none';
294307
document.getElementById('fetch-whisper-small' ).style.display = 'none';
308+
309+
document.getElementById('fetch-whisper-base-en-q4_0' ).style.display = 'none';
310+
document.getElementById('fetch-whisper-base-q4_0' ).style.display = 'none';
311+
document.getElementById('fetch-whisper-small-en-q4_0' ).style.display = 'none';
312+
document.getElementById('fetch-whisper-small-q4_0' ).style.display = 'none';
313+
document.getElementById('fetch-whisper-medium-en-q4_0').style.display = 'none';
314+
document.getElementById('fetch-whisper-medium-q4_0' ).style.display = 'none';
315+
document.getElementById('fetch-whisper-large-q4_0' ).style.display = 'none';
316+
295317
document.getElementById('whisper-file' ).style.display = 'none';
296318
document.getElementById('model-whisper-status' ).innerHTML = 'loaded model: ' + file.name;
297319
}
@@ -304,6 +326,14 @@
304326
'base': 'https://whisper.ggerganov.com/ggml-model-whisper-base.bin',
305327
'small.en': 'https://whisper.ggerganov.com/ggml-model-whisper-small.en.bin',
306328
'small': 'https://whisper.ggerganov.com/ggml-model-whisper-small.bin',
329+
330+
'base-en-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-base.en-q4_0.bin',
331+
'base-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-base-q4_0.bin',
332+
'small-en-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-small.en-q4_0.bin',
333+
'small-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-small-q4_0.bin',
334+
'medium-en-q4_0':'https://whisper.ggerganov.com/ggml-model-whisper-medium.en-q4_0.bin',
335+
'medium-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-medium-q4_0.bin',
336+
'large-q4_0': 'https://whisper.ggerganov.com/ggml-model-whisper-large-q4_0.bin',
307337
};
308338

309339
let sizes = {
@@ -313,6 +343,14 @@
313343
'base': 142,
314344
'small.en': 466,
315345
'small': 466,
346+
347+
'base-en-q4_0': 49,
348+
'base-q4_0': 49,
349+
'small-en-q4_0': 152,
350+
'small-q4_0': 152,
351+
'medium-en-q4_0': 469,
352+
'medium-q4_0': 469,
353+
'large-q4_0': 985,
316354
};
317355

318356
let url = urls[model];
@@ -327,6 +365,15 @@
327365
document.getElementById('fetch-whisper-tiny' ).style.display = 'none';
328366
document.getElementById('fetch-whisper-base' ).style.display = 'none';
329367
document.getElementById('fetch-whisper-small' ).style.display = 'none';
368+
369+
document.getElementById('fetch-whisper-base-en-q4_0' ).style.display = 'none';
370+
document.getElementById('fetch-whisper-base-q4_0' ).style.display = 'none';
371+
document.getElementById('fetch-whisper-small-en-q4_0' ).style.display = 'none';
372+
document.getElementById('fetch-whisper-small-q4_0' ).style.display = 'none';
373+
document.getElementById('fetch-whisper-medium-en-q4_0').style.display = 'none';
374+
document.getElementById('fetch-whisper-medium-q4_0' ).style.display = 'none';
375+
document.getElementById('fetch-whisper-large-q4_0' ).style.display = 'none';
376+
330377
document.getElementById('whisper-file' ).style.display = 'none';
331378
document.getElementById('model-whisper-status' ).innerHTML = 'loading model: ' + model;
332379

@@ -343,6 +390,9 @@
343390
el = document.getElementById('fetch-whisper-tiny' ); if (el) el.style.display = 'inline-block';
344391
el = document.getElementById('fetch-whisper-base' ); if (el) el.style.display = 'inline-block';
345392
el = document.getElementById('fetch-whisper-small' ); if (el) el.style.display = 'inline-block';
393+
394+
el = document.getElementById('fetch-whisper-large-q4_0'); if (el) el.style.display = 'inline-block';
395+
346396
el = document.getElementById('whisper-file' ); if (el) el.style.display = 'inline-block';
347397
el = document.getElementById('model-whisper-status' ); if (el) el.innerHTML = '';
348398
};
@@ -354,7 +404,7 @@
354404
// audio file
355405
//
356406

357-
const kMaxAudio_s = 120;
407+
const kMaxAudio_s = 30*60;
358408
const kSampleRate = 16000;
359409

360410
window.AudioContext = window.AudioContext || window.webkitAudioContext;

0 commit comments

Comments
 (0)