前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从NVIDIA发布VPI看NVIDIA的大局观

从NVIDIA发布VPI看NVIDIA的大局观

作者头像
GPUS Lady
发布2021-03-12 16:17:48
1.2K0
发布2021-03-12 16:17:48
举报
文章被收录于专栏:GPUS开发者GPUS开发者

2月11日,NVIDIA做了一次线上讲座:

NVIDIA对VPI(视觉编程接口-Vision Programming Interface)做了一个比较详细的介绍,尤其讲解了为什么要用VPI:

NVIDIA提到,在很多开发场景里:

  • 需要多个互不兼容的API,
  • 很难做到高效的内存管理,
  • 很难对代码进行实验或微调。
  • 重要的是有些计算引擎不能通过公共API直接访问。

所以VPI的出现是为了解决和实现下面的功能:

  • 使用所有Jetson嵌入式加速器创建有效的CV管道
  • 不同加速器实现相同算法在系统级别轻松平衡CV
  • 工作负载统一的API与不同的加速器接口
  • 在Jetson和x86 Linux PC上实现加速
  • 不同加速器之间的Zero-copy内存管理
  • 与OpenCV,NVIDIA®CUDA®,EGL等实现互操作性
  • 设计用于取代NVIDIA®VisionWorks™

我们的理解是:从NV本文的介绍来看, VPI从软件方面综合了CPU上的经典算法和GPU上的经典算法的加速实现,. 例如可能是OpenCV, CUDA kernel, 以及, 其他的Vulkan/EGL之类的标准, 甚至是这里没有提到过的NV的NPP(基本图像处理功能的加速库). 也就是从软件上说, 它是一个新兴的功能集大成者。

为何要弄一个新的VPI, 而不是让以前的老用户自己手写kernel,或者继续沿用OpenCV呢? NV给出的理由主要是, 这个新东西是NV充分优化的, 能充分利用各种硬件. 比单纯的上一些老库效果/性能要好。

充分利用硬件这里主要说了, 用VPI这个新库, 能自动利用CPU, 能利用GPU, 包括在Jetson平台和PC平台上; 也能利用PVA和VIC这两种特殊的专用图像处理/视频处理加速硬件(仅限Jetson)。

而后面两种硬件, 以前NV是不开放的, 现在开放了以后, 可以在Jetson上免费启用, 从而能获取性能加速。例如我们可以理解成类似以前的Xavier和NX上的DLA一类的东西, 硬件在卖出产品的时候, 功能就造好了, 但是DLA直到后期卖了很久,软件方面才开放, 才让你用起来。

PVA和VIC也是这种道理,以前在没有VPI的时候, 我们的用户买了Jetson平台后, 进行加速的图像/视频处理, 只能用CPU和集成的GPU来。现在有了VPI后, 开放了PVA和VIC这两部分硬件, 从而能让用户手中的硬件升值了, 性能更好了。

有人可能要问,什么是PVA和VIC? NVIDIA也解释了一下:

从上图可以看到PVA目前只支持Jetson AGX Xavier和Xavier NX产品;VIC目前虽然支持全系列Jetson设备,但是某些运算也只支持Jetson AGX Xavier和Xavier NX。

NVIDIA给出了一个VPI在CPU和GPU上的benchmark,以及跟Visionworks的比较:

用VPI的确看似快了15x-30x, 但是存在一个问题——

用户以前用OpenCV, 可以方便的切换到PC平台上, 甚至切换到AMD家的平台上。用了这个VPI后, 虽然暂时简单了, 方便了, 性能快了(都是NV说的), 但是以后就绑定在NV的船上了。具体说绑定了NV的PC和NV的Jetson上了。

所以你如果为了节省开发成本, 和节省产品上市时间, 就使用VPI。如果不使用, 但换取随时可以跳船到AMD之类的可能. 这是个问题。

当然, 因为我们销售Jetson, 自然是希望用户绑定为好。但这里从公平的角度, 还是要说一下的。

NVIDIA特别强调了VPI的一个重要亮点:

什么是API统一? 也就是底层无论是CPU(PC/Jetson), 还是GPU(PC/Jetson), 还是PVA和VIA(Jetson only), 上层的接口都是统一的。也就是说, NV在支持的情况下, 部分算法至少实现了4个版本, 对应4个底层的硬件。这其实减少了很大的用户的工作量。

工作量主要减少在于, 用户不需要分别为各个底层组件微调了, 直接一套API用在所有的硬件形态上了,同时VPI内部, 还提供了自动负载均衡,例如在Xavier和NX上, 当CPU满载的以后, 可能/可以自动往GPU或者PVA上offload。

注意:一个使用了VPI的应用, 将不像以前我们那样写CPU或者GPU那样那样的完全自由, 每一行都可以自由定制, VPI应用(本文有说明)不是这样的,使用了VPI的硬件将自动分成一些基本的流水线, 和流水线里的固定功能(部分参数可变)的组件, 则这些组件可以在满足一定的依赖和前后发生的关系的情况下, 自动分布到不同的底层4种硬件上。

这个就像之前NV大获成功的deepstream那样,用了deepstream就不那么自由了, 不是啥都能随便干了,而是需要将应用拆分成deepsteam和gstreamer的基本组件,然后再用这些基本组件"拼"起来,就像积木那样.

如果说我们用传统的在Jetson上的写视频/图像处理应用, 是等于在用纯水泥之类的盖房子;则用deepstream和今天的VPI这种, 就是存在基本的楼板, 楼梯, 厨房, 厕所之类的"功能块",一个房子是用这些基本的块直接拼接起来的. 不像纯用水泥那么自由, 但是好处是快, 而且每个块(例如一个厨房功能块), 都是NV自己调好的, 无BUG, 上来就能用, 性能还不错.

这也是一个取舍的问题。

以后能到忽略 opencv的地步吗?

看功能介绍是基本可以的:

这是1.0版本的VPI发布版所提供的算法实现(注意不是所有算法实现都有4个版本的,有些是特定的).

注意第2-5个.这4个是bilateral滤波, gaussian滤波, 高斯金字塔, 卷积.很多年前,我们有一个用户用了半年时间, 在A卡上实现并优化了这4个,非常非常辛苦,然而这4个已经是VPI所提供的基本功能块(算法实现)之一了。

理论上说, 这个表会不断的扩充,毕竟这是1.0版本,最终OpenCV所有的, 可能它都会有。

当年这个用户不使用OpenCV的主要原因是, OpenCV的实现太慢了,不具有生产和实用价值.而我们之前在VPI的介绍中看到, VPI比OpenCV具有显著的加速.所以以前不能用OpenCV, 必须要手工上的场合,今天可能就可以直接用VPI了,因为当前的限制因素(性能), 可能已经被VPI解决了。

NVIDIA的大局观

我们其实不能不感慨NV的布局之深, 特别是今天的VPI这里,

大家还记得Xavier是哪年出来的么?

好吧. 2018年了.但是DLA何时才开放用起来的?而PVA/VIC(今天的VPI的组成部分2/4)又是2021年才开放。既然当年在设计硬件的时候, 就将这两种硬件嵌入成里面的功能块了, 证明NV的roadmap上(我们看不到), 这是一步比较深远的谋划了. 如此深远的谋划, 而且能坚持到今天(3年都足够一些小公司倒闭了), 提供了实现。证明这应该是NV的路线上的重要东西。

实际上的确如此!

VPI将取代VisonWorks

注意:NVIDIA也说了,将来VisionWorks将停止开发,将被VPI替代.

VisionWorks是NV手写的, 调好的OpenVX的GPU加速版本了.

我们之前看到了VPI将会替代OpenCV, 现在又说了VPI会替代VisionWorks/OpenVX, 毕竟VisionWorks只是GPU加速, 而VPI能根据算法的特性和当前系统中的任务量, 自动分配给底层的4种硬件.

VPI目前还没有Python接口

注意:现在只有C接口,但是未来会有Python接口

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
媒体处理
媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档