paper note 001 && An Architecture for Parallel Topic Model - louiss007/lsml GitHub Wiki

摘要

本文描述了一种基于工作站集群的主题模型推断的高性能采样框架。我们系统的性能超出之前的系统的性能至少一个数量级,可以处理千万篇文档,同时包含上万个主题的规模。

本算法依靠一种新的通信结构,即在节点之间的采样器状态的同步,采纳了一种分布式key-value存储的形式。我们的框架完全避免了计算与同步分阶段进行的需求。相反,可以同时利用硬盘,CPU和网络,获得高性能。我们也表示了此框架是完全通用的一种,可以很容易被扩展到更复杂的隐变量模型上,如n-grams和分层模型。

主要思想

问题

Mallet和UCI LDA做了一个关键的近似: 给定k个进程,将含有n个文档的集合划分为k份,独立地处理每一份是可以接受的。每次遍历文档的统计量之后,同步需要一个独立的步骤。

之前方法的缺点

  • 当采样正在进行的时候,网络并没有在使用。这样可能会造成接下来增加网络带宽的负担
  • 由于许多原因(系统,硬盘访问,工作负载,采样的进行),每个进程处理k篇文档的时间大大不同。一直等到最后一个进程完成之后再进行同步,这样会带来潜在的空闲时间的等待。
  • 在多进程系统中,这会将内存分配增加k倍,进而导致内存溢出。
  • 划分造成了同步之间的延迟。

解决方案

  • 框架

first generation ps

  1. sampler相当于parameter server中的worker节点,主要作用是对划分的本地数据,进行计算(这里是采样)
  2. memcached相当于parameter server中的server节点,主要作用是对参数进行存储与更新,另外相应worker节点的请求。
  • 实现
  1. 利用google protobuf提供的数据序列化,来加速性能
  2. 文档的数据流完全是本地的,利用Intel的TBB library来自动并行和调度多核系统
  3. 节点之间的异步通信,通过memcached来实现。优点是编写少量的服务端代码即可,缺点是memcached延迟比较严重,尤其是client和server在不同的机架上时
  • 流程
  1. Local Initilization(stage 0), client初始化memcached,接着建立本地存储表
  2. State Aggregation(stage 1), 相当于ps中的push操作,将本地计算的结果汇总到server节点上,进行参数的更新
  3. Local State Synchronization(stage 2),相当于ps中的pull操作,轮询memcached,待所有节点到达stage 2的时候,将全局参数broadcast给本地节点,更新本地局部参数块
  4. Sampling(stage 3),相当于ps中的worker节点,主要进行数据的计算。哪个节点进行完stage 2的操作,就继续工作,无需等待其他节点

缺点

总结

本文提出parameter server的初始框架概念,很好的解决了之前大模型预测的性能。但框架并不是太通用,主要偏向于语言模型和隐变量模型。但作为第一代参数服务器,为当前的大规模机器学习指明了道路,具有一定的开创性作用。