Gensim官方教程翻译(六)——分布式计算(Distributed Computing)

来源:互联网 发布:win8安装不了软件 编辑:程序博客网 时间:2024/05/20 05:03

为何要分布式计算?

需要构建一个百万文档级语料库的语义代表,却耗时太~~长?手上有几个可用的闲置计算机?分布式计算力争通过将给定的任务切分为几个小型任务,并将这些任务指派给几台平行的计算机完成来实现加速计算。 
在这里提到的计算节点是指通过其IP地址/端口识别的计算机,并通过TCP/IP协议完成通讯。所有可用的计算机作为一个整体,称为集群(cluster)。分布式是非常粗粒度的(没有太多实时通讯),因此允许网络有相对较高的延迟。

警告:使用分布式的最重要的原因是加快速度。在gensim中,大多数时间消耗在其内部的底层线性代数计算上,主要是NumPy中,与任何gensim代码无关。为NumPy安装一个快速的基本线性代数(BLAS)库能将提高至15倍!因此在你开始购买额外的计算机前,先考虑安装一个快速的、多线程的BLAS来使你的机器发挥其更大的能力(而不是一个通用的、二进制分布式库)。可选的BLAS库包括你的供应商的BLAS库(Inter MKL,AMD ACML,OS X vecLib,Sun Sunperf)或者一些开源的 (GotoBLAS, ALTAS)。 
想查看你正在使用哪个BLAS和LAPACK,你可以在命令行输入: 
python -c 'import scipy; scipy.show_config()'

预备知识

Gensim使用Python远程对象(Remote Object,Pyro)实现节点间的通讯,版本号不低于4.27。这是一个底层套接字通讯和远程程序调用(RPC)库。Pyro是一个纯Python库,因此其安装十分简单,仅需将其*.py文件复制到你的Python的import路径。

sudo easy_install Pyro4
  • 1

你不需要为了运行gensim安装Pyro,但是如果你不安装,就不能使用其分布式计算(即所有的过程都将是连续模式运行,本页面的例子无法使用)。

核心概念

就像往常一样,gensim努力做到干净、简单的API(参见介绍部分的“属性”)。你不需要为了能在计算机集群上运行而对你的代码进行任何修改! 
你需要做的是开始计算前在每一个集群节点上运行一个工作者脚本(见下方)。运行该脚本告知gensim它可以使用这些节点工作。在初始化时,gensim内部算法将会尝试寻找和使用所有可用的工作者节点。

节点

一个逻辑工作单元。可以是一台物理机器,也可以在一台机器上运行多个工作者脚本得到多个逻辑节点。

集群

几个可以通过TCP/IP通讯的节点。现在,网络广播被用来发现和连接所有通讯节点,因此节点必须在同一个广播域。

工作者

在每个节点上创建的进程。从集群中移除节点,仅需结束他的工作者进程。

调度

调度器将会负责协调所有计算任务、队列、分发(“分派”)各个工作者的工作。计算指令从不与工作者节点直接交流,仅仅通过调度器。一个集群中同一时间仅能有一个活动的调度器,不像工作者可以有多个。

其他分布式算法

  • 分布式潜在语义分析
  • 分布式隐含狄利克雷分配
阅读全文
0 0
原创粉丝点击