TensorFlow, क्यों चुना भाषा अजगर था?


143

मैंने हाल ही में गहरी सीखने और अन्य एमएल तकनीकों का अध्ययन करना शुरू किया, और मैंने ऐसे ढांचे की खोज शुरू की, जो एक नेट बनाने की प्रक्रिया को सरल बनाते हैं और इसे प्रशिक्षण देते हैं, फिर मुझे टेन्सरफ्लो मिला, क्षेत्र में थोड़ा अनुभव होने पर, मेरे लिए, ऐसा लगता है कि यह गति है एक बड़ी एमएल प्रणाली बनाने के लिए बड़ा कारक और भी गहरी शिक्षा के साथ काम करते हुए, इसलिए Google द्वारा TenskFlow बनाने के लिए अजगर को क्यों चुना गया? क्या इसे एक ऐसी भाषा पर बनाना बेहतर नहीं होगा जिसे संकलित किया जा सकता है और व्याख्या नहीं की जा सकती है?

मशीन सीखने के लिए C ++ जैसी भाषा पर अजगर का उपयोग करने के क्या फायदे हैं?


2
लघु नाइटिक: संकलन और व्याख्या विपरीत नहीं हैं। इसके अतिरिक्त, किसी भी प्रोग्रामिंग भाषा को एक कंपाइलर या एक दुभाषिया के साथ, या दोनों के साथ लागू किया जा सकता है। सॉफ्टवेयर इंजीनियरिंग पर अंतर के बारे में एक अच्छा जवाब है
8 बिट्ट्री

जवाबों:


240

TensorFlow के बारे में महसूस करने के लिए सबसे महत्वपूर्ण बात यह है कि, अधिकांश भाग के लिए, कोर पायथन में नहीं लिखा गया है : यह अत्यधिक अनुकूलित C ++ और CUDA (प्रोग्रामिंग GPUs के लिए एनवीडिया की भाषा) के संयोजन में लिखा गया है। ज्यादातर ऐसा होता है, बदले में, Eigen (एक उच्च-प्रदर्शन C ++ और CUDA संख्यात्मक पुस्तकालय) और NVidia के cuDNN ( NVIDia GPU के लिए एक बहुत ही अनुकूलित DNN लाइब्रेरी , जैसे कि दृढ़ संकल्प ) का उपयोग करके।

TensorFlow के लिए मॉडल यह है कि प्रोग्रामर मॉडल को व्यक्त करने के लिए "कुछ भाषा" (सबसे अधिक संभावना पायथन!) का उपयोग करता है। यह मॉडल, TensorFlow में लिखा गया है जैसे:

h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...

जब पायथन चलाया जाता है तो वास्तव में निष्पादित नहीं किया जाता है। इसके बजाय, जो वास्तव में बनाया गया है वह एक डेटाफ्लो ग्राफ है जो विशेष इनपुट लेने के लिए कहता है, विशेष ऑपरेशन लागू करता है, अन्य ऑपरेशनों के इनपुट के रूप में परिणाम की आपूर्ति करता है, और इसी तरह। यह मॉडल तेजी से C ++ कोड द्वारा निष्पादित किया जाता है, और अधिकांश भाग के लिए, संचालन के बीच जाने वाले डेटा को कभी भी Python कोड पर वापस कॉपी नहीं किया जाता है

फिर प्रोग्रामर नोड्स पर खींचकर इस मॉडल के निष्पादन को चलाता है - प्रशिक्षण के लिए, आमतौर पर पायथन में, और सेवा के लिए, कभी पायथन में और कभी कच्चे सी ++ में।

sess.run(eval_results)

यह एक पायथन (या C ++ फ़ंक्शन कॉल) वितरित संस्करण के लिए C ++ या RPC में या तो इन-प्रोसेस कॉल का उपयोग करता है , इसे निष्पादित करने के लिए बताने के लिए C ++ TensorFlow सर्वर में कॉल करता है, और फिर परिणामों की प्रतिलिपि बनाता है।

इसलिए, इस प्रश्न के साथ, आइए इस प्रश्न को फिर से उद्धृत करें: मॉडल के प्रशिक्षण को व्यक्त करने और नियंत्रित करने के लिए टेंसोरफ्लो ने पायथन को पहली अच्छी तरह से समर्थित भाषा के रूप में क्यों चुना?

इसका जवाब आसान है: अजगर शायद है भी कि आसान एकीकृत और एक सी ++ बैकएंड को नियंत्रित करने के लिए, जबकि यह भी सामान्य किया जा रहा है कि डेटा वैज्ञानिकों और मशीन सीखने विशेषज्ञों की एक बड़ी रेंज के लिए सबसे अधिक आरामदायक भाषा, अंदर और बाहर दोनों व्यापक रूप से इस्तेमाल Google का, और खुला स्रोत। यह देखते हुए कि TensorFlow के मूल मॉडल के साथ, पायथन का प्रदर्शन उतना महत्वपूर्ण नहीं है, यह एक प्राकृतिक फिट था। यह भी एक बहुत बड़ा प्लस है कि न्यूपाइ ने पायथन में प्री-प्रोसेसिंग करना आसान बना दिया है - यह भी उच्च प्रदर्शन के साथ - वास्तव में सीपीयू-भारी चीजों के लिए टेंसोरफ्लो में खिलाने से पहले।

मॉडल को व्यक्त करने में जटिलता का एक गुच्छा भी है जो इसे निष्पादित करते समय उपयोग नहीं किया जाता है - आकार का निष्कर्ष (जैसे, यदि आप मटमुल (ए, बी) करते हैं, तो परिणामी डेटा का आकार क्या है?) और स्वचालित ढाल संगणना। यह पता चला है कि पायथन में उन लोगों को व्यक्त करने में सक्षम होना अच्छा है, हालांकि मुझे लगता है कि लंबी अवधि में वे शायद अन्य भाषाओं को जोड़ने के लिए C ++ बैकएंड पर चले जाएंगे।

(आशा, ज़ाहिर है, बनाने और मॉडल व्यक्त करने के लिए भविष्य में अन्य भाषाओं का समर्थन है यह पहले से ही कई अन्य भाषाओं का उपयोग कर निष्कर्ष को चलाने के लिए काफी सीधा है -। सी ++ अब काम करता है, फेसबुक से कोई योगदान जाओ बाइंडिंग है कि अब हम समीक्षा कर रहे हैं , आदि।)


1
आप It's already quite straightforward to run inference using several other languagesएक प्रोलॉग प्रोग्रामर होने के नाते 'अनुमान' को कैसे परिभाषित कर रहे हैं, यह मेरे लिए ठीक नहीं है; यह एक शब्द की तरह लगता है।
गाइ कोडर

1
सिर्फ मॉडल के फॉरवर्ड पास चल रहा है। इसे डेटा बनाम प्रशिक्षण पर लागू करना।
dga

आकृति अनुमान के संबंध में। मैं कुछ तंत्रिका नेटवर्क को केवल सीखने के उपयोग के लिए एक सांख्यिकीय रूप से टाइप की गई भाषा में परिवर्तित कर रहा हूं और Ptyhon में डक टाइपिंग निश्चित रूप से कोड के उस हिस्से को लिखने में बहुत आसान बनाता है। फिलेप साइड पर, पायथन कोड को प्रकारों के साथ लिखना तब बहुत कठिन हो जाता है, जब चलने से पहले टाइप करने के लिए पाइथन को सीखना ठीक होता है। मुझे Ptyhon का उपयोग करने वाली अन्य भाषा की तुलना में F # का उपयोग करते हुए बहुत अधिक रन टाइम त्रुटियाँ दिखाई देती हैं। यह जवाब में डक टाइपिंग पर ध्यान देने योग्य हो सकता है।
गाइ कोडर

2
जबकि यह सच है, मुझे लगता है कि अजगर का टाइपिंग एक अप्रत्यक्ष कारण था। आमतौर पर Google में उपयोग की जाने वाली भाषाओं में --- quora.com/ ... --- औसत मशीन सीखने के लिए पायथन का सबसे अच्छा मैच Ph.D. केवल अन्य वास्तविक विकल्प C ++ रहा होगा (मैं बहुत से ऐसे लोगों को नहीं जानता, जो Lua, भाषा मशाल का उपयोग करते हैं), और C ++ ML टूलबॉक्स कम्फर्ट ज़ोन से बहुत दूर है। बहुत सारे ML लोग मैटलैब बैकग्राउंड से आते हैं, जिनमें से बहुत से लोकप्रिय लोकप्रिय हैं। डक टाइपिंग शायद अंडरलाइज लोकप्रियता है, बेशक, लेकिन यह मेरे दायरे से परे है।
dga

धन्यवाद, अच्छा सारांश। गाय कोडर --- नाटक में "अनुमान" की भावना के अनुसार, सांख्यिकीय निष्कर्ष पर विकिपीडिया लेख देखें । यह आगमनात्मक अनुमान के रूप में करने का विरोध किया निगमनात्मक Prolog द्वारा किया प्रकार।
बॉब कारपेंटर

35

अजगर में TF नहीं लिखा है। यह C ++ में लिखा गया है (और उच्च प्रदर्शन करने वाले संख्यात्मक पुस्तकालयों और CUDA कोड का उपयोग करता है ) और आप उनके गीथूब को देखकर इसे देख सकते हैं । इसलिए कोर को अजगर में नहीं लिखा गया है, लेकिन TF कई अन्य भाषाओं ( अजगर, C ++, Java, http:// ) को एक इंटरफ़ेस प्रदान करता है

यहां छवि विवरण दर्ज करें

यदि आप एक डेटा विश्लेषण दुनिया से आते हैं, तो आप इसके बारे में सोच सकते हैं जैसे कि खस्ता (अजगर में नहीं लिखा गया है, लेकिन पायथन को एक इंटरफ़ेस प्रदान करता है) या यदि आप एक वेब-डेवलपर हैं - तो इसके बारे में एक डेटाबेस (PostgreSQL, MySQL) के रूप में सोचें, जो जावा, पायथन, पीएचपी से मंगवाया जा सकता है)


पायथन फ्रंटेंड (जिस भाषा में लोग टीएफ में मॉडल लिखते हैं) कई कारणों से सबसे लोकप्रिय है । मेरी राय में मुख्य कारण ऐतिहासिक है: अधिकांश एमएल उपयोगकर्ता पहले से ही इसका उपयोग करते हैं (एक अन्य लोकप्रिय विकल्प आर है) इसलिए यदि आप अजगर को एक इंटरफ़ेस प्रदान नहीं करेंगे, तो आपका पुस्तकालय संभवतः अश्लीलता के लिए बर्बाद है।


लेकिन अजगर में लिखे जाने का मतलब यह नहीं है कि आपके मॉडल को अजगर में निष्पादित किया गया है। इसके विपरीत, यदि आपने अपने मॉडल को सही तरीके से लिखा है, तो TF ग्राफ़ के मूल्यांकन के दौरान पायथन को कभी भी निष्पादित नहीं किया जाता है ( tf.py_func () को छोड़कर , जो डिबगिंग के लिए मौजूद है और वास्तविक मॉडल से बिलकुल बचना चाहिए क्योंकि इसे निष्पादित किया जाता है पायथन का पक्ष)।

यह उदाहरण के लिए अलग है सुन्न। उदाहरण के लिए यदि आप करते हैं np.linalg.eig(np.matmul(A, np.transpose(A))(जो है eig(AA')), ऑपरेशन कुछ तेज भाषा (C ++ या फोरट्रान) में स्थानांतरित कर देगा, इसे अजगर पर लौटाएं, इसे अजगर के साथ A से ले लें, और कुछ तेज भाषा में गुणा करें और इसे वापस करें अजगर, फिर प्रतिध्वनि की गणना करता है और इसे अजगर को वापस करता है। तो फिर भी मटमूल और ईग जैसे महंगे आपरेशनों की कुशलता से गणना की जाती है, फिर भी आप परिणाम को अजगर और बल पर स्थानांतरित करके समय गंवा देते हैं। TF ऐसा नहीं करता है , एक बार जब आप ग्राफ को परिभाषित करते हैं तो आपके टेंसर्स अजगर में नहीं बल्कि C ++ / CUDA / कुछ और में प्रवाहित होते हैं।


इस संदर्भ में मेरी ब्लॉग पोस्ट रुचि की हो सकती है: blog.ephorie.de/why-r-for-data-science-and-not-python
vonjd

4

पायथन आपको सी और सी ++ का उपयोग करके विस्तार मॉड्यूल बनाने की अनुमति देता है, देशी कोड के साथ इंटरफेस करता है, और अभी भी उन लाभों को प्राप्त कर रहा है जो पायथन आपको देता है।

TensorFlow, Python का उपयोग करता है, हाँ, लेकिन इसमें C ++ की बड़ी मात्रा भी होती है

यह पायथन के साथ कम मानव-विचार वाले ओवरहेड के साथ प्रयोग के लिए एक सरल इंटरफ़ेस की अनुमति देता है, और C ++ में सबसे महत्वपूर्ण भागों को प्रोग्रामिंग करके प्रदर्शन को जोड़ता है।


0

नवीनतम अनुपात जिसे आप यहां से देख सकते हैं, TensorFlow C ++ के अंदर ~ 50% कोड लेता है, और Python ~ 40% कोड लेता है।

C ++ और Python दोनों Google पर आधिकारिक भाषा हैं इसलिए कोई आश्चर्य नहीं है कि ऐसा क्यों है। अगर मुझे तेजी से प्रतिगमन प्रदान करना होगा जहां C ++ और पायथन मौजूद हैं ...

C ++ कम्प्यूटेशनल बीजगणित के अंदर है, और पायथन का उपयोग परीक्षण सहित अन्य सभी चीजों के लिए किया जाता है। यह जानते हुए कि परीक्षण कितना सर्वव्यापी है आज यह कोई आश्चर्य नहीं है कि पायथन कोड टीएफ में इतना योगदान क्यों देता है।

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