Mam zainstalowany Keras z zapleczem Tensorflow i CUDA. Chciałbym czasami na żądanie zmusić Keras do korzystania z procesora. Czy można to zrobić bez, powiedzmy, instalowania oddzielnego Tensorflow z samym procesorem w środowisku wirtualnym? Jeśli tak to jak? Gdyby backendem był Theano, flagi można by ustawić, ale nie słyszałem o flagach Tensorflow dostępnych przez Keras.
python
machine-learning
tensorflow
keras
mikal94305
źródło
źródło
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
jak w odpowiedzi poniżejCUDA_DEVICE_ORDER=PCI_BUS_ID
numerze 152import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152 os.environ["CUDA_VISIBLE_DEVICES"] = ""
, jak teraz mogę to „cofnąć”? Chciałbym, aby Keras ponownie użył GPU.Dość oddzielnym sposobem na to jest użycie
Tutaj, za pomocą
booleans
GPU
iCPU
, 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. Zmiennenum_GPU
inum_CPU
definiują tę wartość.num_cores
następnie ustawia liczbę rdzeni procesora dostępnych do użycia za pośrednictwemintra_op_parallelism_threads
iinter_op_parallelism_threads
.W
intra_op_parallelism_threads
dyktuje zmienna liczba nici równolegle pracy w jednym węźle wykresu obliczeniowego jest dozwolony do zastosowania (wewnątrz). Podczas gdyinter_ops_parallelism_threads
zmienna 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-gpu
icuda
/cudnn
do zainstalowania, ponieważ istnieje opcja korzystania z GPU.Odniesienia:
Co oznaczają opcje w ConfigProto, takie jak allow_soft_placement i log_device_placement?
Znaczenie wyrażeń „inter_op_parallelism_threads” i intra_op_parallelism_threads
źródło
allow_soft_placement
,intra_op_parallelism_threads
,inter_op_parallelism_threads
inter
/intra_op_parallelism_threads
odnoszą się do operacji CPU lub GPU?To zadziałało dla mnie (win10), umieść przed importem keras:
źródło
Po prostu zaimportuj tensortflow i użyj keras, to takie proste.
źródło
tf.device('/cpu:0')
, nadal widziałem, jak pamięć jest przydzielana do Pythona później za pomocąnvidia-smi
.with
?Zgodnie z tutorialem keras , możesz po prostu użyć tego samego
tf.device
zakresu, co w zwykłym tensorflow:źródło
with
może być dowolnym kodem Keras.Po prostu spędziłem trochę czasu, aby to rozgryźć. Odpowiedź Thomy nie jest pełna. Załóżmy, że Twój program jest taki
test.py
, że chcesz używać gpu0 do uruchamiania tego programu, a pozostałe procesory GPU będą wolne.Powinieneś napisać
CUDA_VISIBLE_DEVICES=0 python test.py
Zauważ, że tak
DEVICES
nie jestDEVICE
źródło
W przypadku osób pracujących nad PyCharm i do wymuszania procesora można dodać następujący wiersz w konfiguracji Uruchom / debugowanie w obszarze Zmienne środowiskowe:
źródło