181 votes

Comment faire fonctionner Tensorflow sur le CPU

J'ai installé la version GPU de tensorflow sur une Ubuntu 14.04.

Je suis sur un serveur GPU où tensorflow peut accéder aux GPU disponibles.

Je veux exécuter tensorflow sur les CPUs.

Normalement, je peux utiliser env CUDA_VISIBLE_DEVICES=0 pour fonctionner sur le GPU no. 0.

Comment puis-je choisir entre les processeurs à la place ?

Je ne suis pas intéressé par la réécriture de mon code avec with tf.device("/cpu:0"):

7voto

dvdblk Points 402

Comme le recommande le Guide Tensorflow GPU .

# Place tensors on the CPU
with tf.device('/CPU:0'):
  a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
  b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
  # Any additional tf code placed in this block will be executed on the CPU

7voto

Yi Shang Points 19

Il suffit d'utiliser le code ci-dessous.

import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

6voto

Riccardo Casatta Points 163

Dans mon cas, pour tensorflow 2.4.0, aucune des réponses précédentes ne fonctionne à moins d'installer tensorflow-cpu

pip install tensorflow-cpu

3voto

Cadoiz Points 79

Une autre solution possible au niveau de l'installation serait de chercher la variante CPU only : https://www.tensorflow.org/install/pip#package-location

Dans mon cas, cela donne tout de suite :

pip3 install https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow_cpu-2.2.0-cp38-cp38-win_amd64.whl

Il suffit de sélectionner la bonne version (dans ce cas, cp38 conseils python 3.8 ). Les points bonus pour l'utilisation d'un venv comme expliqué par exemple dans cette réponse .

1voto

Roberto Amoroso Points 66

Vous pourriez utiliser tf.config.set_visible_devices . Une fonction possible qui vous permet de définir si et quels GPUs utiliser est :

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)

Supposons que vous êtes sur un système avec 4 GPU et que vous voulez utiliser seulement deux GPU, celui avec id = 0 et celle avec id = 2 alors la première commande de votre code, immédiatement après l'importation des bibliothèques, serait :

set_gpu([0, 2])

Dans votre cas, pour utiliser uniquement le CPU, vous pouvez invoquer la fonction avec une liste vide :

set_gpu([])

Pour être complet, si vous voulez éviter que l'initialisation de l'exécution alloue toute la mémoire du périphérique, vous pouvez utiliser l'option tf.config.experimental.set_memory_growth . Enfin, la fonction permettant de gérer les périphériques à utiliser, en occupant dynamiquement la mémoire des GPU, devient :

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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X