使Keras在多机多核cpu系统上运行


11

我正在使用Keras的 LSTM(使用Theano背景)来开发Seq2Seq模型,并且我想并行化这些过程,因为即使很少的MB数据也需要数小时的训练。

显然,GPU在并行化方面要比CPU好得多。目前,我只能使用CPU。我可以访问16个CPU(每个内核2个线程X每个插槽4个内核X 2个插槽)

从Theano 的多核支持文档中,我设法使用了单个套接字的所有四个核。因此,基本上,CPU使用率为400%,使用了4个CPU,其余12个CPU仍未使用。我也如何利用它们。如果可行,也可以使用Tensorflow代替Theano背景。

在此处输入图片说明

Answers:


7

为了设置Theano中使用的线程数(以及CPU核心数),您需要在环境中设置一些参数:

import os
os.environ['MKL_NUM_THREADS'] = '16'
os.environ['GOTO_NUM_THREADS'] = '16'
os.environ['OMP_NUM_THREADS'] = '16'
os.eviron['openmp'] = 'True'

这应该允许您使用所有CPU的所有内核。

当然,这也可以在Tensorflow中完成:

import tensorflow as tf
from keras.backend import tensorflow_backend as K

with tf.Session(config=tf.ConfigProto(
                    intra_op_parallelism_threads=16)) as sess:
    K.set_session(sess)
    <Your Keras code>

我要感谢这段代码在R中设置内核数(我在R中使用keras,并且仅使用了部分内核...)。特别是对于张量流。谢谢,米兰
gutompf

2
您可以使用Sys.setenv()在R中设置环境变量,类似于在Python中使用os.environ [var]。
Thomas Cleberg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.