【发布时间】: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_THREADS、TF_NUM_INTRAOP_THREADS和OMP_NUM_THREADS。 -
您还可以查看
NumSchedulableCPUs以了解如何计算默认并行度(此处为Windows)。例如,在 Linux 中,也许您可以更改进程的亲和性,以便仅在两个内核上运行。 -
@jdehesa 在将 NumSchedulableCPUs 的返回值硬编码为 0 和 1 后,我尝试构建 tensorflow,但仍然存在警告。 NIST 使用 Linux(Centos 7),他们想要一个共享文件(.so 文件),我们无法控制进程。
标签: c++ multithreading tensorflow c++11