美文网首页
(17)利用矩阵运算做加速

(17)利用矩阵运算做加速

作者: 顽皮的石头7788121 | 来源:发表于2023-03-17 12:44 被阅读0次

    背景:

        某场景中需要多次运算与外部交互,要求每次运算的时间尽可能少。当前使用的运算方法为spark 内存运算将大量数据加载到集群内存中,按行计算。
        实际上,这些数据是按某一种类别区分的,可以按类别组织成一个一个张量,通过矩阵运算来实现快速计算。
       (小区切换)
         核心:快速读,快速算,一些可以提前算的提前算好
         结果:比spark2.5快了30%
    

    实现方法:

        1、常用的矩阵运算一般为numpy来实现。因此以python作为主要语言。通过多进程来实现不同类别的区分。
        2、不同的外部参数也矩阵化便于矩阵运算。整体抽象出13个矩阵(每个类别),类别中数据量较大时,矩阵会比较大。
        3、多个矩阵之间串行计算,包括求和,求积,按行求最大值等操作。并引入爱因斯坦求和公式进行加速。
        4、通过python共享内存提前把数据加载好,在多进程使用的时候通过数据索引定位到数据取出计算。
        5、把每个进程的结果合并到一起返回
        6、通过pandas等做一些整合分类等交互
    

    瓶颈所在:

        1、python语言本身是相对比较慢的,会吃掉矩阵运算的收益;
        2、不同进程中的数据量不一,数据量最大的类别会拖慢整个计算进度。
        3、多进程使用时,不要从外部传入数据,序列化和反序列化会消耗很多时间。
        4、拿到多进程结果后,一些结果会需要pandas做一些运算,如数据分类等,耗时比numpy多。
        5、ray并行框架并未真正提升速度
    

    使用的算法参考

        1、爱因斯坦求和公式https://zhuanlan.zhihu.com/p/476279989
        2、python共享内存https://zhuanlan.zhihu.com/p/146769255?utm_source=wechat_session
        3、ray框架https://blog.csdn.net/u012925804/article/details/128040276

    相关文章

      网友评论

          本文标题:(17)利用矩阵运算做加速

          本文链接:https://www.haomeiwen.com/subject/ltjjrdtx.html