8、多设备和异构插件
多设备和异构插件
- 多设备插件
- 指定使用哪些设备
- 代码实例
- 异构插件
- 配置异构插件
- 代码实例
- 两个对比
多设备插件
多设备插件会在运行时检查当前各个计算设备的利用率,然后决定应该把哪个推理计算请求放到哪个计算设备中取,从而实现负载均衡。例如,有 4 个推理计算请求,电脑上有一个 CPU、一个 GPU、两个英特尔神经计算棒二代,则 4 个推理请求可以在 4 个计算设备上并行执行。
指定使用哪些设备
例如,配置为 MULTI:CPU, GPU, MYRID,意思是指定 Inference Engine 使用多设备插件,可以在 CPU、GPU、MYRID 上并行执行推理计算,排在前面的计算设备优先级高。
代码实例
// --------------------------- 5. 创建Infer Request--------------------------------------------std::cout << "5.Create Infer Request..." << std::endl;InferRequest::Ptr infer_request1 = executable_network.CreateInferRequestPtr();InferRequest::Ptr infer_request2 = executable_network.CreateInferRequestPtr();InferRequest::Ptr infer_request3 = executable_network.CreateInferRequestPtr();InferRequest::Ptr infer_request4 = executable_network.CreateInferRequestPtr();// --------------------------------------------------------------------------------------------// --------------------------- 6. 准备输入数据 ------------------------------------------------std::cout << "6.Prepare Input..." << std::endl;cv::Mat img1 = cv::imread(imageFile);cv::Mat img2 = cv::imread(imageFile);cv::Mat img3 = cv::imread(imageFile);cv::Mat img4 = cv::imread(imageFile);frameToBlob(img1, infer_request1, imageInputName);frameToBlob(img2, infer_request2, imageInputName);frameToBlob(img3, infer_request3, imageInputName);frameToBlob(img4, infer_request4, imageInputName);const size_t width = (size_t)img1.cols;const size_t height = (size_t)img1.rows;// --------------------------------------------------------------------------------------------// --------------------------- 7. 执行推理计算 ------------------------------------------------std::cout << "7.Start inference..." << std::endl;std::clock_t begin, end;begin = std::clock();for (auto i = 0; i <= 1000; i++){img1 = cv::imread(imageFile);frameToBlob(img1, infer_request1, imageInputName);infer_request1->StartAsync();img2 = cv::imread(imageFile);frameToBlob(img2, infer_request2, imageInputName);infer_request2->StartAsync();img3 = cv::imread(imageFile);frameToBlob(img3, infer_request3, imageInputName);infer_request3->StartAsync();img4 = cv::imread(imageFile);frameToBlob(img4, infer_request4, imageInputName);infer_request4->StartAsync();infer_request1->Wait(IInferRequest::WaitMode::RESULT_READY); infer_request2->Wait(IInferRequest::WaitMode::RESULT_READY); infer_request3->Wait(IInferRequest::WaitMode::RESULT_READY); infer_request4->Wait(IInferRequest::WaitMode::RESULT_READY);}end = std::clock();std::ostringstream infer_time;//计算推理计算所花费的时间infer_time << "Infer Time:" << (double)(end - begin) << "ms";cv::putText(img1, infer_time.str(), cv::Point2f(0, 12), cv::FONT_HERSHEY_TRIPLEX, 0.6, cv::Scalar(0, 255, 0));// --------------------------------------------------------------------------------------------// --------------------------- 8. 处理输出 ----------------------------------------------------std::cout << "8.Process output blobs..." << std::endl;const float *detections = infer_request1->GetBlob(outputName)->buffer().as<PrecisionTrait<Precision::FP32>::value_type*>();for (int i = 0; i < maxProposalCount; i++) {float image_id = detections[i * objectSize + 0];float confidence = detections[i * objectSize + 2];auto label = static_cast<int>(detections[i * objectSize + 1]);float xmin = detections[i * objectSize + 3] * width;float ymin = detections[i * objectSize + 4] * height;float xmax = detections[i * objectSize + 5] * width;float ymax = detections[i * objectSize + 6] * height;if (confidence > confidence_threshold) {/** 仅当> confidence_threshold值时,显示推理计算结果 **/std::ostringstream conf;conf << ":" << std::fixed << std::setprecision(3) << confidence;cv::putText(img1, (labels[label] + conf.str()),cv::Point2f(xmin, ymax - 5), cv::FONT_HERSHEY_COMPLEX_SMALL, 1,cv::Scalar(0, 0, 255));cv::rectangle(img1, cv::Point2f(xmin, ymin), cv::Point2f(xmax, ymax), cv::Scalar(0, 0, 255));}}std::cout << "Infer done!" << std::endl;cv::imshow("Detection results", img1);cv::waitKey(0);cv::destroyAllWindows();
异构插件
异构插件的核心思想是协同不同类型的计算资源,做各自擅长的计算,共同完成一个计算任务。
配置异构插件
例如,MULTI:CPU, GPU, MYRIAD,意思是指定 Inference Engine 使用异构插件,在多个计算硬件 CPU、GPU 和英特尔神经计算棒二代上进行异构计算。排在前面的计算硬件优先级高,同时异构插件会自动分配神经网络的计算任务到各个硬件。
代码实例
和最普通的推理计算流程一样,只是在指定推理设备的时候指定为 MULTI:CPU, GPU, MYRIAD。
两个对比
Inference Engine 可以通过调用不同的插件,实现在不同的硬件上执行 AI 推理计算的功能。 Inference Engine 提供多设备插件(MULTI)来实现多个硬件自动并行计算多个神经网络,也提供了异构插件(HETERO)来实现多个硬件各自分担一部分神经网络层的计算任务。
8、多设备和异构插件相关推荐
- 基于 jQuery支持移动触摸设备的Lightbox插件
Swipebox是一款支持桌面.移动触摸手机和平板电脑的jquery Lightbox插件.该lightbox插件支持手机的触摸手势,支持桌面电脑的键盘导航,并且支持视频的播放. 在线预览 源码下 ...
- 绕过 WAF:绕过一些 WAF 设备的 Burp 插件
我写了这个插件使用的技术博客文章在这里一会儿回来.如果存在特定标头,许多 WAF 设备可能会被诱骗相信请求来自自身,因此是可信的.绕过方法的基础知识可以在此处的 HP 博客文章中找到. 一段时间以来, ...
- Mobiscroll的介绍【一款兼容PC和移动设备的滑动插件】
Mobiscroll是一个用于触摸设备的日期和时间选择器,它的使用不会改变HTML5.PhoneGap以及混合应用的原生用户体验.作为一款jQuery滑动选择插件,用户可以自定义主题样式,为自己的移动 ...
- Revit二次开发——设备自动接管插件的开发思路(入门实例教程)
前文提及 使用翻模插件进行前期建模工作 是效率较高的工作模式 用翻模软件 对水暖管线翻模 简直爽到爆炸 解放劳动力刷知乎/强 本文介绍--管道与终端设备的自动接管插件开发思路 (以水管与风机盘管连接为 ...
- Linux字符设备驱动详解七(“插件“设备树实现RGB灯驱动)
文章目录 系列文章目录 前言 正文 Device Tree Overlays:"插件"设备树 传统设备树 "插件"设备树 使用前提 案例说明 设备树:foo.d ...
- 网站项目必备——12款白富美型 jQuery 图片轮播插件
转自:http://www.cnblogs.com/lhb25/archive/2013/01/06/jquery-image-carousel-effect.html 图片轮播是网站中的常用功能,用 ...
- 分享13个帮助你简化开发的jQuery插件
为什么80%的码农都做不了架构师?>>> 日期:2012-7-23 来源:GBin1.com jQuery的社区力量的重要体现就是jQuery插件,我们每隔一段时间就会在jQ ...
- 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 12款经典图片轮播jquery插件
图片轮播是网站中的常用功能,用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美 ...
最新文章
- 关系运算符、逻辑 运算符与三元运算符
- 搜索引擎是怎么删除重复网页的
- STM32-使用函数指针时莫名复位问题原因
- Linus Torvalds谈ECC内存的重要性 痛斥英特尔正在扼杀它
- python threading.Thread
- 匆匆的一瞥,错过了一份正确的BIOS……,安装X64系统时错刷BIOS的彻底死机过程以及解决方法...
- 软件工程导论知识点总结
- ar机房查看html5,探秘5G“智慧机房”:5G+AR技术实现机房智能巡检
- C#经纬度坐标算距离
- 【不定期更新】游戏开发中的一些良好习惯与技术技巧
- 盆栽的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- self-redemption
- Eclipse中使用Maven搭建SSM框架
- Webots平台下NAO机器人仿真环境的搭建
- oracle人语句大全,oracle查询语句大全
- DVB-C DEMOD 传输速率计算
- IPTV系统解决方案之酒店行业
- “神奇”的拉马努金矩阵
- 旅游指南之四----准备出发
- java add() 自己写_java问题 编写一个程序,用以重写父类Addition中名为add()的抽象方法。...
热门文章
- JAVA计算机毕业设计茶店订购管理系统计算机(附源码、数据库)
- 游戏设计师修炼之道:数据驱动的游戏设计
- 《Adobe Dreamweaver CS6中文版经典教程》——2.4 常用的HTML4代码
- Java初学者,JDK下载与环境配置
- Fireeye Mandiant 2014 安全报告 Part1
- 【强化学习】一文读懂,on-policy和off-policy
- 客户端与服务器端交互原理
- 继承属性:定义交通工具类Vehicle,一个小车类Car,一个公共汽车Bus类,实现Car、Bus对Vehicle的继承
- java 坦克机器人_[转]人工智能 Java 坦克机器人系列: 神经网络,下部
- 堡垒机、网闸以及防火墙区别