【CV算法上下游】算法工程师需要知道的硬件侧知识
0 导读
端侧设备是整个算法解决方案的重要组成部分,在此将我的公众号文章分享到牛客上,希望能和牛客上的朋友们一起交流学习CV算法以及相应的知识。也欢迎大家关注我的************。。"
公众号原文:
1 写在前面
【CV算法上下游】栏目专注于分享CV算法与机器学习辅助侧的知识,工具,平台与一些经验总结,欢迎大家一起交流学习
大家好,我是Rocky。
前几天在WeThinkIn技术交流群里,很多小伙伴探讨起了GPU的一些话题,我也参与了探讨,场面一度非常热烈。
GPU乃至硬件侧的整体逻辑,是CV算法工作中必不可少的组成部分,也是算法模型所依赖的重要物理载体。
故本文将聚焦于GPU,深度学习的端侧设备,算法工程师如何看待硬件等维度的分享,希望能和大家一起交流学习~
![](https://uploadfiles.nowcoder.com/files/20220313/648015371_1647163098446/v2-9b683f7d66ea64c5ba52648929611ea1_1440w.jpg)
So,enjoy(与本文的BGM一起食用更佳哦):
2 干货篇
2.1 目录先行
- GPU的相关知识
- 深度学习的端侧设备
- 算法工程师如何看待硬件侧
2.2 GPU的相关知识
现在AI行业有个共识,认为是数据的爆发和算力的突破开启了深度学习在计算机视觉领域的“乘风破浪”,而其中的算力,主要就是指以GPU为首的计算平台。
GPU(Graphical Processing Unit)从最初用来进行图形处理和渲染(玩游戏),到通过CUDA/OpenCL库以及相应的工程开发之后,成为深度学习模型在学术界和工业界的底层计算工具,其有以下的一些特征:
- 异构计算:GPU能作为CPU的协处理器与CPU协同运算。
- 单指令流多数据流(SIMD)架构:使得同一个指令(比如对图像数据的一些操作),可以同时在多个像素点上并行计算,从而得到比较大的吞吐量,深度学习中大量的矩阵操作,让GPU成为一个非常适合的计算平台。
- 多计算核心。比如Nvidia的GTX980GPU中,在和i7-5960CPU差不多的芯片面积上,有其128倍的运算速度。GTX980中有16个流处理单元,每个流处理单元中包含着128个CUDA计算核心,共有2048个GPU运算单元,与此同时i7-5960CPU只有16个类似的计算单元。
- CUDA模块。作为GPU架构中的最小单元,它的设计和CPU有着非常类似的结构,其中包括了一个浮点运算单元,整型运算单元以及控制单元。一个流处理单元中的CUDA模块将执行同一个指令,但是会作用在不同的数据上。多CUDA模块意味着GPU有更加高的计算性能,但更重要的是在算法侧有没有高效地调度和使用。
- 计算核心频率。即时钟频率,代表每一秒内能进行同步脉冲次数。就核心频率而言,CPU要高于GPU。由于GPU采用了多核逻辑,即使提高一些频率,其实对于总体性能影响不会特别大。
- 内存架构。GPU的多层内存架构包括全局内存,2级缓存,和芯片上的存储(包括寄存器,和1级缓存共用的共享内存,只读/纹理缓存和常量缓存)。
![](https://uploadfiles.nowcoder.com/files/20220313/648015371_1647163098578/v2-e11e1a4563ccbd4368e57b0f1eecef74_1440w.jpg)
在使用GPU时,在命令行输入nvidia-smi命令时会打印出一张表格,其中包含了GPU当时状态的所有参数信息。
![](https://uploadfiles.nowcoder.com/files/20220313/648015371_1647163098425/v2-13906b53a8e61f08477ed8b36d1750fe_1440w.jpg)
CUDA/cuDNN/OpenCL科普小知识:
- CUDA是NVIDIA推出的用于GPU的并行计算框架。
- cuDNN是NVIDIA打造的针对深度神经网络的加速库,是一个用于深层神经网络的GPU加速库。
- OpenCL是由苹果(Apple)公司发起,业界众多著名厂商共同制作的面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境。
2.3 深度学习的端侧设备
本章节我们从端侧设备的整体架构和与深度学习工程落地适配的角度切入,不涉及嵌入式或者其他底层细节知识。
深度学习的端侧设备,又可以叫做边缘计算设备,深度学习特别是CV领域中,模型+端侧设备的组合能够加快业务的即时计算,决策和反馈能力,极大释放AI可能性。
![](https://uploadfiles.nowcoder.com/files/20220313/648015371_1647163098470/v2-07672fb9dc721ced3ff753c13ce82f95_1440w.jpg)
深度学习的端侧设备主要由ARM架构的CPU+ GPU/TPU/NPU等协处理器 + 整体功耗 + 外围接口 + 工具链等部分组成,也是算法侧对端侧设备进行选型要考虑的维度。
在实际业务中,根据公司的不同,算法工程师涉及到的硬件侧范围也会不一样。如果公司里硬件和算法由两个部门分别负责,那么算法工程师最多接触到的硬件侧知识就是硬件性能评估,模型转换与模型硬件侧验证,一些硬件高层API接口的开发与使用;如果公司里没有这么细分的部门,那么算法工程师可能就会接触到端侧的视频编解码,模型推理加速,Opencv,FFmpeg,Tensor RT,工具链开发等角度的知识。
![](https://uploadfiles.nowcoder.com/files/20220313/648015371_1647163098443/v2-3886ff04d87f88eff3cada17c00b3167_1440w.jpg)
2.4 算法工程师如何看待硬件侧
首先,整体上还是要将硬件侧工具化,把端侧设备当做算法模型的一个下游载体,会熟练的选型与性能评估更加重要。
端侧设备是算法产品整体解决方案中一个非常重要的模块,算法+硬件的范式将在未来的边缘计算与万物智能场景中持续发力。
在日常业务中,算法模型与端侧设备的适配性与兼容性是必须要考虑的问题,端侧设备是否兼容一些特殊的网络结构?算法模型转化并部署后,精度是否下降?功耗与耗时能否达标?等等都让算法工程师的模型设计逻辑有更多的抓手。
3 精致的结尾
最后,希望本文能给大家带来关于硬件侧的一些思考~本来还想写神经网络的显存分析,但怕篇幅过长影响阅读。我准备后续单独整一篇,大家敬请期待!
最后的最后*********************************************************************************************************************~)" src="https://uploadfiles.nowcoder.com/images/20191018/468200_1571395204834_8266E4BFEDA1BD42D8F9794EB4EA0A13"/>" src="https://uploadfiles.nowcoder.com/images/20191018/468200_1571395204834_8266E4BFEDA1BD42D8F9794EB4EA0A13"/>