【问题标题】:Multithreading Forwards/Backwards for a CRFCRF 的多线程向前/向后
【发布时间】:2021-05-13 21:37:06
【问题描述】:

我正在尝试多线程前向后算法以找到边际概率。这将用作训练 CRF 的子模块。以下是单个示例的 CRF 训练前向部分的伪代码(来自here)。

for i in 0 .. T-1:
    for j in 1 ... N:
        for k in 1 ... N:
            p = alpha[(i-1)][k] + trans[k][j] + obvs[j][i]
            alpha[i][j] = logadd(alpha[i][j], p)

我计划使用 N 个线程(对于我的用例,N 最多为 10)来独立计算 alpha 矩阵的列,并在完成计算每一行时与屏障同步实际上比原始顺序代码运行更慢.

我相信同步机制的开销是这个问题的根源,因为我使用池中的线程和所有操作的可重用屏障。是否有更好的设计我应该考虑,或者 N 的小尺寸不能证明并行计算 alpha 列是合理的?

【问题讨论】:

    标签: python multithreading machine-learning crf


    【解决方案1】:

    我速度变慢的原因是使用多线程库而不是 Python 中的多处理库。由于 GIL(全局解释器锁)的性质,一次实际上只有一个线程在运行。这对于不需要任何 IO 操作的计算有界程序来说是非常无效的。上下文切换只会导致我的代码运行速度变慢。在不同进程之间共享同步原语完全是另一个问题,我还不确定如何处理......

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      相关资源
      最近更新 更多