Dość oddzielnym sposobem na to jest użycie
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)
Tutaj, za pomocą booleans
GPU
i CPU
, wskazujemy, czy chcielibyśmy uruchamiać nasz kod na GPU lub CPU, sztywno określając liczbę GPU i procesorów, do których sesja Tensorflow ma dostęp. Zmienne num_GPU
i num_CPU
definiują tę wartość. num_cores
następnie ustawia liczbę rdzeni procesora dostępnych do użycia za pośrednictwem intra_op_parallelism_threads
i inter_op_parallelism_threads
.
W intra_op_parallelism_threads
dyktuje zmienna liczba nici równolegle pracy w jednym węźle wykresu obliczeniowego jest dozwolony do zastosowania (wewnątrz). Podczas gdy inter_ops_parallelism_threads
zmienna definiuje liczbę wątków dostępnych dla operacji równoległych w węzłach grafu obliczeniowego (inter).
allow_soft_placement
umożliwia wykonywanie operacji na CPU, jeśli spełnione jest którekolwiek z poniższych kryteriów:
nie ma implementacji GPU dla tej operacji
nie są znane ani zarejestrowane żadne urządzenia GPU
istnieje potrzeba kolokacji z innymi wejściami z CPU
Wszystko to jest wykonywane w konstruktorze mojej klasy przed innymi operacjami i można je całkowicie oddzielić od dowolnego modelu lub innego kodu, którego używam.
Uwaga: wymaga to zainstalowania tensorflow-gpu
i cuda
/ cudnn
do zainstalowania, ponieważ istnieje opcja korzystania z GPU.
Odniesienia:
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
jak w odpowiedzi poniżej