OpenVINO Deep Learning Workbench
使用 Docker 运行 DL Workbench
拉取镜像
docker pull openvino/workbench:2022.1
运行
docker run -p 0.0.0.0:5665:5665 --name workbench -it openvino/workbench:2022.1
浏览器访问
DL Workbench 工作流程
快速了解 DL Workbench 用户界面中的工作流程

参考资料
使用 Docker 运行 DL Workbench
拉取镜像
docker pull openvino/workbench:2022.1
运行
docker run -p 0.0.0.0:5665:5665 --name workbench -it openvino/workbench:2022.1
浏览器访问
DL Workbench 工作流程
快速了解 DL Workbench 用户界面中的工作流程

参考资料
研扬
Firefly
英特尔 Movidius 视觉处理器 (VPU)
基础知识
M.2
M.2原名为NGFF接口,标准名称为PCI Express M.2 Specification。它是为超极本(Ultrabook)量身定做的新一代接口标准,以取代原来基于mini PCIe改良而来的mSATA固态硬盘。无论是更小巧的规格尺寸还是更高的传输性能M.2都远胜于mSATA。随着SATA接口瓶颈不断凸显,越来越多的主板厂商也开始在自家产品线上预留M.2接口,主流的M.2接口有三种尺寸,分别是M.2 2242、2260、2280。
NVMe NVM Express(NVMe),或称非易失性内存
EasyEdge 是基于百度飞桨轻量化推理框架 Paddle Lite 研发的端与边缘 AI 服务平台,能够帮助深度学习开发者将自建模型快速部署到设备端。可基于多种深度学习框架、网络结构的模型,快捷转换发布适配多种 AI 芯片与操作系统的端/边缘计算模型,支持纯离线计算/端云协同服务。

硬件平台适配

操作系统
上传本地模型
模型属性
安装依赖库
pip install typer python-docx
编写脚本 workload-evaluation.py import os import logging import shutil import random import zipfile import openpyxl import typer from copy import copy from openpyxl.utils import rows_from_range # 日志设置 logger = logging.getLogger() logger.setLevel(logging.DEBUG) ## 文件输出 file_handler = logging.FileHandler("log.txt") file_handler.setLevel(logging.DEBUG) ## 控制台输出 stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.DEBUG) formatter = logging.
Ubuntu 下安装依赖包
sudo apt-get update
sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev
获取源代码
git clone --recursive https://github.com/apache/tvm tvm
安装 LLVM
TVM 需要 LLVM 用于 CPU 代码生成,使用 LLVM 构建需要 LLVM 4.0 或更高版本。
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-11.0.0/clang+llvm-11.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz
tar xvf clang+llvm-11.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz
mv clang+llvm-11.0.0-x86_64-linux-gnu-ubuntu-20.04 llvm
构建共享库 创建 build 目录,将 cmake/config.

from tvm.driver import tvmc
model = tvmc.load('resnet50-v2-7.onnx')
package = tvmc.compile(model, target="llvm")
from tvm.driver import tvmc
model = tvmc.load('sign.onnx') #Step 1: Load
package = tvmc.compile(model, target="llvm") #Step 2: Compile
result = tvmc.run(package, device="cpu") #Step 3: Run
print("Time :", timeit.default_timer() - starttime)
import onnx
import tvm
from tvm import relay
// ...
参考资料 The Deep Learning Compiler: A Comprehensive Survey 深度学习编译器整理 一篇关于深度学习编译器架构的综述论文 Getting Starting using TVMC P
NVIDIA Jetson™ 是世界领先的平台,适用于自主机器和其他嵌入式应用程序。该平台包括 Jetson 模组(外形小巧的高性能计算机)、用于加速软件的 NVIDIA JetPack™ SDK,以及包含传感器、SDK、服务和产品的生态系统,从而加快开发速度。Jetson 与其他 NVIDIA 平台上所用的相同 AI 软件和云原生工作流相兼容,并能为客户提供构建软件定义的自主机器所需的性能和能效。 每个 NVIDIA Jetson 都是一个完整的系统模组 (SOM),其中包括 GPU、CPU、内存、电源管理和高速接口等。不同性能、能效和外形规格的组合满足各类行业的客户所需。Jetson 生态系统合作伙伴提供软件、硬件设计服务以及涵盖载板到完整系统的现成兼容产品,因此您可以借助 AI 嵌入式边缘设备更快地打入市场。
技术规格
| 参数 | 规格 |
|---|---|
| 性能 | 472 GFLOPS |
| 最大功耗 | 10 W |
| 显存 | 4 GB |
英特尔 Movidius 视觉处理器 (VPU) 英特尔® Movidius™ Myriad™ X 视觉处理器为计算机视觉和深度神经网络推理应用提供出色性能。
onnxsim 本身只提供 constant folding/propagation(即消除结果恒为常量的算子)的能力,而图变换(即合并 conv 和 bn 等等)的能力是由 onnxsim 调用 onnx optimizer 的各种 pass 实现的。constant folding 和图变换同时使用时,很多隐藏的优化机会会被挖掘出来,这也是 onnxsim 优化效果出色的原因之一。例如 add(add(x, 1), 2) 在变换为 add(x, add(1, 2)) 之后就可以通过 constant folding 变为 add(x, 3),而 pad(conv(x, w, padding=0), add(1, 1)) 在经过 constant folding 变为 pad(conv(x, w, padding=0), 2) 后,就可以进一步融合成 conv(x, w, padding=2)。
安装
pip install -U pip
pip install onnx-simplifier
使用
命令
onnxsim input_onnx_model output_onnx_model
脚本集成 import onnx from onnxsim import simplify # load your predefined ONNX model model = onnx.
融合卷积和批量标准化的原理

PyTorch 的实现 def fuse_conv_bn_eval(conv, bn, transpose=False): assert(not (conv.training or bn.training)), "Fusion only for eval!" fused_conv = copy.deepcopy(conv) fused_conv.weight, fused_conv.bias = \ fuse_conv_bn_weights(fused_conv.weight, fused_conv.bias, bn.running_mean, bn.running_var, bn.eps, bn.weight, bn.bias, transpose) return fused_conv def fuse_conv_bn_weights(conv_w, conv_b, bn_rm, bn_rv, bn_eps, bn_w, bn_b, transpose=False): if conv_b is None: conv_b = torch.zeros_like(bn_rm) if bn_w is None: bn_w = torch.
指定浏览器打开链接
open -a Safari http://stackoverflow.com/
open -a Firefox http://stackoverflow.com/
open -a Chrome http://stackoverflow.com/
参考资料
下载文件
下载单个文件
curl http://book.d2l.ai/_images/catdog.jpg -o catdog.jpg
下载多个文件
curl https://download.01.org/opencv/2021/openvinotoolkit/2021.1/open_model_zoo/models_bin/1/face-detection-retail-0004/FP32/face-detection-retail-0004.xml https://download.01.org/opencv/2021/openvinotoolkit/2021.1/open_model_zoo/models_bin/1/face-detection-retail-0004/FP32/face-detection-retail-0004.bin -o face-detection-retail-0004.xml -o face-detection-retail-0004.bin
下载文件并创建目录 curl --create-dirs https://download.01.org/opencv/2021/openvinotoolkit/2021.
该工具使用卷积网络执行推理。性能可以测量两种推理模式:
帮助信息 -i PATHS_TO_INPUT [PATHS_TO_INPUT ...], --paths_to_input PATHS_TO_INPUT [PATHS_TO_INPUT ...] Optional. Path to a folder with images and/or binaries or to specific image or binary file.It is also allowed to map files to network inputs: input_1:file_1/dir1,file_2/dir2,input_4:file_4/dir4 input_2:file_3/dir3 -m PATH_TO_MODEL, --path_to_model PATH_TO_MODEL Required. Path to an .xml/.onnx file with a trained model or to a .blob file with a trained compiled model. -d TARGET_DEVICE, --target_device TARGET_DEVICE Optional.
可以比较两个连续模型推理的准确性和性能指标,这些推理在两个不同的受支持的英特尔设备上执行或以不同的精度执行。交叉检查工具可以比较每层或整个模型的指标。
查看帮助信息 $ python cross_check_tool.py -h usage: -------------------------------------------------------------- For cross precision check provide two IRs (mapping files may be needed) run: python3 cross_check_tool.py \ --input path/to/file/describing/input \ --model path/to/model/.xml \ --device device_for_model \ --reference_model path/to/reference_model/.
深度学习准确性验证框架
进入 accuracy_checker 目录
cd open_model_zoo/tools/accuracy_checker
下载数据集
wget https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
tar xvf cifar-10-python.tar.gz -C sample
配置文件结构
models:
- name: model_name
launchers:
- framework: openvino
adapter: adapter_name
datasets:
- name: dataset_name
评估 accuracy_check -c sample/sample_config.yml -m data/test_models/ -s sample/ 2022-05-18 11:18:38.663810: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.
IGD(Integrated Graphics Device)
操作系统:Ubuntu 18.04,主机有一张 NVIDIA 的独立显卡 GP106 [GeForce GTX 1060 6GB],还有 Intel 酷睿处理器 i5 8500 自带的集成显卡(Intel UHD Graphics 630)。为了更充分的使用独立显卡用于深度学习计算,需要把集成显卡用于显示。在这个过程中遇到了各种各样的问题:
BIOS 设置
显卡设置
选择 IGD,保存退出。
配置 X Window 显示显卡设备信息 lspci lspci -k | grep -EA3 'VGA|3D|Display' | | | | | - Only VGA is not good enough, | | | | | because Nvidia mobile adapters | | | | | are shown as 3D and some AMD | | | | | adapters are shown as Display. | | | | --------- Print 3 lines after the regexp match.
NVIDIA 软件栈

GPU Driver
Ubuntu
sudo ubuntu-drivers devices
#搜索匹配
sudo apt search nvidia-
sudo apt install nvidia-driver-510
sudo reboot
nvidia-smi
sudo apt purge nvidia*
CUDA Toolkit
CUDA Toolkit 自带驱动。

下载
这里下载 run 格式安装包。
安装
$ sudo sh cuda_xx.x.x_xxx.xx.xx_linux.run
deviceQuery $ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "NVIDIA GeForce GTX 1060 6GB" CUDA Driver Version / Runtime Version 11.6 / 11.
Install
# clone
git clone https://github.com/ultralytics/yolov5
cd yolov5
# create virtual python environments
python -m venv yolov5_env
source yolov5_env/bin/activate
python -m pip install --upgrade pip
# install
pip install -r requirements.txt
Inference import torch # Model model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # or yolov5m, yolov5l, yolov5x, custom # Images img = 'https://ultralytics.com/images/zidane.jpg' # or file, Path, PIL, OpenCV, numpy, list # Inference results = model(img) # Results results.print() # or .show(), .save(), .
网络性能分析
查看每层的性能测量值,可以获得最耗时的层。
实现方式
通过配置收集指定设备上的性能分析
core = Core()
core.set_property(device_name, {"PERF_COUNT": "YES"})
通过推理请求获得性能分析数据
request = compiled_model.create_infer_request()
results = request.infer({0: input_tensor})
prof_info = request.get_profiling_info()
可视化性能分析 def print_infer_request_profiling_info(prof_info): column_max_widths = { 'node_name': 0, 'node_type': 0, 'exec_type': 0 } for node in prof_info: if len(node.node_name) > column_max_widths['node_name'] : column_max_widths['node_name'] = len(node.
目标检测
激活 OpenVINO 开发环境
source openvino_env/bin/activate
预训练模型
<omz_dir>/data/dataset_classes/voc_20cl_bkgr.txt下载模型 $ omz_downloader --name ssd300 ################|| Downloading ssd300 ||################ ========== Downloading /home/wjunjian/openvino/openvino/samples/python/hello_reshape_ssd/public/ssd300/ssd300.tar.gz ... 100%, 95497 KB, 3917 KB/s, 24 seconds passed ========== Unpacking /home/wjunjian/openvino/openvino/samples/python/hello_reshape_ssd/public/ssd300/ssd300.tar.
同步推理
激活 OpenVINO 开发环境
source openvino_env/bin/activate
预训练模型
<omz_dir>/data/dataset_classes/imagenet_2012.txt下载模型 $ omz_downloader --name googlenet-v1 ################|| Downloading googlenet-v1 ||################ ========== Downloading /home/wjunjian/openvino/openvino/samples/python/hello_classification/public/googlenet-v1/googlenet-v1.prototxt ... 100%, 35 KB, 41370 KB/s, 0 seconds passed ========== Downloading /home/wjunjian/openvino/openvino/samples/python/hello_classification/public/googlenet-v1/googlenet-v1.caffemodel ...
没有找到匹配的文章