max
और exp
संचालन मौलिक रूप से अलग हैं; exp
(और अन्य ऑपरेशंस जैसे sin
इत्यादि) एक तत्वपूर्ण ऑपरेशन है जो शर्मनाक रूप से समांतर है, जबकि max
को समानांतर प्रोसेसिंग स्कैन एल्गोरिदम की आवश्यकता होती है जो मूल रूप से सरणी पर जोड़ी तुलना के पेड़ का निर्माण करता है। max
को गति देना असंभव नहीं है, लेकिन यह exp
जितना आसान नहीं है।
वैसे भी, max
की theano
कार्यान्वयन मूल रूप से निम्नलिखित लाइनों के होते हैं (थेनो/टेन्सर/basic.py में):
try:
out = max_and_argmax(x, axis)[0]
except Exception:
out = CAReduce(scal.maximum, axis)(x)
जहां max_and_argmax
कस्टम कोड का एक समूह है कि, मेरी आंखों के लिए, औजार numpy
का उपयोग कर अधिकतम + argmax ऑपरेशन, और CAReduce
एक सामान्य जीपीयू-त्वरित स्कैन ऑपरेशन है जो फ़ॉलबैक के रूप में उपयोग किया जाता है (जो टिप्पणियों के अनुसार grad
आदि का समर्थन नहीं करता है)। आप सीधे वापस आने का उपयोग करके देखें और क्या है कि कुछ इस तरह तेजी से होता है, हो सकता है देख सकते हैं:
from theano.tensor.elemwise import CAReduce
from theano.scalar import maximum
def mymax(X, axis=None):
CAReduce(maximum, axis)(X)
हां, मैं पूरी प्रतिलिपि + गणना कर रहा था। मैं थानो प्रोफाइलर का प्रयास करूंगा। मैं कॉपीिंग ओवरहेड्स सहित अधिकतम (एक्स, अक्ष = 0) 'ऑपरेशन को तेज़ करना चाहता हूं। मुझे लगता है कि किसी भी मैट्रिक्स आकार के लिए इसे प्राप्त करने में सक्षम नहीं है। आपकी क्या सलाह है? – hrs
जैसा कि मैंने जवाब में बताने की कोशिश की, मुझे नहीं लगता कि आप अधिकतम कमी के लिए तेजी से बढ़ने में सक्षम होंगे यदि आप किसी भी प्रणाली के साथ स्थानांतरण समय शामिल करते हैं, न केवल थानो। सीपीयू पर कमी करने के लिए, बाधा स्मृति से पढ़ने है।जीपीयू में स्थानांतरण करना एक धीमी रफ्तार से चल रहा है, फिर सीपीयू कोर द्वारा सीपीयू मेमोरी से पढ़ना। यदि आप जीपीयू की गति चाहते हैं जिसमें स्थानांतरण शामिल है, तो आपको GPU पर अधिक गणना करने की आवश्यकता है। – nouiz