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 GPUi 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_GPUi num_CPUdefiniują tę wartość. num_coresnastępnie ustawia liczbę rdzeni procesora dostępnych do użycia za pośrednictwem intra_op_parallelism_threadsi inter_op_parallelism_threads.
W intra_op_parallelism_threadsdyktuje zmienna liczba nici równolegle pracy w jednym węźle wykresu obliczeniowego jest dozwolony do zastosowania (wewnątrz). Podczas gdy inter_ops_parallelism_threadszmienna 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-gpui cuda/ cudnndo zainstalowania, ponieważ istnieje opcja korzystania z GPU.
Odniesienia:
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'jak w odpowiedzi poniżej