度过了浮躁的第一个月,第二个月开始接手Trumpet的测试任务,要求在月底之前完成Trumpet中Bicluster,SVD,LinearRegression的性能优化并发布第一个release。
第一周
follow up,在学弟离职前学习如何修改scala代码,编译并在集群上运行。在集群上部署spark的分析系统dew并生成分析图表,用于分析spark运行阶段的各个stage的情况,内存使用情况以及网络通信情况。
第二周
看懂bicluster, svd, linearRegression, wilcox, covariance的源码,从读取输入到调用mllib中算法运算再到最后输出。同时学习spark的逻辑执行流程,物理执行流程。spark根据action的类型划分job,每次job从最后的partition回溯到最一开始的输入partition,根据其中的shuffle类型划分出stage。最后按照partition的数目划分task并分配到各个executors上面。了解了这些原理为之后优化和测试的工作提供了理论的支持。
第三周
修改bicluster,svd代码。
svd中把对于dom的调用去掉了,降低了对于内存的要求,使得我们可以采用更小的partitions,减少了shuffle的数量。最终性能提升了一倍。
bicluster是主要修改的程序,起初的思想很简单,参照svd降低对于内存的要求,采用更小的partitions。同时重写原来的矩阵乘法和矩阵转置乘,利用rdd的窄映射把rdd直接作为矩阵乘的参数,减少一次collect的shuffle。但是在测试的时候发现有一次调用bicluster时间很短,后来每一次都达到了迭代的上限而不能收敛。后来的时间全部花在解决这个问题上面,经过一步步的排查发现在bicluster之前会调用依次svd,svd返回并传给bicluster的参数每次都不一样。而迭代的过程会放大误差,导致每次的结果都出现偏差。最后发现svd采用的是近似估计,返回的值是不确定的。解决的办法是通过降低准确度使每次传给bicluster的值保持恒定。
第四周
对bicluster和

在Intel的第二个月,我专注于Trumpet项目的Bicluster、SVD和LinearRegression性能优化。通过深入理解源码和Spark执行流程,我成功提升了SVD性能一倍。在Bicluster的优化过程中,发现并解决了由于SVD近似估计导致的不稳定性问题。最后,我对读入数据和算法执行的partition进行了策略调整,以提高程序健壮性。这次经历让我深刻体会到精准思考在问题解决中的重要性。
最低0.47元/天 解锁文章
3584

被折叠的 条评论
为什么被折叠?



