Potresti usare tf.config.set_visible_devices. Una possibile funzione che consente di impostare se e quali GPU utilizzare è:
import tensorflow as tf
def set_gpu(gpu_ids_list):
gpus = tf.config.list_physical_devices('GPU')
if gpus:
try:
gpus_used = [gpus[i] for i in gpu_ids_list]
tf.config.set_visible_devices(gpus_used, 'GPU')
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPU")
except RuntimeError as e:
# Visible devices must be set before GPUs have been initialized
print(e)
Supponiamo di essere su un sistema con 4 GPU e di voler utilizzare solo due GPU, quella con id = 0e quella con id = 2, quindi il primo comando del tuo codice, subito dopo aver importato le librerie, sarebbe:
set_gpu([0, 2])
Nel tuo caso, per utilizzare solo la CPU, puoi richiamare la funzione con una lista vuota :
set_gpu([])
Per completezza, se vuoi evitare che l'inizializzazione del runtime allochi tutta la memoria sul dispositivo, puoi usare tf.config.experimental.set_memory_growth. Infine, la funzione per gestire quali dispositivi utilizzare, occupando dinamicamente la memoria delle GPU, diventa:
import tensorflow as tf
def set_gpu(gpu_ids_list):
gpus = tf.config.list_physical_devices('GPU')
if gpus:
try:
gpus_used = [gpus[i] for i in gpu_ids_list]
tf.config.set_visible_devices(gpus_used, 'GPU')
for gpu in gpus_used:
tf.config.experimental.set_memory_growth(gpu, True)
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPU")
except RuntimeError as e:
# Visible devices must be set before GPUs have been initialized
print(e)