Connector for PyTorch של Cloud Storage הוא מוצר בקוד פתוח שנתמך על ידי Google ומספק שילוב ישיר של Cloud Storage עם PyTorch.
סקירה כללית
Connector for PyTorch מספק יתרונות גם לטעינת נתונים באימון וגם ליצירת נקודות ביקורת ולטעינת מודלים:
ל-Connector for PyTorch יש יתרונות בטעינת נתונים לאימון:
- Connector for PyTorch מכיל אופטימיזציות שמאיצות את האימון עד פי שלושה בהשוואה ל-PyTorch שמוגדר כברירת מחדל במערכי נתונים שמורכבים בעיקר מקבצים קטנים מ-1MB.
- Connector for PyTorch מטמיע את הפרימיטיב של מערך הנתונים של PyTorch, שאפשר להשתמש בו כדי לטעון ביעילות נתוני אימון מקטגוריות של Cloud Storage.
- תמיכה במערכי נתונים בסגנון מפה לדפוסי גישה לנתונים אקראיים ובמערכי נתונים בסגנון איטרציה לדפוסי גישה לנתונים בהזרמה.
- היכולת להמיר את הנתונים הגולמיים בפורמט של בחירתכם, כך ש-PyTorch DataLoader יוכל לעבוד בצורה גמישה עם מערכי NumPy או עם טנסורים של PyTorch.
ל-Connector for PyTorch יש יתרונות בבדיקת נקודות ביקורת ובטעינת מודלים:
- ממשק ליצירת נקודות ביקורת שמאפשר לשמור נקודות ביקורת של מודלים ישירות בקטגוריה של Cloud Storage ולטעון נקודות ביקורת של מודלים מהקטגוריה.
- Connector for PyTorch תומך בנקודות ביקורת (checkpointing) של PyTorch Lightning באמצעות הטמעה של
DatafluxLightningCheckpointשל PyTorch Lightning.CheckpointIO - Connector for PyTorch מספק הטמעות של
StorageWriterו-StorageReaderלשימוש עם PyTorch distributed checkpointing. ספריית ההדגמה של Connector for PyTorch כוללת קוד לדוגמה לשימוש ב-FSDP בעומס עבודה של PyTorch Lightning. - התכונה Connector checkpointing כוללת תמיכה בשמירת נקודות ביקורת אסינכרוניות גם ב-Lightning וגם ב-base 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.createstorage.objects.liststorage.objects.getstorage.objects.delete, אם אתם מתכוונים להשתמש בהורדות מורכבות
צריך להעניק את ההרשאות האלה לחשבון שבו Connector for PyTorch ישתמש לאימות, באמצעות תפקיד IAM כמו משתמש באובייקטים באחסון.
התקנה
כדי להתקין את 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. לדוגמה:
- קובץ Jupyter Notebook בסיסי למתחילים (מתארח ב-Google Colab).
- הסבר מפורט על עומס עבודה של אימון חלוקת תמונות למקטעים מקצה לקצה.
- דוגמה מפורטת ו-notebook לשילוב של PyTorch Lightning.
ביצועים
ל-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.
שימוש באובייקטים מורכבים
כדי להימנע מחיובים על אחסון מעבר למכסה ומחיובים על מחיקה מוקדמת כשעובדים עם אובייקטים מורכבים זמניים, צריך לוודא שקטגוריית האחסון מוגדרת עם ההגדרות הבאות:
- ההגדרה מחיקה עם יכולת שחזור מושבתת
- ההגדרה Bucket Lock מושבתת
- השבתה של ניהול גרסאות של אובייקטים
- Standard storage כסוג האחסון (storage class) של הקטגוריה ושל האובייקטים.
אובייקטים מורכבים שנוצרו על ידי Connector for PyTorch בדרך כלל מוסרים באופן אוטומטי בסוף לולאת האימון, אבל במקרים נדירים הם לא מוסרים. כדי לוודא שהאובייקטים הוסרו מהקטגוריה, אפשר להריץ את הפקודה הבאה:
gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive
כדי להשבית את השימוש באובייקטים מורכבים, צריך לכלול את disable_compose=True או את max_composite_object_size=0 בחלק ההגדרות של מערך הנתונים שיוצרים. עם זאת, השבתת ההתנהגות הזו עלולה לגרום ללולאות האימון להימשך זמן רב יותר, במיוחד כשעובדים עם קבצים קטנים.
שימוש באובייקטים מורכבים גורם ל-Cloud Storage להגיע למגבלות של QPS ושל קצב העברת נתונים בקנה מידה נמוך יותר מאשר הורדה ישירה של קבצים. כדאי להשבית את השימוש באובייקטים מורכבים כשמריצים בקנה מידה גדול של כמה צמתים, שבו מגיעים למגבלות של QPS או של קצב העברת נתונים של הפרויקט גם בלי להשתמש באובייקטים מורכבים.
שגיאות 429 וביצועים ירודים
במהלך העבודה עם Connector for PyTorch, יכול להיות שתקבלו שגיאות 429 או זמני ביצוע איטיים מהצפוי. יש כמה סיבות נפוצות לכך:
- במאמצים רבים של למידת מכונה, בוחרים במודל אימון מבוזר מאוד שמסתמך על כלים כמו PyTorch Lightning ו-Ray. המודלים האלה תואמים ל-Connector for PyTorch, אבל לעיתים קרובות הם יכולים להפעיל את מגבלות הקצב של Cloud Storage.
- שגיאות 429 שמלוות בהודעות כמו 'עומס העבודה הזה צורך יותר מדי רוחב פס של תעבורת נתונים יוצאת (egress) מ-Cloud Storage' או 'עומס העבודה הזה הפעיל את המגבלה על רוחב הפס של תעבורת נתונים יוצאת (egress) מ-Cloud Storage' מצביעות על כך שקצב התפוקה של הנתונים בעומס העבודה חורג מהקיבולת המקסימלית של פרויקט Google Cloud . כדי לפתור את הבעיות האלה, מבצעים את השלבים הבאים:
- בודקים שעומסי עבודה אחרים בפרויקט לא צורכים רוחב פס עודף.
- הגשת בקשה להגדלת המכסה
- כדי לשפר את הביצועים ולשנות את ההשהיה לפני ניסיון חוזר (backoff) בין ניסיונות השליחה, משנים את האפשרויות
list_retry_configו-download_retry_configבחלק ההגדרות של מערכי הנתונים שאתם יוצרים.
- הגבלות על QPS יכולות להפעיל שגיאות 429 עם הודעת גוף שמציינת
TooManyRequests, אבל בדרך כלל הן מתבטאות בזמני ביצוע איטיים מהצפוי. צווארי בקבוק של QPS נפוצים יותר כשפועלים על נפחים גדולים של קבצים קטנים. מגבלות ה-QPS של קבוצות גדלות באופן טבעי עם הזמן, ולכן תקופת חימום יכולה לעזור לשיפור הביצועים. כדי לקבל פרטים נוספים על הביצועים של דלי יעד, אפשר לעיין בכרטיסייה Observability כשמציגים את הדלי מ Google Cloud המסוף. - אם עומס העבודה נכשל עם שגיאה
TooManyRequestsשכוללת את מילת המפתחdataflux-composed-objectsבהודעת השגיאה, השלב הראשון הכי טוב לפתרון הבעיה הוא להשבית את השימוש באובייקטים מורכבים. הפעולה הזו יכולה להפחית את עומס ה-QPS שנוצר על ידי פעולות כתיבה כשמשתמשים בהן בהיקף גדול.
צריכת זיכרון
פעולות כתיבה וטעינה של נקודות ביקורת, כולל מודלים סופיים להיקש, מבוצעות באופן מלא בזיכרון כדי לשפר את הביצועים של ההעלאה וההורדה. לכל מכונה צריך להיות מספיק RAM פנוי כדי לאחסן את נקודת הבדיקה בזיכרון, וכך לנצל את שיפורי הביצועים האלה.
פנייה לתמיכה
בערוצי התמיכה הרשמיים שלGoogle Cloud אפשר לקבל תמיכה, לשלוח שאלות כלליות ולבקש תכונות חדשות. אפשר לקבל תמיכה גם באמצעות דיווח על בעיות ב-GitHub.