কীভাবে সিপিইউতে টেনসরফ্লো চালানো যায়


128

আমি একটি উবুন্টু 14.04 এ টেনসরফ্লোটির জিপিইউ সংস্করণ ইনস্টল করেছি।

আমি এমন একটি জিপিইউ সার্ভারে আছি যেখানে টেনসরফ্লো উপলব্ধ জিপিইউগুলি অ্যাক্সেস করতে পারে।

আমি সিপিইউগুলিতে টেনসরফ্লো চালাতে চাই।

সাধারণত আমি env CUDA_VISIBLE_DEVICES=0জিপিইউ নং চালাতে ব্যবহার করতে পারি । 0।

পরিবর্তে আমি কীভাবে সিপিইউগুলির মধ্যে চয়ন করতে পারি?

আমি আমার কোডটি দিয়ে আবার লিখতে ছেদ করি না with tf.device("/cpu:0"):

উত্তর:


115

আপনি device_countপ্রতি প্যারামিটার প্রয়োগ করতে পারেন tf.Session:

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

প্রোটবুফ কনফিগারেশন ফাইলটিও দেখুন:

tensorflow/core/framework/config.proto


2
কেউ বলেছিলেন প্রশিক্ষণ পর্বের পরে সিপিইউগুলিতে নিউরাল নেট চালানো জিপিইউতে চালানো তত দক্ষ - যেমন কেবল প্রশিক্ষণের বাক্যাংশেই জিপিইউ দরকার। এই সত্য যদি আপনি জানেন না? ধন্যবাদ!
ক্র্যাশলোট

3
এটি আমার পক্ষে কাজ করে না (tf1.1)। ফ্যাবরিজিওমের সমাধানটি করে।
পি-জিএন

3
CUDA_VISIBLE_DEVICESকোডটিতে কনফিগারেশন পরিবর্তন না করে পরিবেশ পরিবর্তনশীল ব্যবহার করা কি ভাল ?
নন্দীশ

3
@ নন্দীশ আমার ধারণা এটি আপনার প্রয়োজনের উপর নির্ভর করে। এখনও অবধি কমপক্ষে ৫৩ জন লোক আছেন যারা পরিবেশের ভেরিয়েবলগুলিতে বেশি বোধ করেন এবং ৩৫ জন যারা কোডে ডিভাইসের সংখ্যা নির্ধারণ করতে পছন্দ করেন। প্রথমটির সুবিধাটি সরলতা এবং অন্যটি হ'ল পাইথন প্রোগ্রামের মধ্যে থেকেই (একাধিক) সেশনগুলির উপর আরও স্পষ্ট নিয়ন্ত্রণ (এটি শূন্যকে হার্ডকোড করা প্রয়োজন হয় না, এটি একটি পরিবর্তনশীল হতে পারে)।
ইভান অ্যাকসেন্টভ -

1
@ ক্র্যাশলোট এটি নেটওয়ার্কের প্রকৃতির উপর নির্ভর করে। উদাহরণস্বরূপ, আরএনএনগুলি তার ক্রমগত আকারের কারণে ছোট ব্যাচের আকারের সিপিইউগুলিতে দ্রুততর হতে পারে। সিএনএনগুলি এখনও জিপিইউ থেকে ইনফারেন্স মোডে উপকৃত হবে, তবে যেহেতু আপনাকে কেবল উদাহরণ হিসাবে একবার চালানো দরকার, তাই অনেকগুলি ব্যবহারিক উদ্দেশ্যে সিপিইউ যথেষ্ট দ্রুত হতে পারে।
ডেভিডমহ

174

আপনি পরিবেশের পরিবর্তনশীলকেও সেট করতে পারেন

CUDA_VISIBLE_DEVICES=""

উত্স কোডটি পরিবর্তন না করেই।


3
কেউ বলেছিলেন প্রশিক্ষণ পর্বের পরে সিপিইউগুলিতে নিউরাল নেট চালানো জিপিইউতে চালানোর মতো পারফরম্যান্স - অর্থাত্ কেবল প্রশিক্ষণের বাক্যাংশেই জিপিইউ দরকার। এই সত্য যদি আপনি জানেন না? ধন্যবাদ!
ক্র্যাশলোট

13
@ ক্র্যাশলোট: এটি সত্য নয়। হস্তক্ষেপের জন্য বিভিন্ন মানদণ্ডের জন্য সন্ধান করুন, সিপিইউগুলি সেখানে খুব কম মাত্রার ক্রম।
থমাস

1
থমাস ধন্যবাদ কোন মানদণ্ড বিবেচনার জন্য পরামর্শ? সম্ভবত কাজের চাপ এবং নিউরাল নেটগুলির প্রকৃতিতেও ভিন্নতা আছে, তাই না? স্পষ্টতই গুগল ট্রান্সলেট অ্যাপটি কিছু নিউরাল নেট সরাসরি স্মার্টফোনে চালায়, সম্ভবত সিপিইউতে এবং জিপিইউতে নয়?
ক্র্যাশলোট

@ ফ্যাবরিজিওএম, একটি খেলনা উদাহরণ আরও কার্যকর হবে।
গিরিশকুমার

7
এটি আমার পক্ষে কার্যকর হয়নি। : / পরিবেশের পরিবর্তনশীল সেট করুন কিন্তু টেনসরফ্লো এখনও জিপিইউ ব্যবহার করে, আমি কনডা ভার্চুয়াল এনভিভি ব্যবহার করছি, এটি কি দ্বিধা তৈরি করে?
গিলহেরেম দে লাজারী

102

উপরের উত্তরগুলি যদি কাজ না করে তবে চেষ্টা করুন:

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

4
ধন্যবাদ, এটি অন্যান্য বিকল্পের তুলনায় অনেক ভাল।
ব্যবহারকারী 1098761

কেবল রেকর্ডের জন্য, প্রথম বিকল্পটি আর কাজ করবে বলে মনে হচ্ছে না।
আগকাল

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। একটি সম্ভাব্য ফাংশন যা আপনাকে সেট করতে দেয় এবং কোনটি জিপিইউ ব্যবহার করে তা হ'ল:

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)

মনে করুন আপনি ৪ টি জিপিইউ সহ একটি সিস্টেমে রয়েছেন এবং আপনি কেবল দুটি জিপিইউ ব্যবহার করতে চান, একটি তার সাথে id = 0এবং একটি id = 2, আপনার লাইব্রেরিগুলি আমদানির সাথে সাথেই আপনার কোডের প্রথম কমান্ডটি হ'ল:

set_gpu([0, 2])

আপনার ক্ষেত্রে, কেবল সিপিইউ ব্যবহার করতে, আপনি খালি তালিকা সহ ফাংশনটি শুরু করতে পারেন :

set_gpu([])

সম্পূর্ণতার জন্য, যদি আপনি এড়াতে চান যে রানটাইম ইনিশিয়েশন ডিভাইসে সমস্ত মেমরি বরাদ্দ করে, আপনি ব্যবহার করতে পারেন tf.config.experimental.set_memory_growth। অবশেষে, জিপিইউ মেমরিটি গতিশীলভাবে দখল করে কোন ডিভাইসগুলি ব্যবহার করতে হবে তা পরিচালনা করার ফাংশনটি হয়ে ওঠে:

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

শুধু সঠিক সংস্করণ নির্বাচন করুন। ব্যাখ্যা যেমন মত একটি venv ব্যবহার করার জন্য বোনাস পয়েন্ট এই উত্তর

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.