当前位置: 华文问答 > 科学

知乎大佬们好,我懂深度学习算法,目前想往模型部署优化这个方向发展,请问学习路线是什么?

2020-08-01科学

做了五年深度学习算法部署的人来答。

首先 要明白的是你是只关心 "部署能不能跑通" 还是更关心 "部署跑通后的继续优化" ,如果你只是关注 "部署能不能跑通",那很简单套用下网上的示例就行,看到这里你就可以自行 `exit;` 返回就好;如果你是属于更加关注 "部署跑通后的继续优化",那就继续往下看。

对于深度学习的部署,可能会有种 "牛头不对马嘴" 的说法,就是 "记得用 C++ 来部署深度学习模型哦,用 C++ 效率高"。 所谓的 "用 C++ 部署深度学习模型" 的说法过于笼统 ,这么个说法的朋友的理由一般就是 "python 效率低、C++ 效率高,那就用 C++",然而这种说法在算法部署领域 是非常不专业的 。算法部署或者也可以称为推理优化,主要是在于先要看部署硬件、看目标平台来选择不同的推理框架、推理引擎,而不在于说是使用 Python 还是用 C++,当然一般就是 C++ 了,这种其实基本就是默认都不用说。

打个比方,比如有个项目需求,让你在英伟达的 GPU 上去部署一个深度学习模型,上 TensorRT 就是很自然的反应;再比如部署的目标平台是英特尔的工控机哦,那是不是可以考虑 OpenVINO;再比如要是在国产 AI 算力上部署呢,那就需要用厂商提供的推理引擎去做部署了,诸如此类...

上面说的是推理框架、推理引擎层面,这个层面其实是会 "通用性较低" 的,基本就是各家有各家的推理引擎,这个时候有一些 "愿景伟大" 的框架就出来了,其中最有代表的就是天奇 @陈天奇 的 TVM,用编译优化的方式致力于前、特别是后端硬件的统一,另外也有谷歌的 MLIR 也都在做这个事情,你可以了解。

除了 "不通用" 的推理引擎,算法部署还有一些通用的技术,比如前端模型转换、算子融合、量化、蒸馏、剪枝等,这些是与硬件平台无关的。比如量化,你完全是可以先在 CPU 做,拿到缩放 Scale 也就是所谓的校准表就行;比如前端模型转换,Pytorch 转 onnx 是家常便饭,虽然简便但并不简单,其中注意事项可不少,另外还有特殊如 pytorch 转 caffe、caffe 转 onnx 等,当然这些在这个年代越来越少了,还是 Pytorch 转 onnx 居多。这些也是需要学习的。

另外还有算法本身的知识,比如 CNN 模型的计算密集型优化、比如 Transformer 大模型的访存密集型优化,都是不一样滴。

以上例举了一些深度学习部署方面的知识,你可以看到,绝对不止于是选择 Python 或 C++ 这种编程语言层面的事情。

我之前也写过挺多关于算法部署、推理加速方面的技术分享,可供参考, 如果你感兴趣的话也墙裂推荐关注我 方便获取更多相关高质量技术分享,首发更新在我的公众号平台

当然,上面这些我只是拿了我 "宝藏" 中的小部分。

如果你愿望强烈想直接跟我沟通,可以点击下面的咨询,