【发布时间】:2017-08-09 02:16:34
【问题描述】:
所以我有 1 个 64 核 CPU 的设施。我已经从 anaconda 安装了 tensorflow。我知道如果我有多个 CPU,我可以通过指定 CPUid 来分配计算。如下(改编自here):
with tf.device("/cpu:0"):
a = tf.Variable(tf.ones(()))
a = tf.square(a)
with tf.device("/cpu:1"):
b = tf.Variable(tf.ones(()))
b = tf.square(b)
with tf.device("/cpu:2"):
loss = a+b
opt = tf.train.GradientDescentOptimizer(learning_rate=0.1)
train_op = opt.minimize(loss)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(10):
loss0, _ = sess.run([loss, train_op])
print("loss", loss0)
上面的示例代码假设三个 CPU。但我想知道我是否可以使用现有设施(1 个 CPU,64 个内核)有效地进行某种高效的深度学习练习?有人可以帮助或指导我吗?
更新:
内核是 Intel Xeon Phi 处理器型号。
另外请注意,我没有管理员权限,所以无法编译任何库。我通过 Anaconda 安装了每个 python 库。
-
我试图理解一些东西。我在上面给出的代码中使用了时间线概念(来自here),如下所示:
import tensorflow as tf from tensorflow.python.client import timeline with tf.device("/cpu:0"): a = tf.Variable(tf.ones(())) a = tf.square(a) with tf.device("/cpu:0"): b = tf.Variable(tf.ones(())) b = tf.square(b) with tf.device("/cpu:0"): loss = a+b opt = tf.train.GradientDescentOptimizer(learning_rate=0.1) train_op = opt.minimize(loss) sess = tf.Session() run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) run_metadata = tf.RunMetadata() sess.run(tf.global_variables_initializer()) for i in range(10): run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) run_metadata = tf.RunMetadata() loss0, _ = sess.run([loss, train_op], options=run_options,run_metadata=run_metadata) print("loss", loss0) # Create the Timeline object, and write it to a json tl = timeline.Timeline(run_metadata.step_stats) ctf = tl.generate_chrome_trace_format() with open('timeline_execution1.json', 'w') as f: f.write(ctf)
然后我生成了不同的 json 文件,以在 chrome 中查看时间线,并在 tf.Session() 中使用 config=tf.ConfigProto(intra_op_parallelism_threads=#,inter_op_parallelism_threads=#) 行。然后我得到了不同的输出。但我只明白一点。该程序使用 4 个内核,无论我在 tf.Session() 中给出什么选项。如下:
【问题讨论】:
-
单CPU多核不是默认的吗?例如,您尝试了什么,结果如何?也就是说,64 核 CPU 要么是不起眼的 ARM,要么是 Xeon Phi 的 AFAIK。确切的架构可能对这个问题很重要。
-
@MSalters :内核是英特尔至强融核处理器型号。我会更新问题。
-
/cpu:0指的是所有 64 个内核,并行化会自动发生。您还可以创建cpu:1和cpu:2之类的逻辑设备,但它们指的是同一个物理 CPU,所以我认为没有理由使用它们 -
@YaroslavBulatov :我可以将 1CPU、64 核系统虚拟地制作成 8 个节点,每个节点有 8 个内核吗?我知道这是一个愚蠢的问题。关于逻辑 cpu:1 和 cpu:2,我认为它只有在我有多个节点时才有用。
-
不容易。 TensorFlow 不支持固定到物理 CPU 内核。您可以将分布式 tensorflow 与运行 tensorflow 的 8 个独立进程一起使用,并使用操作系统级工具(任务集)将每个进程固定到特定的核心集
标签: tensorflow parallel-processing deep-learning