Tensorflow 백엔드 및 CUDA와 함께 Keras를 설치했습니다. 때때로 요청시 Keras가 CPU를 사용하도록하고 싶습니다. 가상 환경에 별도의 CPU 전용 Tensorflow를 설치하지 않고도 수행 할 수 있습니까? 그렇다면 어떻게? 백엔드가 Theano이면 플래그를 설정할 수 있지만 Keras를 통해 액세스 할 수있는 Tensorflow 플래그에 대해 들어 본 적이 없습니다.
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
또한보십시오
CUDA_DEVICE_ORDER=PCI_BUS_ID
문제 # 152에서 언급 된 내용을
import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152 os.environ["CUDA_VISIBLE_DEVICES"] = ""
. 이제 어떻게 "실행 취소"합니까? Keras가 GPU를 다시 사용하고 싶습니다.
이 작업을 수행하는 다소 분리 가능한 방법은
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
, 우리는 우리가 엄격하게 액세스 할 수있는 GPU를하고 CPU를 Tensorflow 세션의 수를 정의하여 GPU 또는 CPU와 우리의 코드를 실행할지 여부를 나타냅니다. 변수 num_GPU
및는 num_CPU
이 값을 정의한다. num_cores
다음을 통해 사용을 위해 사용 가능한 CPU 코어의 수를 설정 intra_op_parallelism_threads
하고를 inter_op_parallelism_threads
.
intra_op_parallelism_threads
변수가 지시 스레드 연산 그래프는 단일 노드의 병렬 연산의 수는 사용 (인트라)시킨다. 그동안 inter_ops_parallelism_threads
변수 계산 그래프 (간)의 노드에서 병렬 연산에 대한 액세스 스레드의 수를 정의한다.
allow_soft_placement
다음 기준 중 하나라도 충족되면 CPU에서 작업을 실행할 수 있습니다.
작업에 대한 GPU 구현이 없습니다.
알려 지거나 등록 된 GPU 장치가 없습니다.
CPU의 다른 입력과 같은 위치에 있어야합니다.
이 모든 것은 다른 작업 전에 내 클래스의 생성자에서 실행되며 내가 사용하는 모델이나 다른 코드와 완전히 분리 될 수 있습니다.
참고 : GPU를 사용하기위한 옵션이 제공되기 때문에 설치 tensorflow-gpu
및 cuda
/ cudnn
설치 가 필요합니다 .
참조 :
allow_soft_placement
, intra_op_parallelism_threads
,inter_op_parallelism_threads
inter
/ intra_op_parallelism_threads
CPU 또는 GPU 조작을 지시?
이것은 나를 위해 일했습니다 (win10), keras를 가져 오기 전에 배치하십시오.
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
tensortflow를 가져 와서 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)
tf.device('/cpu:0')
나중에 nvidia-smi
.
with
합니까?
keras tutorial에 따라 tf.device
일반 tensorflow에서 와 동일한 범위를 간단히 사용할 수 있습니다 .
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
with
는 모든 Keras 코드 일 수 있습니다.
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
아래 답변에로