元凯 WebNN API 将硬件加速的深度学习带入开放式 Web 平台

前端狗

2019/07/09 发布于 编程 分类

GMTC2019 

文字内容
1. WebNN API - 将硬件加速的深度 学习带入开放式 Web 平台 元凯宁 Intel 软件技术经理 kaining.yuan@intel.com
2. 自我介绍
3. 自我介绍
4. 自我介绍 Intel 亚太研发有限公司 Web Platform Engineering Team 软件技术经理。参与 Intel 开源的 Crosswalk、 RealSense 等项目,目前带领的团队负责 PWA 以及 Web Machine Learning 等方向。
5. 目录 * 其他名称和品牌可能是第三方的财产。 o o o o o 前端 JavaScript* ML 的演进与问题 WebNN API 的提案与实现 WebNN API 的代码及示例 WebNN API 的性能对比 W3C 社区组的进展及合作
6. 前端 JavaScript* ML 的演进 安全增强 图像分类 目标检测 语义分割 面部识别 娱乐与媒体 游戏/电子竞技 用户 场景 特征检测 超分辨率 手写识别 图像捕捉 智能监控 社交与合作 生产率 前端 框架 * 其他名称和品牌可能是第三方的财产。 情感分析 姿态识别 风格迁移 语音分析 Tensorflow*.js Onnx*.js Brain*.js OpenCV.js … 更多
7. 前端 JavaScript* ML 的优势 延迟 成本 访问本地资源的浏览器内推理。 客户端计算意味着不需要服务器端算力支持。 可用性 共享 初始资源缓存并离线后,不再依赖网络。 在浏览器中运行 ML,而无需任何额外的安装, 并易于共享。 隐私 跨平台 敏感数据本地访问。 可以轻松开发在几乎所有平台上运行的 AI 应 用。 * 其他名称和品牌可能是第三方的财产。
8. 前端 JavaScript* ML 框架的挑战与努力 性能 设备中的机器学习推理需要高性能的数值计算能力。 将 C++ 编译为高效的字节码,以便在浏览器 中进行解释和执行。 * 其他名称和品牌可能是第三方的财产。 重新调整图形 API 用于并行计算。
9. 前端 JavaScript* ML 框架 基于 AI 的 Web 应用 新兴的基于 AI 的 Web 应用 和 JavaScript* 框架 Web 应用 浏览器 驱动 硬件 * 其他名称和品牌可能是第三方的财产。 OpenCV.js ONNX*.js WebAssembly WebGL* WebGPU CPU GPU TensorFlow*.js Brain*.js
10. 性能: JavaScript* ML 框架的主要问题 ResNet50 推理时间 (越小越好) 6573 5000 2559 2355 1707 1622 2031 551 500 24x 294 3.9x 95 74 50 Cloud Vision* 云 * 其他名称和品牌可能是第三方的财产。 Keras*.js (JS) WebDNN* (WASM) OpenCV.js (WASM) CoreML* (CPU) Keras*.js (WebGL) Deeplearn*.j s (WebGL) CPU MacBook Pro (13-inch), SkyLake Core i5 2.9GHz, HD 550, macOS 10.14.4 ResNet50, trained by ImageNet, inference, batch size 1, warm up 1, iteration 10 Deeplearn*.j s (WebGL2) GPU WebDNN* (WebGPU/ Metal) CoreML* (GPU)
11. 前端 JavaScript* ML 框架与原生优化的隔绝 基于 AI 的 Web 应用 新兴的基于 AI 的Web 应用 和 JavaScript* 框架 Web 应用 浏览器 AI Lib 驱动 硬件 * 其他名称和品牌可能是第三方的财产。 OpenCV.js ONNX*.js WebAssembly WebGL* WebGPU AI Lib CPU Brain*.js TensorFlow*.js 缺乏原生软件 及硬件优化的桥梁 ? AI Lib GPU NPU VPU FPGA ASIC 新兴 AI 加速器
12. WebNN API: 为硬件加速而生 ONNX 模型 其他模型 已有 Web 应用 JavaScript* ML 框架 浏览器 OS ML API TensorFlow 模型 新提议 BNNS/MPS macOS*/iOS* 驱动 硬件 WebGL* WebGPU WebNN API WebAssembly DirectML Windows* OS NN API Android* OS API (TBD) Chrome OS* CPU GPU AI 加速器 o WebNN API: 用于深度神经网络推理的基于标准的 Web API o 与文本、多媒体、传感器和 XR 等其他 Web API 集成 o 充分利用硬件功能,将 Web 深度学习运算交由系统 API,实现神经网络推理的硬件加速 * 其他名称和品牌可能是第三方的财产。 OpenVINO™ Linux* OS
13. 前端 Web API 分层架构 Usage API Shape Detection Web Speech Vision NLP Skills MLKit WinML* (ONNX) TensorFlow Lite* (tflite) DirectML Android* NN Model API CoreML* (mlmodel) loadModel Acceleration API WebNN API BNNS MPS o Usage API: 内置模型,易于集成 ⇒ W3C 图形检测 API o Model API: 模型预先训练,格式存在碎片化问题 o Acceleration API: NN 底层 API,接近硬件优化,灵活适配 JS 框架 * 其他名称和品牌可能是第三方的财产。
14. WebNN API 提案 算子 Operations 配置信息 Configuration 操作数 Operands 模型 Model interface Model { void addOperand(OperandOptions options); void setOperandValue( unsigned long index, ArrayBufferView data); void addOperation( long type, sequence<unsigned long> inputs, sequence<unsigned long> outputs); void identifyInputsAndOutputs( sequence<unsigned long> inputs, sequence<unsigned long> outputs); Promise<long> finish(); Promise<Compilation> createCompilation(); }; 数据输入 Inputs 推理输出 Outputs 编译 Compilation interface Compilation { void setPreference(long preference); Promise<long> finish(); Promise<Execution> createExecution(); }; 执行 Execution interface Execution { void setInput( unsigned long index, ArrayBufferView data); void setOutput( unsigned long index, ArrayBufferView data); Promise<long> startCompute(); };
15. WebNN API: Chromium* 中的实现 Blink 模型 Model 编译 Compilation 执行 Execution Renderer 进程 Chromium * JavaScript: Promise<Compilation> createCompilation(); C++: void ModelImpl::CreateCompilation(CreateCo mpilationCallback callback) Mojo Service macOS* 实现 Android* 实现 Linux* 实现 JavaScript: CONV_2D GPU 进程 OS BNNS/MPS NN API OpenVINO™ 硬件 CPU GPU AI 加速器 C/C++: NN API: ANEURALNETWORKS_CONV_2D MPS: MPSCNNConvolution BNNS: BNNSFilterCreateConvolutionLayer https://github.com/otcshare/chromium-src * 其他名称和品牌可能是第三方的财产。
16. WebNN API 示例: 简单图 tensor0 ADD intermediateOutput0 tensor1 MUL output tensor2 ADD intermediateOutput1 tensor3 输入 算子 内部输出 输出
17. WebNN API 示例: 创建模型 // Get the neural network context. const nn = navigator.ml.getNeuralNetworkContext(); // Create a Model object. const model = await nn.createModel();
18. WebNN API 示例: 添加操作数 // Use 4-D tensor. const TENSOR_DIMS = [2, 2, 2, 2]; const TENSOR_SIZE = 16; const float32TensorType = { type: nn.TENSOR_FLOAT32, dimensions: TENSOR_DIMS }; // Track operand index. let operandIndex = 0; // tensor0 is a constant tensor, set its value from an ArrayBuffer object. // The ArrayBuffer object may contain the training data loaded before hand. const tensor0 = operandIndex++; model.addOperand(float32TensorType); model.setOperandValue(tensor0, new Float32Array(arrayBuffer, 0, TENSOR_SIZE)); // tensor1 is one of the input tensors. Its value will be set before // execution. const tensor1 = operandIndex++; model.addOperand(float32TensorType);
19. WebNN API 示例: 添加算子 // Add the first ADD operation. model.addOperation(nn.ADD, [tensor0, tensor1, fusedActivationFuncNone], [intermediateOutput0]); // Add the second ADD operation. model.addOperation(nn.ADD, [tensor2, tensor3, fusedActivationFuncNone], [intermediateOutput1]); // Add the MUL operation. // Note that intermediateOutput0 and intermediateOutput1 are specified // as inputs to the operation. model.addOperation(nn.MUL, [intermediateOutput0, intermediateOutput1, fusedActivationFuncNone], [output]); // Identify the input and output tensors to the model. model.identifyInputsAndOutputs([tensor1, tensor3], [output]); // Finish building the model. await model.finish();
20. WebNN API 示例: 编译模型 // Create a Compilation object for the constructed model. let compilation = await model.createCompilation(); // Set the preference for the compilation. // Other options include SUSTAINED_SPEED and LOW_POWER compilation.setPreference(nn.PREFER_FAST_SINGLE_ANSWER); // Finish the compilation. await compilation.finish();
21. WebNN API 示例: 模型执行 // Create an Execution object for the compiled model. let execution = await compilation.createExecution(); // Setup the input tensors. // They may contain data provided by user. let inputTensor1 = new Float32Array(TENSOR_SIZE); inputTensor1.fill(inputValue1); let inputTensor2 = new Float32Array(TENSOR_SIZE); inputTensor2.fill(inputValue2); // Associate input tensors to model inputs. execution.setInput(0, inputTensor1); execution.setInput(1, inputTensor2); // Associate output tensor to model output. let outputTensor = new Float32Array(TENSOR_SIZE); execution.setOutput(0, outputTensor); // Start the asynchronous computation. await execution.startCompute(); // The computed result is now in outputTensor.
22. 性能: iGPU / macOS 图像分类推理时间 (越小越好) WebGL* 1000 WebNN (MPS) 844.29 424.26 运行时间 (ms) (对数) 297.66 82.04 80.12 100 55.17 45.79 21.61 13.68 10.87 10 1 MobileNet v2 SqueezeNet Inception v3 Inception v4 1.6X 7.4X 9.3X 10.3X WebNN 加速 * 其他名称和品牌可能是第三方的财产。 MacBook Pro (13-inch, 2018), Intel i5-8259U, Iris Plus Graphics 655, 16GB, macOS 10.14.4 ResNet50 v2 5.4X
23. 性能: CPU / Linux 图像分类推理时间 (越小越好) WASM WebNN (Intel® MKL-DNN**) 10000 5479.89 3258.97 运行时间 (ms) (对数) 2546.64 1000 400.89 186.15 143.11 100 63.69 17.67 95.32 19.61 10 1 WebNN 加速 MobileNet v2 SqueezeNet Inception v3 Inception v4 ResNet50 v2 10.5X 20.4X 40.0X 38.3X 34.2X • 其他名称和品牌可能是第三方的财产。 ** Intel® Math Kernel Library for Deep Neural Networks Dell XPS 13, Intel i7-8550U, Intel UHD Graphics 620 (Kabylake GT2), 16GB, Linux Ubuntu 16.04
24. 性能: 移动设备 / Android 图像分类推理时间 (越小越好) Polyfill 运行时间 (ms) (对数) 1000 WebNN (NN API) 662.47 124.62 147 147 100 27 10 10 1 WASM vs WebNN (NNAPI/CPU) WebNN 加速 * 其他名称和品牌可能是第三方的财产。 5.3X WebGL* vs WebNN (NNAPI/GPU) WebGL*/fp32 vs WebNN (NNAPI/quant8) 5.4X 14.7X Google Pixel 3, Qualcomm Snapdragon 845, Adreno 630, 4GB, Android 9
25. WebNN API: W3C 规范及示例 Web Neural Network API This version: webmachinelearning.github.io/webnn/ Editor: Ningxin Hu (Intel Corporation) 2 Use cases 2.1 Application Use Cases 2.1.1 Person Detection 2.1.2 Semantic Segmentation 2.1.3 Skeleton Detection 2.1.4 Face Recognition 2.1.5 Facial Landmark Detection 2.1.6 Style Transfer 2.1.7 Super Resolution 2.1.8 Image Captioning 2.1.9 Machine Translation 2.1.10 Emotion Analysis 2.1.11 Video Summarization https://intel.github.io/webml-polyfill/examples/ * 其他名称和品牌可能是第三方的财产。
26. WebNN API: W3C 规范及 API Web Neural Network API This version: webmachinelearning.github.io/webnn/ Editor: Ningxin Hu (Intel Corporation) 3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 4 API Navigator ML NeuralNetworkContext OperandOptions Model Compilation Execution Examples o 通过性能、一致性和实现质量的差异,获得更好的用户体验。 o 基于标准的 Web API 的目标都是规范化硬件差异,为应用开发人员提供统一的接口。 o WebNN API 被提议作为用于深度神经网络的硬件加速 API。 * 其他名称和品牌可能是第三方的财产。
27. 示例: 目标检测 目标检测性能 WASM WebNN 运行 时间 (推理) 图片 3696 ms 13.60 ms 视频 3776 ms 14.60 ms 帧率 视频 0-1 FPS * 其他名称和品牌可能是第三方的财产。 30 FPS
28. WebNN API: 更多的集成与合作 更多基于 AI 的 Web 应用 浏览器内核 浏览器* * 其他名称和品牌可能是第三方的财产。 桌面应用* 小程序* 快应用* 其他应用
29. W3C 社区组 Machine Learning for the Web https://webmachinelearning.github.io https://github.com/webmachinelearning/webnn/issues 标准孵化 Web Neural Network API 有用的资源 § Community Group § Participants § Meetings § Charter § GitHub* § Mailing List 项目 https://github.com/intel/webml-polyfill 2018-10-03: W3C Web ML 社区组成立, CG 主席: Anssi (Intel) 2018-10-11: WebML CG 章程: 用于神经网络推理硬件加速的专用 API 2019-04-25: Google、微软等代表同意将 Intel WebNN POC API 作为基础规范 W3C 社区组邀请浏览器引擎开发人员,硬件供应商,Web 应用开发人员以及对机器学习感兴趣的更广泛的 Web 社区参与 • 其他名称和品牌可能是第三方的财产。 • Intel,Intel 徽标是 Intel Corporation 或其子公司在美国和/或其他国家/地区的商标。
30. 免责声明 本文档不以禁止翻供或其它的任何方式,明示或暗示授予任何知识产权下的许可证。 英特尔不承担任何明示或暗示保证,包括与特定意图的适用性、商销性或违反专利、版权或其它知识产权等有关的责任或保证,以及因性能,交易过 程或交易使用而产生的任何保证。 本文档包含有关正在开发的产品,服务和/或流程的信息。此处提供的所有信息如有更改,恕不另行通知。请联系您的英特尔代表,以获取最新的预 测,时间表,规格和路线图。 所描述的产品和服务可能包含已知为勘误表的缺陷或错误,可能会导致与已发布的规范不符。可根据要求提供当前特征勘误表。没有任何产品或组件 可以绝对安全。 可致电 1-800-548-4725 或访问 www.intel.com/design/literature.htm 获取本文件中带有订货号并参考的文件副本。 Intel,Intel 徽标和 OpenVINO 是 Intel Corporation 或其子公司在美国和/或其他国家/地区的商标。 * 其他名称和品牌可能是第三方的财产。