# 分布式计算
## [为何分布式计算?](https://radimrehurek.com/gensim/distributed.html#why-distributed-computing "永久链接到这个标题")
需要构建一个语料库的语义表示,这个语料库是数百万个大型文档并且它将永远存在?您可以使用几台闲置的机器吗? [分布式计算](https://en.wikipedia.org/wiki/Distributed_computing)试图通过将给定任务拆分为几个较小的子任务来加速计算,并将它们并行传递到多个计算节点。
在gensim的上下文中,计算节点是由其IP地址/端口标识的计算机,并且通过TCP / IP进行通信。整个可用机器集合称为*集群*。分布非常粗糙(进行的通信不多),因此允许网络具有相对较高的延迟。
> 警告
* 使用分布式计算的主要原因是使事情运行得更快。在gensim中,大多数耗时的东西是在NumPy内部的线性代数的低级例程中完成的,与任何gensim代码无关。 **为NumPy ****安装快速** [BLAS(基本线性代数)](https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms) **库可以将性能提高15倍!**因此,在开始购买这些额外的计算机之前,请考虑安装一个针对您的特定计算机优化的快速线程BLAS(而不是通用的二进制分布式库)。选项包括供应商的BLAS库(英特尔的MKL,AMD的ACML,OS X的vecLib,Sun的Sunperf,......)或一些开源替代品(GotoBLAS,ALTAS)。
* 要查看您正在使用的BLAS和LAPACK,请键入您的shell:
`python -c 'import scipy; scipy.show_config()'`
## [先决条件](https://radimrehurek.com/gensim/distributed.html#prerequisites "永久链接到这个标题")
对于节点之间的通信,gensim使用[Pyro(PYthon远程对象)](https://pypi.python.org/pypi/Pyro4),版本> = 4.27。这是一个用于Python中的低级套接字通信和远程过程调用(RPC)的库。Pyro4是一个纯Python库,因此它的安装非常简单,只需将* .py文件复制到Python的导入路径上:
`pip install Pyro4`
您不必安装Pyro来运行gensim,但如果不这样做,您将无法访问分布式功能(即,所有内容都将始终以串行模式运行,此页面上的示例不适用)。
## [核心概念](https://radimrehurek.com/gensim/distributed.html#core-concepts "永久链接到这个标题")
与往常一样,gensim努力寻求一个清晰明了的API(见[功能](https://radimrehurek.com/gensim/intro.html#design))。为此,*您无需在代码中进行任何更改*,以便在计算机集群上运行它!
您需要做的是在开始计算之前在每个集群节点上运行一个[工作](https://radimrehurek.com/gensim/distributed.html#term-worker)脚本(见下文)。运行此脚本告诉gensim它可以使用该节点作为从属程序将某些工作委托给它。在初始化期间,gensim中的算法将尝试查找并奴役所有可用的工作节点。
* Node
一个逻辑工作单位。可以对应单个物理计算机,但您也可以在一台计算机上运行多个工作程序,从而生成多个逻辑节点。
* Cluster
通过TCP / IP进行通信的几个节点。目前,网络广播用于发现和连接所有通信节点,因此节点必须位于同一[广播域内](https://en.wikipedia.org/wiki/Broadcast_domain)。
* Worker
在每个节点上创建的进程。要从群集中删除节点,只需终止其工作进程。
* Dispatcher
调度员将负责协商所有计算,排队(“调度”)个人工作给工人。计算永远不会直接与工作节点“交谈”,只能通过此调度程序。与worker不同,集群中一次只能有一个活动调度程序。
## [可用的分布式算法](https://radimrehurek.com/gensim/distributed.html#available-distributed-algorithms "永久链接到这个标题")
* [分布式潜在语义分析](https://radimrehurek.com/gensim/dist_lsi.html)
* [分布式潜在Dirichlet分配](https://radimrehurek.com/gensim/dist_lda.html)