Você poderia usar tf.config.set_visible_devices
. Uma função possível que permite definir se e quais GPUs usar é:
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)
Suponha que você esteja em um sistema com 4 GPUs e deseje usar apenas duas GPUs, a com id = 0
e a com id = 2
, o primeiro comando do seu código, imediatamente após a importação das bibliotecas, seria:
set_gpu([0, 2])
No seu caso, para usar apenas a CPU, você pode chamar a função com uma lista vazia :
set_gpu([])
Para garantir a integridade, se você quiser evitar que a inicialização do tempo de execução aloque toda a memória do dispositivo, você pode usar tf.config.experimental.set_memory_growth
. Por fim, a função de gerenciar quais dispositivos usar, ocupando a memória das GPUs dinamicamente, se torna:
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)