Skip to content

Commit c87cc99

Browse files
committed
Disable fp16 for WebNN Polyfill (webmachinelearning#235)
Currently WebNN Polyfill doesn't support fp16 data type, just disable it. Make some minor improvement for the ui BTW.
1 parent 68db080 commit c87cc99

File tree

4 files changed

+43
-29
lines changed

4 files changed

+43
-29
lines changed

common/css/style.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -823,4 +823,8 @@ a:hover {
823823

824824
#footer a {
825825
display: inline-block;
826+
}
827+
828+
.nowrap {
829+
white-space: nowrap;
826830
}

common/utils.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,3 +561,32 @@ export function getDefaultLayout(deviceType) {
561561
}
562562
}
563563
}
564+
565+
/**
566+
* Display available models based on device type and data type.
567+
* @param {Object} modelList list of available models.
568+
* @param {Array} modelIds list of model ids.
569+
* @param {String} deviceType 'cpu', 'gpu' or 'npu'.
570+
* @param {String} dataType 'float32', 'float16', or ''.
571+
*/
572+
export function displayAvailableModels(
573+
modelList, modelIds, deviceType, dataType) {
574+
let models = [];
575+
if (dataType == '') {
576+
models = models.concat(modelList[deviceType]['float32']);
577+
models = models.concat(modelList[deviceType]['float16']);
578+
} else {
579+
models = models.concat(modelList[deviceType][dataType]);
580+
}
581+
// Remove duplicate ids.
582+
models = [...new Set(models)];
583+
// Display available models.
584+
// eslint-disable-next-line no-unused-vars
585+
for (const modelId of modelIds) {
586+
if (models.includes(modelId)) {
587+
$(`#${modelId}`).parent().show();
588+
} else {
589+
$(`#${modelId}`).parent().hide();
590+
}
591+
}
592+
}

image_classification/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
</div> -->
6767
<div class="row mb-2 align-items-center">
6868
<div class="col-1 col-md-1">
69-
<span>Data Type</span>
69+
<span class="nowrap">Data Type</span>
7070
</div>
7171
<div class="col-md-auto">
7272
<div class="btn-group-toggle" data-toggle="buttons" id="dataTypeBtns">

image_classification/main.js

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -81,26 +81,6 @@ async function fetchLabels(url) {
8181
return data.split('\n');
8282
}
8383

84-
function displayAvailableModels(modelList, deviceType, dataType) {
85-
let models = [];
86-
if (dataType == '') {
87-
models = models.concat(modelList[deviceType]['float32']);
88-
models = models.concat(modelList[deviceType]['float16']);
89-
} else {
90-
models = models.concat(modelList[deviceType][dataType]);
91-
}
92-
// Remove duplicate ids.
93-
models = [...new Set(models)];
94-
// Display available models.
95-
for (const model of modelIds) {
96-
if (models.includes(model)) {
97-
$(`#${model}`).parent().show();
98-
} else {
99-
$(`#${model}`).parent().hide();
100-
}
101-
}
102-
}
103-
10484
$(document).ready(async () => {
10585
$('.icdisplay').hide();
10686
if (await utils.isWebNN()) {
@@ -114,24 +94,25 @@ $('#backendBtns .btn').on('change', async (e) => {
11494
if (inputType === 'camera') {
11595
await stopCamRender();
11696
}
117-
layout = utils.getDefaultLayout($(e.target).attr('id'));
118-
[backend, deviceType] = $(e.target).attr('id').split('_');
97+
const backendId = $(e.target).attr('id');
98+
layout = utils.getDefaultLayout(backendId);
99+
[backend, deviceType] = backendId.split('_');
119100
// Only show the supported models for each deviceType. Now fp16 nchw models
120101
// are only supported on gpu/npu.
121-
if (deviceType == 'gpu') {
102+
if (backendId == 'webnn_gpu') {
122103
ui.handleBtnUI('#float16Label', false);
123104
ui.handleBtnUI('#float32Label', false);
124-
displayAvailableModels(modelList, deviceType, dataType);
125-
} else if (deviceType == 'npu') {
105+
utils.displayAvailableModels(modelList, modelIds, deviceType, dataType);
106+
} else if (backendId == 'webnn_npu') {
126107
ui.handleBtnUI('#float16Label', false);
127108
ui.handleBtnUI('#float32Label', true);
128109
$('#float16').click();
129-
displayAvailableModels(modelList, deviceType, 'float16');
110+
utils.displayAvailableModels(modelList, modelIds, deviceType, 'float16');
130111
} else {
131112
ui.handleBtnUI('#float16Label', true);
132113
ui.handleBtnUI('#float32Label', false);
133114
$('#float32').click();
134-
displayAvailableModels(modelList, deviceType, 'float32');
115+
utils.displayAvailableModels(modelList, modelIds, deviceType, 'float32');
135116
}
136117

137118
// Uncheck selected model
@@ -163,7 +144,7 @@ $('#modelBtns .btn').on('change', async (e) => {
163144

164145
$('#dataTypeBtns .btn').on('change', async (e) => {
165146
dataType = $(e.target).attr('id');
166-
displayAvailableModels(modelList, deviceType, dataType);
147+
utils.displayAvailableModels(modelList, modelIds, deviceType, dataType);
167148
// Uncheck selected model
168149
if (modelId != '') {
169150
$(`#${modelId}`).parent().removeClass('active');

0 commit comments

Comments
 (0)