यह एक लंबा शॉट है, यदि आपको लगता है कि प्रश्न बहुत स्थानीय है, तो कृपया बंद करने के लिए वोट दें। मैं caffe2 github भंडार की खोज नहीं की, एक ही सवाल पूछने an issue खोला, क्योंकि इसके लेखक यह सबसे अच्छा समझने के लिए, caffe2::Tensor और caffe2::CUDAContext, पर Doxygen प्रलेखन पढ़ सकते हैं और यहां तक कि caffe2 source code के माध्यम से चला रहा है caffe2_ccp_tutorials भंडार में एक और मुद्दा खोला, और tensor.h
, context_gpu.h
और context_gpu.cc
विशिष्ट में।कैफे 2 टेंसर <CUDAContext> असाइनमेंट, निर्माण या प्रतिलिपि
मैं समझता हूं कि वर्तमान में कैफे 2 डिवाइस मेमोरी को टेंसर पर कॉपी करने की अनुमति नहीं देता है। मैं लाइब्रेरी का विस्तार करने के लिए तैयार हूं और इसे प्राप्त करने के लिए पुल अनुरोध करता हूं। इसके पीछे मेरा कारण यह है कि मैं cv::cuda::*
विधियों का उपयोग कर सभी छवि प्री-प्रोसेसिंग करता हूं जो डिवाइस मेमोरी पर काम करता है, और जैसा कि मुझे लगता है कि यह स्पष्ट रूप से जीपीयू पर प्री-प्रोसेसिंग करने में एक समस्या है, केवल होस्ट पर परिणाम डाउनलोड करने के लिए , और फिर इसे होस्ट से डिवाइस पर नेटवर्क पर फिर से अपलोड कर दिया है।
Tensor<Context>
के निर्माताओं को देखते हुए मैं देख सकता हूँ शायद ही
template<class SrcContext , class ContextForCopy >
Tensor (const Tensor<SrcContext> &src, ContextForCopy *context)
को प्राप्त हो सकता है कि मैं क्या चाहता हूँ, लेकिन मैं कैसे <ContextForCopy>
सेट और फिर निर्माण के लिए इसका इस्तेमाल करने की कोई अंदाज़ा नहीं है।
इसके अलावा, मुझे लगता है कि मैं सही आयामों के साथ टेन्सर निर्माण कर सकते हैं, और फिर शायद का उपयोग कर
template <typename T>
T* mutable_data()
मैं प्रदान कर सकते हैं/डेटा की प्रतिलिपि। डेटा को std::vector<cv::cuda::GpuMat
में संग्रहीत किया जाता है, इसलिए मुझे इसे फिर से चालू करना होगा, और फिर अंतर्निहित डिवाइस आवंटित डेटा तक पहुंचने के लिए cuda::PtrStepSz
or cuda::PtrStep
का उपयोग करें। यह वही डेटा है जिसे मुझे caffe2::Tensor<CUDAContext>
में कॉपी/असाइन करने की आवश्यकता है।
मैं पता लगाने के लिए आंतरिक रूप से Tensor<CPUContext>
Tensor<CUDAContext>
को कॉपी किया है के बाद से मैं इसके बारे में उदाहरण देखा है की कोशिश कर रहा है, लेकिन मैं इसे समझ नहीं सकता है, हालांकि मुझे लगता है कि प्रयोग विधि CopyFrom
है। पहले ही उल्लेख के रूप में हमेशा की तरह उदाहरण, सीपीयू से GPU को कॉपी:
TensorCPU tensor_cpu(...);
TensorCUDA tensor_cuda = workspace.CreateBlob("input")->GetMutable<TensorCUDA>();
tensor_cuda->ResizeLike(tensor_cpu);
tensor_cuda->ShareData(tensor_cpu);
मैं कर रहा हूँ काफी हैरान कोई भी अभी तक इस कार्य को भी करना पड़ा है, और एक संक्षिप्त खोज पैदावार केवल एक open issue जहाँ लेखक (@peterneher) पूछ रहा है एक ही चीज़ कम या ज्यादा।