CPU पर 40 GB CSV पर मौजूदा pandas पाइपलाइन बहुत धीमी है।
→pandas को cuDF से बदलें; अधिकांश read/filter/groupby/join कॉल वही API रखते हैं और GPU पर चलते हैं।
क्यों: cuDF डिज़ाइन के अनुसार pandas API को दर्शाता है, इसलिए माइग्रेशन ज्यादातर एक इंपोर्ट परिवर्तन है बजाय एक पुनर्लेखन के।
संदर्भ↗
टीम मौजूदा pandas कोड को छुए बिना GPU स्पीडअप चाहती है।
→cudf.pandas accelerator (%load_ext cudf.pandas या python -m cudf.pandas) लोड करें; यह GPU पर ऑपरेशन चलाता है और स्वचालित रूप से CPU पर वापस आ जाता है।
क्यों: पारदर्शी CPU फॉलबैक के साथ ज़ीरो-कोड-परिवर्तन एक्सेलेरेशन असमर्थित ऑप्स को काम करता रहता है।
संदर्भ↗
GPU पर एक बड़े एनालिटिक्स डेटासेट का सबसे तेज़ कॉलम लोड चाहिए।
→Parquet के रूप में स्टोर करें और cudf.read_parquet के साथ पढ़ें; कॉलम प्रूनिंग और प्रेडिकेट पुशडाउन डिवाइस ट्रांसफर को कम करते हैं।
क्यों: Columnar Parquet Arrow-backed cuDF के साथ साफ-सुथरा मैप करता है और पंक्ति-उन्मुख CSV की तुलना में बहुत तेज़ी से पढ़ता है।
50 MB की फ़ाइल पर cuDF, pandas की तुलना में धीमा है।
→छोटे डेटा को CPU पर रखें; होस्ट-से-डिवाइस ट्रांसफर और कर्नेल-लॉन्च ओवरहेड ~1–2 GB से नीचे हावी होते हैं।
क्यों: GPU एक्सेलेरेशन बड़े पैमाने पर लाभ देता है; छोटे डेटा के लिए कॉपी लागत कंप्यूट जीत से अधिक होती है।
एक से अधिक आंकड़ों के साथ कुंजी द्वारा अरबों पंक्तियों को समूहित करें।
→cuDF में df.groupby(key).agg({...}) का उपयोग करें; एग्रीगेशन समानांतर GPU कर्नेल के रूप में चलते हैं।
GPU स्केल पर एक उच्च-कार्डिनलिटी टेक्स्ट कॉलम को साफ़ और सामान्य करें।
→cuDF's .str accessor (lower, strip, replace, contains, split) का उपयोग करें; स्ट्रिंग ऑप्स libcudf के माध्यम से GPU-त्वरित होते हैं।
क्यों: cuDF में एक समर्पित GPU स्ट्रिंग लेयर है, इसलिए टेक्स्ट क्लीनिंग के लिए CPU पर वापस जाने की आवश्यकता नहीं है।
साझा कुंजी पर दो बड़े डिवाइस DataFrames को जॉइन करें।
→जॉइन कुंजी के साथ cudf.merge / df.merge का उपयोग करें; हैश जॉइन GPU पर निष्पादित होते हैं।
क्यों: राउंड-ट्रिप से बचने के लिए दोनों फ़्रेम पहले से ही डिवाइस पर होने चाहिए; pandas और cuDF को मिलाने से होस्ट कॉपी मजबूर होती है।
डेटासेट में गुम मान हैं जो डाउनस्ट्रीम cuML प्रशिक्षण को तोड़ते हैं।
→फिटिंग से पहले cuDF fillna/dropna और स्पष्ट dtype कास्ट का उपयोग करें; cuML साफ न्यूमेरिक डिवाइस एरेज़ की उम्मीद करता है।
मिश्रित/ऑब्जेक्ट dtypes cuDF में त्रुटियां या मेमोरी ब्लोट का कारण बनते हैं।
→GPU मेमोरी फ़ुटप्रिंट को कम करने के लिए कॉम्पैक्ट न्यूमेरिक या कैटगोरिकल dtypes (int32/float32, category) में जल्दी कास्ट करें।
क्यों: डाउनकास्टिंग डिवाइस-मेमोरी दबाव को कम करता है, जो एक सिंगल GPU पर सबसे आम बॉटलनेक है।
प्रशिक्षण से पहले कैटगोरिकल सुविधाओं के लिए लेबल/वन-हॉट एन्कोडिंग की आवश्यकता है।
→डेटा को ऑन-डिवाइस रखने के लिए .cat.codes के साथ cuDF कैटगोरिकल dtype या cuML प्रीप्रोसेसिंग एनकोडर का उपयोग करें।
cuDF DataFrame API द्वारा उजागर न किए गए रॉ न्यूमेरिक एरे मैथ की आवश्यकता है।
→df.values या to_cupy() के माध्यम से कनवर्ट करें और CuPy (NumPy-संगत GPU एरेज़) के साथ ऑपरेट करें, फिर परिणाम वापस लाएँ।
क्यों: cuDF और CuPy __cuda_array_interface__ के माध्यम से डिवाइस मेमोरी साझा करते हैं, इसलिए रूपांतरण शून्य-कॉपी होता है।