CPU पर Tensorflow कैसे चलाये


128

मैंने एक Ubuntu 14.04 पर टेंसरफ़्लो के GPU संस्करण को स्थापित किया है।

मैं एक जीपीयू सर्वर पर हूं जहां टेंसरफ्लो उपलब्ध जीपीयू का उपयोग कर सकता है।

मैं CPUs पर टेंसरफ़्लो चलाना चाहता हूं।

आम तौर पर मैं env CUDA_VISIBLE_DEVICES=0GPU no पर चलाने के लिए उपयोग कर सकता हूं । 0।

इसके बजाय मैं सीपीयू के बीच कैसे चुन सकता हूं?

मैं अपने कोड को फिर से लिखने में इंटरस्टेड नहीं हूं with tf.device("/cpu:0"):

जवाबों:


116

आप device_countप्रति पैरामीटर लागू कर सकते हैं tf.Session:

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

प्रोटॉफ कॉन्फिग फाइल भी देखें:

tensorflow/core/framework/config.proto


2
किसी ने कहा कि प्रशिक्षण चरण के बाद सीपीयू पर तंत्रिका जाल चलाना उतना ही कुशल है जितना कि उन्हें GPU पर चलाना - यानी, केवल प्रशिक्षण वाक्यांश को वास्तव में GPU की आवश्यकता होती है। क्या आप जानते हैं कि क्या यह सच है? धन्यवाद!
क्रैशलॉट

3
यह मेरे लिए काम नहीं करता है (tf1.1)। FabrizioM का समाधान करता है।
P-Gn

3
क्या CUDA_VISIBLE_DEVICESकोड में कॉन्फिगर को बदलने के बजाय पर्यावरण चर का उपयोग करना बेहतर नहीं है ?
नंदेश

3
@ नंदेश मुझे लगता है कि यह आपकी आवश्यकताओं पर निर्भर करता है। अब तक कम से कम 53 लोग हैं जो पर्यावरण चर में अधिक महसूस करते हैं और 35 जो कोड में उपकरणों की संख्या निर्धारित करना पसंद करते हैं। पहले का लाभ सादगी है और दूसरे को अजगर कार्यक्रम के भीतर से (कई) सत्रों पर अधिक स्पष्ट नियंत्रण है (यह शून्य हार्डकोड करने के लिए आवश्यक नहीं है, यह एक चर हो सकता है)।
इवान अक्षुमोतोव -

1
@ चरसालॉट यह नेटवर्क की प्रकृति पर निर्भर करता है। उदाहरण के लिए, RNN अपने अनुक्रमिक प्रकृति के कारण छोटे बैच आकारों के लिए सीपीयू पर तेज हो सकता है। CNNs अभी भी एक जीपीयू से बचाव मोड में लाभान्वित होंगे, लेकिन चूंकि आपको केवल उन्हें एक बार प्रति उदाहरण के लिए चलाने की आवश्यकता है, इसलिए सीपीयू कई व्यावहारिक उद्देश्यों के लिए पर्याप्त तेज़ हो सकता है।
डेविड एमएच

174

आप पर्यावरण चर को भी सेट कर सकते हैं

CUDA_VISIBLE_DEVICES=""

स्रोत कोड को संशोधित किए बिना।


3
किसी ने कहा कि प्रशिक्षण चरण के बाद सीपीयू पर तंत्रिका जाल चलाना उतना ही अच्छा है जितना कि उन्हें GPU पर चलाना - यानी, केवल प्रशिक्षण वाक्यांश में ही GPU की आवश्यकता होती है। क्या आप जानते हैं कि क्या यह सच है? धन्यवाद!
क्रैशलॉट

13
@ चरसालोट: यह सच नहीं है। हस्तक्षेप के लिए विभिन्न बेंचमार्क देखें, सीपीयू वहाँ भी परिमाण धीमा करने का एक क्रम है।
थॉमस

1
@ थोमस धन्यवाद किस बेंचमार्क पर विचार करने के लिए सुझाव? शायद तंत्रिका जाल के कार्यभार और प्रकृति पर भी भिन्न होता है, है ना? जाहिरा तौर पर गूगल ट्रांसलेट ऐप स्मार्टफोन पर सीधे कुछ तंत्रिका जाल चलाता है, संभवतः सीपीयू पर और जीपीयू पर नहीं?
Crashalot

@fabrizioM, एक खिलौना उदाहरण अधिक उपयोगी होगा।
गिरीशकुमार

7
इसने मेरे लिए काम नहीं किया। : / पर्यावरण चर सेट करें, लेकिन टेंसरफ़्लो अभी भी GPU का उपयोग करता है, मैं कोंडा वर्चुअल एनवी का उपयोग कर रहा हूं, क्या यह एक भिन्नता बनाता है?
गुइलहर्मे डे लाज़री

102

यदि उपरोक्त उत्तर काम नहीं करते हैं, तो कोशिश करें:

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

4
धन्यवाद, यह अन्य विकल्पों की तुलना में बहुत बेहतर है।
user1098761

सिर्फ रिकॉर्ड के लिए, पहला विकल्प अब काम नहीं करता है।
अगला

tf.keras.Sequentialमॉडल का उपयोग करते समय tf 2.X के लिए भी काम करता है ।
निकोलस एम।

22

मेरे लिए, केवल CUDA_VISIBLE_DEVICESठीक -1काम करने के लिए सेटिंग :

काम करता है:

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

है काम करते हैं:

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

बस नीचे दिए गए कोड का उपयोग कर रहे हैं।

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

0

कुछ प्रणालियों में एक को निर्दिष्ट करना होगा:

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

पहले टेंसरफ़्लो आयात कर रहा है।


0

आप उपयोग कर सकते हैं tf.config.set_visible_devices। एक संभावित फ़ंक्शन जो आपको यह निर्धारित करने की अनुमति देता है कि क्या और कौन सा GPU उपयोग करना है:

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 के साथ एक सिस्टम पर हैं और आप केवल दो GPU का उपयोग करना चाहते हैं, एक के साथ id = 0और एक के साथ id = 2, फिर आपके कोड की पहली कमांड, पुस्तकालयों को आयात करने के तुरंत बाद होगी:

set_gpu([0, 2])

आपके मामले में, केवल सीपीयू का उपयोग करने के लिए, आप खाली सूची के साथ फ़ंक्शन को लागू कर सकते हैं :

set_gpu([])

पूर्णता के लिए, यदि आप बचना चाहते हैं कि रनटाइम आरंभीकरण डिवाइस पर सभी मेमोरी को आवंटित करेगा, तो आप उपयोग कर सकते हैं tf.config.experimental.set_memory_growth। अंत में, GPU को स्मृति में गतिशील रूप से कब्जा करने के लिए कौन से उपकरणों का उपयोग करना है, यह कार्य बनता है:

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

स्थापना स्तर पर एक और संभावित समाधान केवल सीपीयू के लिए देखने के लिए होगा संस्करण: https://www.tensorflow.org/install/pip#package-location

मेरे मामले में, यह अभी देता है:

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

बस सही संस्करण का चयन करें। इस उत्तर में बताए गए उदाहरण की तरह एक वेनव का उपयोग करने के लिए बोनस अंक ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.