最近在用topic model跑一些数据,算法采用了LDA和PLSA进行对比,由于数据量稍大,采用了LDA的并行化版本,对其并行化方法很感兴趣,查看了相关资料后先总结如下,有时间可以继续琢磨。Gibbs Sampling用来逼近LDA中的隐式变量,是一种较为简单的实现方式。
Gibbs 方法
传统的实现方法是串行的,主要流程如下:
步骤4中,每一个word都需要对全局进行更新,很容易造成网络拥堵,是并行化主要优化的地方,一种并行化方案如下:
上面的方法一方面可以进行异步网络传输,另一方面设置cache进行批量更新可以减少同步带来的加锁操作。
在采用的LDA并行化版本里面,基本是采用方法二的思路进行优化,即用MPI集群的多个计算节点分别进行计算部分文档集合,在每台计算节点,采用多线程的方法进行加速,在每台计算节点计算完成之后,更新全局的p(word|topic),然后进行下一轮的迭代。在程序运行的过程中发现在单台计算节点采用多线程的方法不一定能提高效率,甚至会降低运行速度,需要进一步观察和实验。

本文探讨了使用LDA算法处理大量数据时的并行化方法,重点介绍了Gibbs Sampling在近似隐式变量中的应用,并详细分析了一种通过异步网络传输和批量更新减少同步操作的并行化策略。文章还分享了在实际应用中遇到的问题,即在单台计算节点上使用多线程方法可能并不总是提高效率,需要进一步观察和实验以优化性能。
2万+

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



