百科问答小站 logo
百科问答小站 font logo



视觉算法的工业部署及落地方面的技术知识,怎么学? 第1页

  

user avatar   oldpan 网友的相关建议: 
      

一看这个题目的关键字“部署”和“落地”就深深吸引到了我 。想想当年(去年)秋招,神仙打架诸神黄昏的CV岗,大神们的简历上都是充满顶会比赛top1等等,我不擅长算法(虽然我是算法工程师),简历上也就只能简单水水top10的比赛,写一些水水的项目。唯一感觉和大佬们简历稍微不同的也就落地和部署这块了。看了前面几位大佬的回答,感触颇深,所以我也来简单聊聊(大部分其他回答已经说了,我再补充些吧)。

个人认为算法部署落地这个方向是比较踏实务实的方向,相比“设计模型提出新算法”,对于咱们这种并不天赋异禀来说,只要你肯付出,收获是肯定有的(不像设计模型,那些巧妙的结果设计不出来就是设计不出来你气不气)。其实算法部署也算是开发了,不仅需要和训练好的模型打交道,有时候也会干一些粗活累活(也就是dirty work),自己用C++、cuda写算子(预处理、op、后处理等等)去实现一些独特的算子。算法部署最常用的语言是啥,当然是C++了,C++虽然复杂,但是由于优异的性能和各种特性(类对象、元编程等),被很多推理框架作为backbone的语言。

如果你想要自学但不知道学哪个,无从下手,哈哈恭喜你和当初的我一毛一样。不过你现在要是问,我还是不知道应该跟你怎么说,因为部署落地这方面你需要学习需要做的事情还是蛮多的。最好还是以项目作为驱动,或者找一些开源的推理部署框架练练手,找一两个开源项目玩玩,找找感觉,自己也就逐渐有方向了。

前面几位大佬提到的NCNN(优秀)、MNN(牛逼)等框架(还有很多框架这里不一一列举了额),是针对移动端进行部署进行优化的推理引擎,对ARM核进行了优化,如果你想做和移动端或者嵌入式端有关系的,可以看看这两个框架的源码,跑一两个demo找找感觉,另外还有Openvino和TensorRT,分别是对应cpu和gpu端的首推框架(想详细了解可以参考我之前的文章),可以找相关的项目去做做。

部署的流程一般就是:

  • 训练一个模型,也可以是拿一个别人训练好的模型
  • 针对不同平台生成的模型进行转换,也就是俗称的parse、convert,前端解释器
  • 针对转化后的模型进行优化,这一步很重要,涉及到很多优化的步骤
  • 将转化好的模型运行在特定的平台(嵌入端或者服务端)

需要掌握什么技术,学好C++很重要,起码能看懂各种关于部署精巧设计的框架(再列一遍:Caffe、libtorch、ncnn、mnn、tvm、openvino、tensorrt,不完全统计,我就列过我用过的)。当然并行计算编程语言也可以学一个,针对不同的平台而不同,可以先学学cuda,资料更多一些,熟悉熟悉并行计算的原理,对以后学习其他并行语言都有帮助。

部署和落地的重要性...当然是很重要呃,对于硬件公司来说,需要将深度学习算法部署到性能低到离谱的开发板上,因为成本能省就省,这时就需要部署了。在算法层面优化模型是一方面,但更重要的是从底层优化这个模型,这就涉及到部署落地方面的各个知识(手写汇编算子加速、算子融合等等);对于软件公司来说,我们往往需要将算法运行到服务器上,当然服务器可以是布满2080TI的高性能CPU机器,但是如果QPS请求足够高的话,需要的服务器数量也是相当之大的。这个要紧关头,如果我们的模型运行的足够快...可以省机器又可以腾一些buffer上新模型岂不很爽,这个时候也就需要优化模型了,其实优化手段也都差不多,只不过平台从arm等嵌入式端变为gpu等桌面端了。

系统的知识嘛,有是有,不过实际中都是用到啥再看啥,有项目在push你,个人建议直接上手项目,没有自己找找,按需学习。

这里简单总结下可以选择上手:

  • 好用的开源推理框架:caffe NCNN、MNN、TVM
  • 好用的开源推理框架:Openvino、TensorRT(infer不开源)
  • 好用的开源服务器框架:triton-server
  • 好用又不好用的编程语言:C++、CUDA、python
  • 基础知识:计算机原理 编译原理等

最近在搞triton server,将TensorRT作为inference后qps很夸张(这个是服务端部署),有兴趣可以找我一块交流。

再补充一点:之前没有详细提到TVM这个神奇的神经网络编译器,TVM最近也增加了对TensorRT转化的支持,可以无缝将relay的中间ir转化为TensorRT的算子op,从而实现两者之间的转换。

有关TVM可以看我之前的两篇文章:

总之,如果想要好好学习落地部署这一类知识,首先还是需要认真阅读一些优秀的开源框架的源码,了解其工作原理和内部实现。久而久之,慢慢尝试,对于落地部署这一块也就慢慢熟络起来了。

如果有对部署落地有着同样疑问的小伙伴们,可以关注我了解更多的部署落地方面的知识,也欢迎在公众号或者在博客中留言。




  

相关话题

  PRML为何是机器学习的经典书籍中的经典? 
  人工智能领域有哪些精妙的数学原理? 
  2019 秋招的 AI 岗位竞争激烈吗? 
  一个脑洞:理论上,是否有可能用一根棍子记录无限多的信息? 
  如何评价余凯在朋友圈发表呼吁大家用 caffe、mxnet 等框架,避免使用 TensorFlow? 
  image caption这个方向更偏向NLP还是CV? 
  如何看待QQ邮箱翻译出他人的快递通知? 
  为什么 Linux 指针越界时程序会立即被中断,而 Windows 不会? 
  印度现在的硬件水平是什么样的?印度政府又是什么态度? 
  如何看待代码中的中文变量名? 

前一个讨论
国内 top2 高校研一在读,为什么感觉深度学习越学越懵?
下一个讨论
如果你得到一台运算性能比目前最快的超算快一亿倍的电脑,但不能让外界知道它的存在,怎样最有效的利用它?





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利