如何在一个核心上运行Tensorflow?

时间:2016-07-04 15:08:33

标签: tensorflow core

我在群集上使用Tensorflow,我想告诉Tensorflow只在一个核心上运行(即使有更多可用的)。

有人知道这是否可行?

3 个答案:

答案 0 :(得分:27)

要在一个CPU线程上运行Tensorflow,我使用:

session_conf = tf.ConfigProto(
      intra_op_parallelism_threads=1,
      inter_op_parallelism_threads=1)
sess = tf.Session(config=session_conf)

device_count限制使用的CPU数量,而不是内核或线程数。

tensorflow/tensorflow/core/protobuf/config.proto说:

message ConfigProto {
  // Map from device type name (e.g., "CPU" or "GPU" ) to maximum
  // number of devices of that type to use.  If a particular device
  // type is not found in the map, the system picks an appropriate
  // number.
  map<string, int32> device_count = 1;

在Linux上,您可以运行sudo dmidecode -t 4 | egrep -i "Designation|Intel|core|thread"以查看您拥有的CPU /核心/线程数,例如以下有2个CPU,每个CPU有8个核心,每个核心有2个线程,总共有2 * 8 * 2 = 32个线程:

fra@s:~$ sudo dmidecode -t 4 | egrep -i "Designation|Intel|core|thread"
    Socket Designation: CPU1
    Manufacturer: Intel
            HTT (Multi-threading)
    Version: Intel(R) Xeon(R) CPU E5-2667 v4 @ 3.20GHz
    Core Count: 8
    Core Enabled: 8
    Thread Count: 16
            Multi-Core
            Hardware Thread
    Socket Designation: CPU2
    Manufacturer: Intel
            HTT (Multi-threading)
    Version: Intel(R) Xeon(R) CPU E5-2667 v4 @ 3.20GHz
    Core Count: 8
    Core Enabled: 8
    Thread Count: 16
            Multi-Core
            Hardware Thread

使用Tensorflow 0.12.1和1.0.0使用Ubuntu 14.04.5 LTS x64和Ubuntu 16.04 LTS x64进行测试。

答案 1 :(得分:2)

您可以通过在创建会话时将ConfigProto中的相应device_count作为config参数传递来限制TensorFlow使用的特定类型的设备数量。例如,您可以按如下方式限制CPU设备的数量:

config = tf.ConfigProto(device_count={'CPU': 1})
sess = tf.Session(config=config)
with sess.as_default():
  print(tf.constant(42).eval())

答案 2 :(得分:0)

是的,通过线程亲缘关系是可能的。线程相似性允许您决定要由哪个CPU特定内核执行哪个特定线程。对于线程相似性,您可以在Linux上使用“ taskset”或“ numatcl”。您还可以使用https://man7.org/linux/man-pages/man2/sched_setaffinity.2.htmlhttps://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html

以下代码不会指示/引导Tensorflow仅在单个内核上运行。

TensorFlow 1

session_conf = tf.ConfigProto(
      intra_op_parallelism_threads=1,
      inter_op_parallelism_threads=1)
sess = tf.Session(config=session_conf)

TensorFlow 2

import os
# reduce number of threads
os.environ['TF_NUM_INTEROP_THREADS'] = '1'
os.environ['TF_NUM_INTRAOP_THREADS'] = '1'
import tensorflow

这将总共产生至少N个线程,其中N是cpu核心数。在大多数情况下,只有一个线程会运行,而其他线程处于睡眠模式。

来源: https://github.com/tensorflow/tensorflow/issues/42510 https://github.com/tensorflow/tensorflow/issues/33627