צינור נתונים קיים של pandas על קובץ CSV בגודל 40 GB איטי מדי על CPU.
→החלף את pandas ב-cuDF; רוב קריאות read/filter/groupby/join שומרות על אותו API ורצות על ה-GPU.
למה: cuDF משקף את ה-API של pandas לפי עיצוב, ולכן ההגירה היא בעיקר שינוי ייבוא ולא כתיבה מחדש.
מקור↗
הצוות רוצה האצת GPU מבלי לגעת בקוד pandas קיים.
→טען את מאיץ cudf.pandas (באמצעות %load_ext cudf.pandas או python -m cudf.pandas); הוא מריץ פעולות על GPU וחוזר אוטומטית ל-CPU.
למה: האצה ללא שינוי קוד עם חזרה שקופה ל-CPU שומרת על פעולות לא נתמכות תקינות.
מקור↗
צריך את הטעינה העמודתית המהירה ביותר של מערך נתונים גדול לניתוח על GPU.
→אחסן כ-Parquet וקרא עם cudf.read_parquet; קיטום עמודות ו-predicate pushdown ממזערים העברת התקנים.
למה: Parquet עמודתי ממפה באופן נקי ל-Arrow-backed cuDF וקורא הרבה יותר מהר מ-CSV מכוון-שורות.
cuDF איטי יותר מ-pandas על קובץ בגודל 50 MB.
→שמור נתונים קטנים על CPU; העברת host-to-device ותקורה של kernel-launch שולטות מתחת ל-~1–2 GB.
למה: האצת GPU משתלמת בקנה מידה; עבור נתונים זעירים, עלות ההעתקה עולה על רווח החישוב.
צבור מיליארדי שורות לפי מפתח עם סטטיסטיקות מרובות.
→השתמש ב-df.groupby(key).agg({...}) ב-cuDF; צבירות רצות כ-GPU kernels מקבילים.
נקה ונרמל עמודת טקסט בעלת קרדינליות גבוהה בקנה מידה של GPU.
→השתמש ב-cuDF's .str accessor (lower, strip, replace, contains, split); פעולות string מואצות ב-GPU באמצעות libcudf.
למה: ל-cuDF יש שכבת string ייעודית ל-GPU, כך שאין צורך לחזור ל-CPU עבור ניקוי טקסט.
צרף שני device DataFrames גדולים על מפתח משותף.
→השתמש ב-cudf.merge / df.merge עם מפתח הצירוף; hash joins מבוצעים על ה-GPU.
למה: שתי המסגרות חייבות כבר להיות על ההתקן כדי למנוע הלוך ושוב; ערבוב pandas ו-cuDF מאלץ העתקה למארח.
מערך הנתונים מכיל ערכים חסרים ששוברים אימון cuML בהמשך.
→השתמש ב-cuDF fillna/dropna והטלות dtype מפורשות לפני ההתאמה; cuML מצפה למערכי device נקיים מספריים.
סוגי נתונים מעורבים/object גורמים לשגיאות או לבזבוז זיכרון ב-cuDF.
→הטל לסוגי נתונים מספריים או קטגוריאליים קומפקטיים (int32/float32, category) מוקדם כדי להקטין את טביעת הרגל של זיכרון ה-GPU.
למה: הורדת סוג הנתונים מפחיתה את הלחץ על זיכרון ההתקן, צוואר הבקבוק הנפוץ ביותר ב-GPU יחיד.
צריך קידוד label/one-hot עבור תכונות קטגוריות לפני האימון.
→השתמש ב-cuDF categorical dtype עם .cat.codes או ב-cuML preprocessing encoders כדי לשמור נתונים על ההתקן.
צריך פעולות מתמטיות של מערכים מספריים גולמיים שלא נחשפות על ידי ה-API של cuDF DataFrame.
→המר באמצעות df.values או to_cupy() ובצע פעולות עם CuPy (מערכי GPU תואמי NumPy), ואז החזר את התוצאות.
למה: cuDF ו-CuPy חולקים זיכרון התקן דרך ה-__cuda_array_interface__, כך שההמרה היא zero-copy.