多设备和异构插件

  • 多设备插件
    • 指定使用哪些设备
    • 代码实例
  • 异构插件
    • 配置异构插件
    • 代码实例
  • 两个对比

多设备插件

多设备插件会在运行时检查当前各个计算设备的利用率,然后决定应该把哪个推理计算请求放到哪个计算设备中取,从而实现负载均衡。例如,有 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、多设备和异构插件相关推荐

  1. 基于 jQuery支持移动触摸设备的Lightbox插件

    Swipebox是一款支持桌面.移动触摸手机和平板电脑的jquery Lightbox插件.该lightbox插件支持手机的触摸手势,支持桌面电脑的键盘导航,并且支持视频的播放. 在线预览   源码下 ...

  2. 绕过 WAF:绕过一些 WAF 设备的 Burp 插件

    我写了这个插件使用的技术博客文章在这里一会儿回来.如果存在特定标头,许多 WAF 设备可能会被诱骗相信请求来自自身,因此是可信的.绕过方法的基础知识可以在此处的 HP 博客文章中找到. 一段时间以来, ...

  3. Mobiscroll的介绍【一款兼容PC和移动设备的滑动插件】

    Mobiscroll是一个用于触摸设备的日期和时间选择器,它的使用不会改变HTML5.PhoneGap以及混合应用的原生用户体验.作为一款jQuery滑动选择插件,用户可以自定义主题样式,为自己的移动 ...

  4. Revit二次开发——设备自动接管插件的开发思路(入门实例教程)

    前文提及 使用翻模插件进行前期建模工作 是效率较高的工作模式 用翻模软件 对水暖管线翻模 简直爽到爆炸 解放劳动力刷知乎/强 本文介绍--管道与终端设备的自动接管插件开发思路 (以水管与风机盘管连接为 ...

  5. Linux字符设备驱动详解七(“插件“设备树实现RGB灯驱动)

    文章目录 系列文章目录 前言 正文 Device Tree Overlays:"插件"设备树 传统设备树 "插件"设备树 使用前提 案例说明 设备树:foo.d ...

  6. 网站项目必备——12款白富美型 jQuery 图片轮播插件

    转自:http://www.cnblogs.com/lhb25/archive/2013/01/06/jquery-image-carousel-effect.html 图片轮播是网站中的常用功能,用 ...

  7. 分享13个帮助你简化开发的jQuery插件

    为什么80%的码农都做不了架构师?>>>    日期:2012-7-23  来源:GBin1.com jQuery的社区力量的重要体现就是jQuery插件,我们每隔一段时间就会在jQ ...

  8. 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  9. 12款经典图片轮播jquery插件

    图片轮播是网站中的常用功能,用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美 ...

最新文章

  1. 关系运算符、逻辑 运算符与三元运算符
  2. 搜索引擎是怎么删除重复网页的
  3. STM32-使用函数指针时莫名复位问题原因
  4. Linus Torvalds谈ECC内存的重要性 痛斥英特尔正在扼杀它
  5. python threading.Thread
  6. 匆匆的一瞥,错过了一份正确的BIOS……,安装X64系统时错刷BIOS的彻底死机过程以及解决方法...
  7. 软件工程导论知识点总结
  8. ar机房查看html5,探秘5G“智慧机房”:5G+AR技术实现机房智能巡检
  9. C#经纬度坐标算距离
  10. 【不定期更新】游戏开发中的一些良好习惯与技术技巧
  11. 盆栽的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. self-redemption
  13. Eclipse中使用Maven搭建SSM框架
  14. Webots平台下NAO机器人仿真环境的搭建
  15. oracle人语句大全,oracle查询语句大全
  16. DVB-C DEMOD 传输速率计算
  17. IPTV系统解决方案之酒店行业
  18. “神奇”的拉马努金矩阵
  19. 旅游指南之四----准备出发
  20. java add() 自己写_java问题 编写一个程序,用以重写父类Addition中名为add()的抽象方法。...

热门文章

  1. JAVA计算机毕业设计茶店订购管理系统计算机(附源码、数据库)
  2. 游戏设计师修炼之道:数据驱动的游戏设计
  3. 《Adobe Dreamweaver CS6中文版经典教程》——2.4 常用的HTML4代码
  4. Java初学者,JDK下载与环境配置
  5. Fireeye Mandiant 2014 安全报告 Part1
  6. 【强化学习】一文读懂,on-policy和off-policy
  7. 客户端与服务器端交互原理
  8. 继承属性:定义交通工具类Vehicle,一个小车类Car,一个公共汽车Bus类,实现Car、Bus对Vehicle的继承
  9. java 坦克机器人_[转]人工智能 Java 坦克机器人系列: 神经网络,下部
  10. 堡垒机、网闸以及防火墙区别