Connector for PyTorch

‫Connector for PyTorch של Cloud Storage הוא מוצר בקוד פתוח שנתמך על ידי Google ומספק שילוב ישיר של Cloud Storage עם PyTorch.

סקירה כללית

ה-Connector for PyTorch מספק יתרונות גם לטעינת נתונים באימון וגם ליצירת נקודות ביקורת ולטעינת מודלים:

ל-Connector for PyTorch יש יתרונות בטעינת נתונים לאימון:

  • ‫Connector for PyTorch מכיל אופטימיזציות שמאפשרות להאיץ את האימון עד פי שלושה בהשוואה ל-PyTorch כברירת מחדל במערכי נתונים שמורכבים בעיקר מקבצים קטנים מ-1MB.
  • המחבר ל-PyTorch מטמיע את הפרימיטיב של מערך הנתונים של PyTorch, שאפשר להשתמש בו כדי לטעון ביעילות נתוני אימון מקטגוריות של Cloud Storage.
  • תמיכה במערכי נתונים בסגנון מפה לדפוסי גישה אקראיים לנתונים ובמערכי נתונים בסגנון איטרציה לדפוסי גישה לנתונים בהזרמה.
  • היכולת להמיר את הנתונים הגולמיים בפורמט של בייטים שהורדו לפורמט שתבחרו, כדי לאפשר ל-PyTorch DataLoader לעבוד בצורה גמישה עם מערכי NumPy או עם טנסורים של PyTorch.

ל-Connector for PyTorch יש יתרונות בבדיקת נקודות ציון ובטעינת מודלים:

  • ממשק ליצירת נקודות ביקורת שמאפשר לשמור נקודות ביקורת של מודלים ישירות בקטגוריה של Cloud Storage ולטעון נקודות ביקורת של מודלים מהקטגוריה.
  • ‫Connector for PyTorch תומך בנקודות ביקורת של PyTorch Lightning באמצעות הטמעה של DatafluxLightningCheckpoint של CheckpointIO של PyTorch Lightning.
  • ‫Connector for PyTorch מספק הטמעות של StorageWriter ו-StorageReader לשימוש עם checkpointing מבוזר של PyTorch. ספריית ההדגמה של Connector for PyTorch כוללת קוד לדוגמה לשימוש ב-PyTorch Lightning FSDP workload.
  • התכונה 'שמירת נקודות ביקורת במחבר' כוללת תמיכה בשמירת נקודות ביקורת אסינכרוניות גם ב-Lightning וגם ב-PyTorch הבסיסי.

מידע נוסף זמין בדף הנחיתה של Connector for PyTorch ב-GitHub.

‫Frameworks

‫Connector for PyTorch נתמך בגרסאות ה-framework הבאות:

  • ‫Python 3.8 ואילך
  • ‫PyTorch Lightning 2.0 ואילך
  • ‫PyTorch 2.3.1 ואילך

תחילת העבודה

כדי להשתמש ב-Connector for PyTorch, צריך:

  • קטגוריה של Cloud Storage שמכילה את הנתונים שרוצים לעבוד איתם.
  • ההרשאות הבאות לעבודה עם הנתונים שמאוחסנים בקטגוריה:
    • storage.objects.create
    • storage.objects.list
    • storage.objects.get
    • storage.objects.delete, אם אתם מתכוונים להשתמש בהורדות מורכבות

צריך להעניק את ההרשאות האלה לחשבון שבו Connector for PyTorch ישתמש לאימות, באמצעות תפקיד IAM כמו Storage Object User.

התקנה

כדי להתקין את Connector for PyTorch, משתמשים בפקודה הבאה:

pip install gcs-torch-dataflux

הגדרות אישיות

כדי להשתמש ב-Connector for PyTorch, צריך לספק אימות באמצעות Application Default Credentials באחת מהשיטות הבאות:

  • כשמריצים את Connector for PyTorch במכונה וירטואלית ב-Compute Engine, פרטי הכניסה שמוגדרים כברירת מחדל לאפליקציה משתמשים באופן אוטומטי בחשבון השירות שמקושר למכונה הווירטואלית. מידע נוסף זמין במאמר בנושא בחירת שיטת אימות של עומסי עבודה.
  • אפשר גם להגדיר Application Default Credentials באופן ידני. אפשר להיכנס ישירות באמצעות Google Cloud CLI:
gcloud auth application-default login

דוגמאות

אוסף מלא של דוגמאות לעבודה עם Connector for PyTorch זמין בספריית ההדגמה של מאגר GitHub של Connector for PyTorch. לדוגמה:

ביצועים

ל-Connector for PyTorch יש אופטימיזציות ספציפיות שנועדו לעומסי עבודה (workloads) של למידת מכונה (ML), והן יכולות לספק ביצועים טובים משמעותית בהשוואה לקריאות ישירות ל-API של Cloud Storage:

  • כדי לשפר את הביצועים של רשימת הפריטים, Connector for PyTorch משתמש באלגוריתם מהיר של רשימת פריטים שפותח כדי לאזן את עומס העבודה של רשימת הפריטים בין תהליכים מקבילים של רשימת אובייקטים.
  • כדי לשפר את הביצועים של הורדת קבצים קטנים, Connector for PyTorch משתמש בפעולת ההרכבה כדי לשרשר קבוצות של אובייקטים קטנים לאובייקטים גדולים יותר. האובייקטים המורכבים האלה מאוחסנים באותה קטגוריה כמו אובייקטי המקור, והשמות שלהם מתחילים בקידומת dataflux-composed-objects/.
  • העלאה מרובת חלקים לכתיבת נקודות ביקורת מאפשרת שיפור ביצועים של עד פי 10 בהשוואה להעלאה רגילה של נקודות ביקורת.

ב-GitHub אפשר למצוא נתוני ביצועים לגבי:

  • הדרכה מבוססת-טקסט ב-Lightning
  • Lightning Image Training
  • יצירת נקודות ביקורת בצומת יחיד
  • יצירת נקודות ביקורת (checkpointing) בכמה צמתים

לתשומת ליבכם

צריך להביא בחשבון את הנקודות הבאות לגבי כל עומס עבודה.

פעולות מהירות ברשימות

האלגוריתם של Connector for PyTorch לרישום מהיר גורם ל-Connector for PyTorch להשתמש ביותר פעולות רישום מאשר רישום רגיל ברצף. פעולות של הצגת רשימה מחויבות כפעולות ברמה A.

שימוש באובייקטים מורכבים

כדי להימנע מחיובים על אחסון מעבר למכסה ומחיובים על מחיקה מוקדמת כשעובדים עם אובייקטים מורכבים זמניים, צריך לוודא שהקטגוריה משתמשת בהגדרות הבאות:

אובייקטים מורכבים שנוצרו על ידי Connector for PyTorch בדרך כלל מוסרים אוטומטית בסוף לולאת האימון, אבל במקרים נדירים הם לא מוסרים. כדי לוודא שהאובייקטים הוסרו מהקטגוריה, אפשר להריץ את הפקודה הבאה:

gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive

כדי להשבית את השימוש באובייקטים מורכבים, צריך לכלול את disable_compose=True או את max_composite_object_size=0 בחלק ההגדרות של מערך הנתונים שאתם יוצרים. עם זאת, השבתת ההתנהגות הזו עלולה לגרום ללולאות האימון להימשך זמן רב יותר, במיוחד כשעובדים עם קבצים קטנים.

שימוש באובייקטים מורכבים גורם ל-Cloud Storage להגיע למגבלות של QPS ושל קצב העברת נתונים (throughput) בקנה מידה נמוך יותר מאשר הורדה ישירה של קבצים. כדאי להשבית את השימוש באובייקטים מורכבים כשמריצים בקנה מידה גדול של כמה צמתים, שבו מגיעים למגבלות של QPS או של קצב העברת נתונים של הפרויקט גם בלי להשתמש באובייקטים מורכבים.

שגיאות 429 וביצועים ירודים

במהלך העבודה עם Connector for PyTorch, יכול להיות שתקבלו שגיאות 429 או זמני ביצוע איטיים מהצפוי. יש כמה סיבות נפוצות לכך:

  • במאמצים רבים של למידת מכונה, בוחרים במודל אימון מבוזר מאוד שמתבסס על כלים כמו PyTorch Lightning ו-Ray. המודלים האלה תואמים ל-Connector for PyTorch, אבל לעיתים קרובות הם יכולים להפעיל את מגבלות הקצב של Cloud Storage.
  • שגיאות 429 שמלוות בהודעות כמו "עומס העבודה הזה צורך יותר מדי רוחב פס של תעבורת נתונים יוצאת מ-Cloud Storage" או "עומס העבודה הזה הפעיל את המגבלה על רוחב פס של תעבורת נתונים יוצאת מ-Cloud Storage" מצביעות על כך שקצב העברת הנתונים של עומס העבודה חורג מהקיבולת המקסימלית של פרויקט Cloud de Confiance by S3NS . כדי לפתור את הבעיות האלה, מבצעים את הפעולות הבאות:
  • הגבלות QPS יכולות להפעיל שגיאות 429 עם הודעת גוף שמציינת TooManyRequests, אבל בדרך כלל הן מתבטאות בזמני ביצוע איטיים מהצפוי. צווארי בקבוק של QPS נפוצים יותר כשמבצעים פעולות על נפחים גדולים של קבצים קטנים. מגבלות ה-QPS של מאגרים גדלות באופן טבעי עם הזמן, ולכן תקופת התחממות יכולה לעזור לשפר את הביצועים מהר יותר. כדי לקבל פרטים נוספים על הביצועים של דלי יעד, אפשר לעיין בכרטיסייה Observability כשמציגים את הדלי מ Cloud de Confiance המסוף.
  • אם עומס העבודה נכשל עם שגיאה TooManyRequests שכוללת את מילת המפתח dataflux-composed-objects בהודעת השגיאה, השלב הראשון הכי טוב לפתרון הבעיה הוא להשבית את השימוש באובייקטים מורכבים. הפעולה הזו יכולה להפחית את עומס ה-QPS שנוצר על ידי פעולות כתיבה כשמשתמשים בהן בהיקף גדול.

צריכת זיכרון

פעולות כתיבה וטעינה של נקודות ביקורת, כולל מודלים סופיים להסקת מסקנות, מועלות לזיכרון באופן מלא כדי לשפר את הביצועים של ההעלאה וההורדה. לכל מכונה צריך להיות מספיק זיכרון RAM פנוי כדי לאחסן את נקודת הבדיקה בזיכרון, וכך לנצל את שיפורי הביצועים האלה.

פנייה לתמיכה

ב-GitHub אפשר לקבל תמיכה, לשלוח שאלות כלליות ולבקש תכונות חדשות.

PyTorch, הלוגו של PyTorch וכל הסימנים שקשורים אליו הם סימנים מסחריים של The Linux Foundation.