gpt4 book ai didi

Python 多处理/EM

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:45 25 4
gpt4 key购买 nike

我在 Python 中做了一个机器学习期望最大化算法,基本上是一个用于机器翻译的 IBM Model1 的实现( here is my GitHub 如果你想看看代码)并且它有效,但是 reeeaaaaallly sloowwwlly。我现在正在上并行计算类(class),我想知道我是否可以使用 Python Multiprocessing更快地达到收敛。谁能给我任何指示或提示?我什至不知道从哪里开始。

编辑:我四处阅读并找到了 this paper关于使用 EM 和 MapReduce 进行并行化——也许这是一个更好的主意?

最佳答案

你的大部分问题是 Python 真的很慢。请记住,您的代码是在解释器中执行的。当您在代码中(例如第 82 行)一次执行一个元素的数值计算时,您将进行一次计算 - 以及 Python 解释器的所有开销。

您要做的第一件事是使用 numpy 向量化您的代码.与普通的 python 代码不同,numpy 正在调用预编译的高效二进制代码。您可以隐藏到 numpy 中的工作越多,您花在解释器上的时间就越少。

向量化代码后,如果它仍然太慢,您就可以开始分析它。您应该能够找到很多关于如何 vectorize python, and some of the alternative options 的简单示例.

编辑:让我澄清一下,并行化本质上较慢的代码大多是毫无意义的。首先,并行化慢速代码会给人一种错误印象,即您已经做出了改进。并行代码的“扩展”应该始终针对相同代码的最快可能单线程版本来完成(在合理范围内,无需在开始任何并行代码之前在汇编中编写所有内容)。例如,考虑争用中的锁。争夺锁的线程越多,代码运行的速度就越慢,您将得不到(或负面的)性能提升。减少锁争用的一种方法是简单地减慢争夺锁的代码。这使得它看起来好像没有锁争用的开销,而实际上 - 您没有任何改进,因为最快的单线程代码版本将胜过您的并行代码。

此外,Python 确实不是一种学习如何编写并行代码的好语言。Python 有 GIL ,这基本上强制 python 中的所有多线程代码运行,就好像只有一个 CPU 内核一样。这意味着必须完成奇怪的黑客攻击(例如您链接的黑客攻击),这些黑客攻击有其自身的额外缺点和问题(有时需要/使用此类技巧,但它们不应该是在单个上运行代码的默认设置机器)。不要指望你在编写任何并行 Python 代码时学到的东西可以转移到其他语言或帮助你完成类(class)。

关于Python 多处理/EM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19500078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com