[英]Can Keras with Tensorflow backend be forced to use CPU or GPU at will?
我安裝了帶有 Tensorflow 后端和 CUDA 的 Keras。 我有時想按需強制 Keras 使用 CPU。 不用說在虛擬環境中安裝單獨的僅 CPU 的 Tensorflow 就可以做到這一點嗎? 如果是這樣怎么辦? 如果后端是 Theano,則可以設置標志,但我還沒有聽說過可通過 Keras 訪問的 Tensorflow 標志。
如果你想強制 Keras 使用 CPU
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""
在導入 Keras / Tensorflow 之前。
運行你的腳本
$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py
另見
這樣做的一個相當可分離的方法是使用
import tensorflow as tf
from keras import backend as K
num_cores = 4
if GPU:
num_GPU = 1
num_CPU = 1
if CPU:
num_CPU = 1
num_GPU = 0
config = tf.ConfigProto(intra_op_parallelism_threads=num_cores,
inter_op_parallelism_threads=num_cores,
allow_soft_placement=True,
device_count = {'CPU' : num_CPU,
'GPU' : num_GPU}
)
session = tf.Session(config=config)
K.set_session(session)
在這里,使用booleans
GPU
和CPU
,我們通過嚴格定義允許 Tensorflow 會話訪問的 GPU 和 CPU 的數量來指示我們是希望使用 GPU 還是 CPU 運行我們的代碼。 變量num_GPU
和num_CPU
定義了這個值。 num_cores
然后通過intra_op_parallelism_threads
和inter_op_parallelism_threads
設置可使用的 CPU 內核數。
intra_op_parallelism_threads
變量指示允許計算圖中單個節點中的並行操作(內部)使用的線程數。 而inter_ops_parallelism_threads
變量定義了跨計算圖(inter)節點的並行操作可訪問的線程數。
如果滿足以下任一條件, allow_soft_placement
允許在 CPU 上運行操作:
該操作沒有 GPU 實現
沒有已知或注冊的 GPU 設備
需要與來自 CPU 的其他輸入一起定位
所有這些都在我的類的構造函數中在任何其他操作之前執行,並且與我使用的任何模型或其他代碼完全分離。
注意:這需要安裝tensorflow-gpu
和cuda
/ cudnn
,因為提供了使用 GPU 的選項。
參考:
這對我有用(win10),在導入 keras 之前放置:
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
只需導入 tensorflow 並使用 keras,就這么簡單。
import tensorflow as tf
# your code here
with tf.device('/gpu:0'):
model.fit(X, y, epochs=20, batch_size=128, callbacks=callbacks_list)
根據 keras 教程,您可以簡單地使用與常規張量流相同的tf.device
范圍:
with tf.device('/gpu:0'):
x = tf.placeholder(tf.float32, shape=(None, 20, 64))
y = LSTM(32)(x) # all ops in the LSTM layer will live on GPU:0
with tf.device('/cpu:0'):
x = tf.placeholder(tf.float32, shape=(None, 20, 64))
y = LSTM(32)(x) # all ops in the LSTM layer will live on CPU:0
我只是花了一些時間才弄清楚。 托馬的回答並不完整。 假設你的程序是test.py
,你想使用 gpu0 來運行這個程序,並保持其他 gpus 空閑。
你應該寫CUDA_VISIBLE_DEVICES=0 python test.py
注意是DEVICES
不是DEVICE
對於使用 PyCharm 和強制 CPU 的人員,您可以在運行/調試配置中的環境變量下添加以下行:
<OTHER_ENVIRONMENT_VARIABLES>;CUDA_VISIBLE_DEVICES=-1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.