吞吐提升30倍:CV流水线迈向全栈并行化
发布时间:2023-02-14 14:18:44 所属栏目:服务器 来源:互联网
导读:斯坦福教授、Tcl 语言发明者 John Ousterhout 曾写过一本书《软件设计的哲学》,系统讨论了软件设计的通用原则和方法论,整书的核心观点是:软件设计的核心在于降低复杂性。 实际上,这个观点也适用于涉及底层硬件适配的软件设计。 具体而言,在传统的图像处
4、 应用案例 通过展示 CV-CUDA 在 NVIDIA 英伟达、字节跳动、新浪微博的应用案例,我们可以体会到 CV-CUDA 带来的性能提升有多显著。 在模型训练上,可以看到在 OCR1、OCR2、视频多模态三个任务上,使用了 CV-CUDA 后获得了 50% 到 100% 的性能收益。 为什么有这么大的性能收益?实际上这三个任务比较大的一个共同点是,它们的图片预处理逻辑非常复杂,比如 decode、resize、crop 等,而且这些还是大类,实际上每个算子类中还可能有很多小类或子类预处理。对于这三个任务而言,其涉及到预处理链路上的数据增强种类可能就有十几种,所以其对于 CPU 的计算压力非常大,如果能把这部分计算搬到 GPU上,CPU 的资源竞争就会明显下降,整体吞吐也能提高很多。 OpenCV 可以分为 CPU 解码和 GPU 解码两种模式,CV-CUDA 只采用 GPU 解码模式。 可以看到,对于 CPU 解码的 OpenCV,OpenCV 的解码和预处理都比 CV-CUDA 的耗时高得多。 再看 OpenCV 采用 GPU 解码的情况,可以看到,OpenCV 和 CV-CUDA 在模型和解码部分的耗时是接近的,而预处理方面仍然差距很大。 在 pipeline 整体对比上,CV-CUDA 也有很明显的优势,一方面 CV-CUDA 更节省 CPU 资源,也就是将 GPU 利用率打满的情况下,CV-CUDA 只需要 OpenCV 的 10%CPU 配置;同时,CV-CUDA 也更节省 GPU 资源,在整体 pipeline 上,CV-CUDA 效率提升70%。 06 未来展望 CV-CUDA 在模型训练和推理阶段都能有效地解决 CPU 资源竞争的问题,从而能够提高模型训练和推理的效率。 但如何正确理解 CV-CUDA 的优势?需要理解其发挥作用的根本前提,并且其优势相对于 CPU、OpenCV 并不是绝对的。 首先, CV-CUDA 实际上也不是万灵药。比如在模型训练阶段,如果瓶颈不是在预处理上,而是在数据读取、模型推理上。这时候,如果用 CV-CUDA 来替换原来的预处理方案,实际上也是没有任何用处的。 此外,在使用 CV-CUDA 的过程中,如果对预处理逻辑合理分配 CPU 和 GPU 的工作量,实际上有时候能够达到更好的性能效果。 比如,CPU 仍然可以进行图片解码和 resize,resize 之后再放到 GPU 上进行处理。 为什么把解码和 resize 放到 CPU 上做?首先,对于图片解码而言,其实 GPU 的硬解码单元是有限的。其次,对于 resize 而言,通常情况下,resize 都会把一张较大的图片,转换成一张较小的图片。 如果在 resize 之前,把数据拷贝到 GPU 上,可能会占用很多的显存数据搬运的带宽。 当然,CPU 和 GPU 之间的工作量具体怎么分配,还是需要结合实际情况来判断的。 而最重要的原则是,不要将 CPU 和 GPU 之间的计算交替穿插进行,因为跨 device 传输数据都是有开销的。如果交替过于频繁,反而可能将计算本身带来的收益抹平,进而导致性能不增反降。 2022 年 12 月,CV-CUDA 发布了 alpha 版本,其中包含 20 多个算子,比如常用的 Flip、Rotate、Perspective、Resize 等。 目前 OpenCV 的算子更多,有数千个算子,CV-CUDA 目前只对比较常用的算子进行加速,后续会不断增加新的算子。 今年 3 月 CV-CUDA 还会发布 beta 版本,会增加 20 多的算子,达到 50 多个算子。beta 版本将包含一些非常用的算子,比如 ConvexHull、FindContours 等。 (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |