为啥选择C++部署AI算法?
因为很多算法都是模型比较大,属于计算密集型算法,对服务器或pc机的要求较高.落地使用Python来部署算法肯定没有优势性.
目前业界的常用做法也是采用Python来训练模型,使用C++来部署算法,这样做的好处有以下几个方面:1)可以提高算法的计算性能包括CPU使用,内存使用,执行效率等; 2)嵌入式开发必不可少的是C++;
如何优化性能?
算法层面
确定你的模型是否能精简?
重新思考你的算法模型是否已经是最简,很多问题是没必要选择很复杂的模型,看看输入的维度能否简化?模型的节点数能否减少?输入的层数能否减少? 减少这些可以简化模型,提升运行效率
优化矩阵乘法的性能,例如充分利用硬件平台的高性能数学库mkl和cuDNN
优化内存布局,避免冗余的访存操作,尤其是transpose;因为核心利用率低的原因之一很可能是内存访问开销过大,导致计算核心没有充分利用,transpose操作和过多的数据存取操作或者内存布局不合理都可能引起该问题;
针对硬件平台进行微架构优化,提升多个核心的并行计算效率;大量零散的python算子势必带来大量的op kernel启动和存储开销,进行算子融合是最有效的解决方法。
C++语法层优化
对于C++开发,我感触最深的是尽量少使用赋值,多使用引用和指针,毕竟这是C++独有的.对于提升效率很关键
建议减少for循环的使用,特别是多层for循环的嵌套,毕竟循环能增加你的开销;
libtorch 框架层优化
因为libtorch模型是依据cpu的核数来自动开启等量的线程,并不是起的线程越多 效率越高;
线程数与效率的关系图如下:
3.依据你的电脑cpu核数来改变线程数 你会有惊喜发现,效率能提升几十倍.
结论
从原来90ms 优化到3ms