【问题标题】:How to stop TensorFlow from multi-threading如何阻止 TensorFlow 多线程
【发布时间】:2020-02-13 10:53:09
【问题描述】:

我正在为 NIST FRVT 编写代码。 NIST 希望程序以最多 2 个线程(仅 CPU,无 GPU)运行。 我在我的代码中使用 TensorFlow,但它总是产生超过 2 个线程。 I tried this solution. It decreased the number of threads, but not up to 2

我收到此警告

[警告] 我们检测到您的软件在创建模板期间可能正在线程化或使用其他多处理技术。检测到的线程数是 9,应该是 2。根据 API 文档,实现必须运行单线程。在测试环境中,线程没有优势,因为 NIST 将跨多个刀片和多个进程分配工作负载。我们强烈建议您在提交之前解决此问题。

NIST 正在通过top -H -b -n1 | grep validate11 | wc -l 计算线程

有没有办法强制 TensorFlow 最多使用 2 个线程?

是否有任何可以在 2 个线程上运行的 TensorFlow 版本?

(是因为TensorFlow,我从代码中去掉了TensorFlow部分检查)

张量流版本 1.8.0

opencv 3.4.1 版

g++ 版本 4.8.5

g++ -std=c++11

【问题讨论】:

  • 高度并行工作是 tensorflow 的重点,不是吗?听起来你在使用错误的工具来完成这项工作。
  • 不知道确切的细节,但我非常怀疑这是可能的。事实上,开始是没有意义的。当一个人想要限制 cpu 使用时,通常需要的是限制并发运行的线程数。总体而言,执行者的问题没有解决,因此全球有效解决的可能性很小。
  • 这似乎有点复杂,因为 TF 以不同的方式使用线程。查看process_util.cc,至少有三个相关的环境变量,TF_NUM_INTEROP_THREADSTF_NUM_INTRAOP_THREADSOMP_NUM_THREADS
  • 您还可以查看NumSchedulableCPUs 以了解如何计算默认并行度(此处为Windows)。例如,在 Linux 中,也许您可​​以更改进程的亲和性,以便仅在两个内核上运行。
  • @jdehesa 在将 NumSchedulableCPUs 的返回值硬编码为 0 和 1 后,我尝试构建 tensorflow,但仍然存在警告。 NIST 使用 Linux(Centos 7),他们想要一个共享文件(.so 文件),我们无法控制进程。

标签: c++ multithreading tensorflow c++11


【解决方案1】:

参考以下来源,似乎不可能在 1 个或 2 个线程上运行 TensorFlow。

我提交了具有 6 个以上线程的 NIST-FRVT 实现,NIST 接受了这一点。 6 个线程中只有 1 个在运行,其余线程处于睡眠模式。

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 2015-10-22
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    相关资源
    最近更新 更多