小编Boh*_*icz的帖子

Pytorch C++ (Libtroch),使用操作间并行性

我正在使用 PyTorch 的 C++ API 开发机器学习系统 ( libtorch)。

我最近一直在做的一件事是研究libtorch. 通过我的研究,我了解到 Torch 在 CPU 上使用两种并行化方式:

  • inter-op并行化
  • intra-op并行化

我的主要问题是

  • 这两者之间的区别
  • 我如何利用inter-op并行性

我知道我可以使用该函数指定用于并行性的线程数intra-op(根据我的理解,这是使用openmp后端执行的)torch::set_num_threads(),当我监视模型的性能时,我可以清楚地看到它使用了我指定的线程数使用这个函数,我可以通过改变intra-op线程数看到明显的性能差异。

还有另一个函数torch::set_num_interop_threads(),但似乎无论我指定多少个互操作线程,我都看不到性能有任何差异。

现在我已经阅读了这篇 PyTorch 文档文章,但我仍然不清楚如何利用互操作线程池。

文档说:

PyTorch 使用单个线程池来实现操作间并行性,该线程池由应用程序进程中分叉的所有推理任务共享。

我对这部分有两个问题:

  • 我是否需要自己创建新线程来利用这些interop线程,或者 torch 是否在内部以某种方式为我完成它?
  • 如果我需要自己创建新线程,我该如何在C++中执行此操作,以便从线程池中创建一个新线程interop

python示例中,他们使用模块fork中的函数torch.jit,但我在 C++ API 中找不到类似的东西。

c++ python multithreading pytorch libtorch

2
推荐指数
1
解决办法
2105
查看次数

标签 统计

c++ ×1

libtorch ×1

multithreading ×1

python ×1

pytorch ×1