我正在使用 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 是否在内部以某种方式为我完成它?interop?在python示例中,他们使用模块fork中的函数torch.jit,但我在 C++ API 中找不到类似的东西。