Open
Description
Some issues with using a dict:
dimensionsisn't validated againstTypedArray.bytesLength. I can set arbitrary dimensions (like[4,4,4]to a Float32Array that only has 1 element.- Hard to create an overloaded WebNN dispatch() and WebML compute() for single input/output graphs.
- WebIDL can't distinguish between
dict<NodeName, dict<data, dimensions>>anddict<NodeName "data", NodeName "dimensions">, thus fails to bind JavaScript object to C++ implementation.
- WebIDL can't distinguish between
Discovered this during WebML prototyping for https://crbug.com/1338067
See related issue in WebNN webmachinelearning/webnn#275
Metadata
Metadata
Assignees
Labels
No labels
Activity
wacky6 commentedon Nov 9, 2022
Alternatively, should we simplify to drop dimensions and simply use bytes[]?
https://www.w3.org/TR/webnn/#typedefdef-mlnamedarraybufferviews
ATM, I don't think we support arbitrary size inputs (i.e. CNN style network still has a fixed input / output size). Validation can simply check byte length matches the model's input/output description.
If the user provides an array with the correct byte length, but in a different type (e.g. uint16 -> float16), they just get wrong results.
huningxin commentedon Nov 9, 2022
@wacky6
Do you mean using
ArrayBufferinstead?wacky6 commentedon Nov 9, 2022
I mean align with WebNN and use ArrayBufferView.
Since we just care about byteLength matches the expected input/output type+shape (both are known at graph build / model loading time)
huningxin commentedon Nov 9, 2022
Sounds good to me.
My open is whether it should support a union of
ArrayBufferandArrayBufferViewthat isBufferSourcetypedef of Web IDL.Although the WebNN prototyping CL 4006509 uses this typedef as workaround for a Blink generator issue, it reminds me whether we should consider that.