Tensorflow CPU'da nasıl çalıştırılır


128

Tensorflow'un GPU sürümünü bir Ubuntu 14.04'e yükledim.

Tensorflow'un mevcut GPU'lara erişebileceği bir GPU sunucusundayım.

CPU'larda tensorflow çalıştırmak istiyorum.

Normalde env CUDA_VISIBLE_DEVICES=0GPU no. 0.

Bunun yerine CPU'lar arasında nasıl seçim yapabilirim?

Kodumu yeniden yazmakla uğraşmadım with tf.device("/cpu:0"):

Yanıtlar:


116

device_countParametreyi şu şekilde uygulayabilirsiniz tf.Session:

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

Ayrıca protobuf yapılandırma dosyasına bakın:

tensorflow/core/framework/config.proto


2
Birisi, eğitim aşamasından sonra CPU'larda sinir ağları çalıştırmanın onları GPU'larda çalıştırmak kadar verimli olduğunu söyledi - yani sadece eğitim cümlesinin gerçekten GPU'ya ihtiyacı var. Bunun doğru olup olmadığını biliyor musun? Teşekkürler!
Crashalot

3
Bu benim için çalışmıyor (tf1.1). FabrizioM'nin çözümü yapar.
P-Gn

3
CUDA_VISIBLE_DEVICESKoddaki yapılandırmayı değiştirmek yerine ortam değişkenini kullanmak daha iyi değil mi?
Nandeesh

3
@Nandeesh Sanırım ihtiyaçlarınıza bağlı. Şimdiye kadar, çevre değişkenlerini daha çok hisseden en az 53 kişi ve koddaki cihaz sayısını ayarlamayı tercih eden 35 kişi var. Birincinin avantajı basitliktir ve diğerinin avantajı, python programının kendi içinden (birden çok) oturum üzerinde daha açık bir denetimdir (sıfırın kodlanması gerekmez, değişken olabilir).
Ivan Aksamentov -

1
@Crashalot ağın doğasına bağlıdır. Örneğin, sıralı yapısı nedeniyle RNN'ler küçük parti boyutları için CPU'larda daha hızlı olabilir. CNN'ler, çıkarım modunda bir GPU'dan yararlanmaya devam edecek, ancak bunları örnek başına yalnızca bir kez çalıştırmanız gerektiğinden, bir CPU birçok pratik amaç için yeterince hızlı olabilir .
Davidmh

174

Ortam değişkenini şu şekilde de ayarlayabilirsiniz:

CUDA_VISIBLE_DEVICES=""

kaynak kodunu değiştirmek zorunda kalmadan.


3
Birisi, eğitim aşamasından sonra CPU'larda sinir ağları çalıştırmanın, onları GPU'larda çalıştırmak kadar performanslı olduğunu söyledi - yani, yalnızca eğitim cümlesinin gerçekten GPU'ya ihtiyacı var. Bunun doğru olup olmadığını biliyor musun? Teşekkürler!
Crashalot

13
@Crashalot: Bu doğru değil. Girişim için çeşitli ölçütler arayın, CPU'lar da orada daha yavaş.
Thomas

1
@Thomas teşekkürler. hangi ölçütlerin dikkate alınması gerektiği konusunda öneriler? muhtemelen sinir ağlarının iş yüküne ve doğasına göre de değişir, değil mi? Görünüşe göre google translate uygulaması bazı sinir ağlarını doğrudan akıllı telefonlarda çalıştırıyor, muhtemelen gpu'da değil cpu'da?
Crashalot

@fabrizioM, bir oyuncak örneği daha kullanışlı olacak.
Girishkumar

7
Bu benim için işe yaramadı. : / ortam değişkenini ayarlayın ama tensorflow hala GPU kullanıyor, conda virtual env kullanıyorum, bu bir fark yaratır mı?
Guilherme de Lazari

102

Yukarıdaki cevaplar işe yaramazsa şunu deneyin:

os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

4
Teşekkürler, bu diğer seçeneklerden çok daha iyi.
user1098761

Sadece kayıt için, ilk seçenek artık işe yaramıyor gibi görünüyor.
agcala

tf.keras.SequentialModelleri kullanırken tf 2.X için de çalışır .
Nicolas M.

22

Benim için sadece CUDA_VISIBLE_DEVICEStam olarak -1işe yarıyor:

İşler:

import os
import tensorflow as tf

os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

if tf.test.gpu_device_name():
    print('GPU found')
else:
    print("No GPU found")

# No GPU found

Does not çalışır:

import os
import tensorflow as tf

os.environ['CUDA_VISIBLE_DEVICES'] = ''    

if tf.test.gpu_device_name():
    print('GPU found')
else:
    print("No GPU found")

# GPU found

4

Sadece aşağıdaki kodu kullanarak.

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

0

Bazı sistemlerde aşağıdakilerin belirtilmesi gerekir:

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]=""  # or even "-1"

Tensorflow'u içe aktarmadan ÖNCE.


0

Kullanabilirsin tf.config.set_visible_devices. Hangi GPU'ların kullanılıp kullanılmayacağını belirlemenize olanak tanıyan olası işlevlerden biri şudur:

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)

4 GPU'lu bir sistemde olduğunuzu ve yalnızca iki GPU kullanmak istediğinizi varsayalım, biri ile id = 0diğeri ile id = 2, ardından kitaplıkları içe aktardıktan hemen sonra kodunuzun ilk komutu şöyle olacaktır:

set_gpu([0, 2])

Sizin durumunuzda, sadece CPU kullanmak için, işlevi boş bir listeyle çağırabilirsiniz :

set_gpu([])

Tamlık için, çalışma zamanı başlatmanın cihazdaki tüm belleği tahsis etmesini önlemek istiyorsanız kullanabilirsiniz tf.config.experimental.set_memory_growth. Son olarak, GPU'ların belleğini dinamik olarak işgal ederek hangi cihazların kullanılacağını yönetme işlevi şu hale gelir:

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)

0

Kurulum düzeyinde bir başka olası çözüm, yalnızca CPU varyantını aramaktır: https://www.tensorflow.org/install/pip#package-location

Benim durumumda, bu şu anda:

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

Doğru sürümü seçmeniz yeterlidir. Örneğin bu cevapta açıklandığı gibi bir venv kullanmak için bonus puanlar .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.