Sök…


Introduktion

Detta ämne handlar om att ställa in och hantera GPU: er i TensorFlow.

Det antar att GPU-versionen av TensorFlow har installerats (se https://www.tensorflow.org/install/ för mer information om GPU-installationen).

Du kanske också vill titta på den officiella dokumentationen: https://www.tensorflow.org/tutorials/using_gpu

Anmärkningar

Huvudsakliga källor:

Kör endast TensorFlow på CPU - med hjälp av miljövariabeln CUDA_VISIBLE_DEVICES.

För att säkerställa att en GPU-version TensorFlow-process bara körs på CPU:

import os
os.environ["CUDA_VISIBLE_DEVICES"]="-1"    
import tensorflow as tf

För mer information om CUDA_VISIBLE_DEVICES , titta på detta svar eller på CUDA-dokumentationen .

Kör endast TensorFlow-graf på CPU - med hjälp av `tf.config`

import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(device_count={'GPU': 0}))

Tänk på att den här metoden förhindrar TensorFlow-grafen från att använda GPU men TensorFlow låser fortfarande GPU-enheten som beskrivs i det här ett problem som öppnades med den här metoden. Att använda CUDA_VISIBLE_DEVICES verkar vara det bästa sättet att säkerställa att TensorFlow hålls borta från GPU-kortet (se detta svar ).

Använd en viss uppsättning GPU-enheter

För att använda en viss uppsättning GPU-enheter kan CUDA_VISIBLE_DEVICES användas:

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"]="0" # Will use only the first GPU device


os.environ["CUDA_VISIBLE_DEVICES"]="0,3" # Will use only the first and the fourth GPU devices

(Citat från detta svar ; mer information om CUDA-miljövariablerna här .)

Lista de tillgängliga enheterna som finns tillgängliga av TensorFlow i den lokala processen.

from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

Kontrollera GPU-minnesallokering

Som standard fördelar TensorFlow hela minnet på GPU-kortet (vilket kan orsaka CUDA_OUT_OF_MEMORY varning).

För att ändra detta är det möjligt att

  • ändra procentsatsen för fördelat minne med per_process_gpu_memory_fraction konfigurationsalternativet,

    Ett värde mellan 0 och 1 som indikerar vilken bråkdel av
    tillgängligt GPU-minne för fördelning för varje process. 1 betyder
    att fördela allt GPU-minne, 0,5 betyder processen
    fördelar ~ 50% av det tillgängliga GPU-minnet.

  • inaktivera fördelningen med hjälp av allow_growth allow_growth. Tilldelning av minne kommer att växa när användningen växer.

    Om det är sant fördelar inte allokeraren det angivna
    GPU-minnesregion, istället börjar små och växa efter behov.

Till exempel:

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
sess = tf.Session(config=config) as sess:

eller

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess= tf.Session(config=config):

Mer information om konfigurationsalternativ här .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow