במסמך הזה מוסבר על תהליך ההפעלה ועל אפשרויות היצירה של משימות. משימות באצווה מאפשרות להריץ עומסי עבודה של עיבוד באצווה ב-Google Cloud. כדי לקבל מידע על הרכיבים של משימה ועל הדרישות המוקדמות לשימוש ב-Batch, אפשר לעיין במאמר תחילת העבודה עם Batch.
איך יוצרים ומריצים משימות
כדי להשתמש ב-Batch, יוצרים משימה שמציינת את עומס העבודה והדרישות שלו, ואז Batch מריץ אותה באופן אוטומטי.
בקטעים הבאים מוסבר איך יצירה והרצה של משימות מתבצעות:
- מחזור החיים של משימה: הבנה של השלבים שבהם משימה עוברת מהרגע שהיא נוצרת ועד לרגע שהיא נמחקת.
- הוספת משימות לתור ותזמון שלהן: הסבר על הגורמים שמשפיעים על משך הזמן שחולף עד שהמשימה מתחילה לפעול.
- הפעלת משימות: הסבר על האופן שבו משימות של משימה פועלות במשאבים שלה במהלך ההפעלה.
מחזור החיים של משרה
בקטע הזה מתואר מחזור החיים של משימה ושל הפעולות שקשורות אליה, מהרגע שהיא נוצרת ועד שהיא נמחקת.
כדי להריץ כל עומס עבודה ב-Batch, צריך לבצע את התהליך הבסיסי הבא:
- יצירת משימה: מגדירים את עומס העבודה שרוצים להריץ על ידי ציון של רכיבים להרצה, משימות ודרישות אחרות של המשימה. פרטים על יצירת משרה מופיעים בקטע אפשרויות ליצירת משרה במסמך הזה.
- מעקב אחר העבודה ופתרון בעיות: כשמסיימים ליצור עבודה, היא מתווספת אוטומטית לתור, מתוזמנת ומתבצעת במשאבים שצוינו. אתם יכולים לראות את הפרטים של עבודה שנוצרה או של כל אחת מהמשימות שלה כדי לראות את המצב הנוכחי. במקרה הצורך, אפשר לבטל עבודה כדי להפסיק אותה או כדי למנוע את ההרצה שלה. אחרי שהעבודה פועלת או מסתיימת, אפשר גם לעקוב אחרי העבודה ולנתח אותה באמצעות יומנים. אם משימה נכשלת, אפשר לפתור את הבעיה באמצעות הודעות שגיאה, אירועי סטטוס או יומנים, לפני שיוצרים מחדש את המשימה.
- מחיקה או ייצוא של עבודה: פרטי העבודה ב-Batch נשארים זמינים עד שאתם או Google Cloud מוחקים אותם.Google Cloud מוחק עבודה באופן אוטומטי 60 יום אחרי שהיא מסתיימת. לפני כן, אתם יכולים למחוק את המשימה בעצמכם, או לייצא את פרטי המשימה ב-Batch אם אתם צריכים לשמור את המידע. מידע על משרה שאוחסן בשירותים אחרים של Google Cloud Google לא מושפע ממחיקת המשרה, ויש לו מדיניות שמירה נפרדת. לדוגמה, היומנים של משימה נשמרים ונמחקים אוטומטית בהתאם למדיניות השמירה של Cloud Logging.
אחרי שיוצרים משימה, היא עוברת בין המצבים הבאים:
- בתור (
QUEUED): בקשת העבודה התקבלה והיא ממתינה בתור. העבודה נשארת בתור של הפרויקט עד שאפשר לתזמן אותה. זה קורה כשהמשאבים הנדרשים זמינים והעבודות שלפניה נבדקו. עם זאת, כדי למנוע מצב שבו המשימות לא יתעדכנו, אם משימה חורגת מזמן ההמתנה המקסימלי בתור, Batch מפסיק את המשימה באופן אוטומטי במקום לתזמן אותה. - מתוזמן (
SCHEDULED): העבודה נבחרה מהתור כדי להתחיל לפעול והמשאבים מוקצים. פועל (
RUNNING): המשאבים של העבודה נוצרו בהצלחה והמשימות שלה יכולות להתחיל לפעול.כשמשימה פועלת, כל אחת מהמשימות שלה עוברת את השלבים הבאים:
- בהמתנה (
PENDING): המשימה ממתינה להרצה במכונה וירטואלית. - הוקצתה (
ASSIGNED): למשימה הוקצה מכונה וירטואלית להרצה. - פועלת (
RUNNING): המשימה פועלת במכונה וירטואלית. משימה מסתיימת באחד מהסטטוסים הבאים:
הושלם בהצלחה (
SUCCEEDED): המשימה הושלמה בהצלחה כי כל הרכיבים שלה עמדו באחד מהתנאים הבאים:- קובץ ההפעלה הצליח (הוחזר קוד יציאה של אפס).
- הפעלה של רכיב הפעלה נכשלה (הוחזר קוד יציאה שאינו אפס), אבל זה היה רכיב הפעלה לא קריטי (הפעלתם את השדה
ignoreExitStatusשל רכיב ההפעלה). - הקובץ הניתן להפעלה לא הסתיים, אבל הוא היה קובץ ניתן להפעלה ברקע (הפעלתם את השדה
backgroundשל הקובץ הניתן להפעלה).
נכשל (
FAILED): המשימה נכשלה והפסיקה לפעול כי לפחות רכיב אחד שניתן להפעלה לא עמד בתנאים הקודמים.
המשאבים של העבודה נמחקים לפני שהעבודה מסתיימת.
- בהמתנה (
עבודה מסתיימת באחד מהסטטוסים הבאים:
- הושלם בהצלחה (
SUCCEEDED): העבודה הושלמה בהצלחה כי כל המשימות שלה הושלמו בהצלחה. - נכשל (
FAILED): העבודה נכשלה והפסיקה לפעול כי לפחות אחת מהמשימות שלה נכשלה. - בוטלה (
CANCELLED): משתמש ביטל את העבודה לפני שהיא הסתיימה בהצלחה או נכשלה.
- הושלם בהצלחה (
מידע נוסף מופיע במאמרי העזרה בנושא מצבי עבודה ומצבי משימה.
הוספה לתור ותזמון של משימות
באופן כללי, יש סיכוי גבוה יותר שהעבודות יפעלו ויסתיימו מהר יותר אם הן קטנות ודורשות רק כמה משאבים נפוצים. לדוגמה, יכול להיות שתראו שהרצת המשימות לדוגמה במסמכי Batch, שהן בדרך כלל קטנות מאוד ומשתמשות במינימום משאבים, מסתיימת תוך כמה דקות בלבד.
באופן ספציפי, הזמן שנדרש לעיבוד של משימה בתור ולהקצאת משאבים משתנה ממשימה למשימה ובזמנים שונים, בהתאם לגורמים הבאים:
תנאים מוקדמים לעבודה שצוינו על ידי המשתמש: כל התנאים המוקדמים שאתם דורשים שיקוימו לפני שהעבודה מתוזמנת.
כברירת מחדל, אין דרישות מוקדמות למשרה. אפשר גם לציין שמשימה לא יכולה להיקבע לביצוע עד שמשימה קיימת אחת או יותר הושלמה בהצלחה או נכשלה. מידע נוסף מופיע במאמר תזמון של משימות שתלויות זו בזו (גרסת Preview).
עדיפות המשימה: העדיפות של משימה ביחס לעדיפויות של משימות אחרות בפרויקט.
אפשר גם לציין את העדיפות של עבודה באמצעות הדגל
--priorityב-ה-CLI של gcloud או השדהpriorityב-JSON. אפשר להגדיר את העדיפות של עבודה כמספר בין0(העדיפות הנמוכה ביותר) לבין99(העדיפות הגבוהה ביותר). הגדרת עדיפות גבוהה יותר יכולה לעזור למשימה לפעול מוקדם יותר ממשימות בעדיפות נמוכה יותר בפרויקט.אם לא מגדירים את העדיפות של עבודה, ברירת המחדל היא העדיפות הכי נמוכה,
0. אם לשתי משימות בתור יש אותה עדיפות, למשימה שנוצרה קודם יש עדיפות גבוהה יותר.זמינות משאבי המשימה: הזמינות של המשאבים הנדרשים למשימה במיקומים המותרים.
קודם כל, אי אפשר להריץ עבודה אם מציינים משאבים שלא מוצעים במיקום הזה. במקרה כזה, העבודה נכשלת עם שגיאת זמינות של אזור.
שנית, סביר יותר שיהיה עיכוב בעבודה או שהיא תיכשל אם אחד מהמשאבים הנדרשים שלה נמצא בקיבולת נמוכה יחסית לביקוש הנוכחי בגלל שגיאות בזמינות המשאבים. כתוצאה מכך, יכול להיות שהעבודה תופעל מוקדם יותר אם תצטרכו פחות משאבים נפוצים יותר ולא תגבילו את הפעלת העבודה באזורים מסוימים באזור.
מידע נוסף על המשאבים של משימה מופיע בקטע הרצת משימה במסמך הזה. מידע נוסף על המיקומים שאפשר לציין למשימת אצווה ולמשאבים שלה זמין בדף מיקומים.
מכסות ומגבלות: ספי השימוש במשאבים ובבקשות בפרויקט שלכם ב- Google Cloud .
אי אפשר להריץ ג'וב אם הוא חורג ממגבלה או מהמכסה של הפרויקט עבור אחד מהמשאבים או הבקשות הנדרשים. במקרה כזה, יכול להיות ש-Batch יעכב את העבודה וינסה שוב מאוחר יותר, או שהעבודה תיכשל ותוצג שגיאה שקשורה לכך.
כדי למנוע עיכובים ושגיאות במשימה, חשוב ליצור משימות שעומדות בכל המגבלות הרלוונטיות ולוודא שיש בפרויקט מספיק מכסה רלוונטית. מידע נוסף זמין במאמר מכסות ומגבלות של בקשות בכמות גדולה.
ביצוע של משימה
הזמן שנדרש לביצוע של עבודה יכול להשתנות בהתאם לתזמון המשימות ולמשאבים של העבודה.
תזמון משימות
כשמריצים עבודה, המשימות שלה מתוזמנות בהתאם לשדה מדיניות התזמון (schedulingPolicy), שבו אפשר לציין אחת מהאפשרויות הבאות:
- בהקדם האפשרי (
AS_SOON_AS_POSSIBLE) (ברירת מחדל): המשימות מופעלות ברגע שהמשאבים זמינים, ויכולות לפעול במקביל. מספר המשימות שפועלות בו-זמנית תלוי במשימות המקבילות לכל מכונה וירטואלית שמותרות על ידי משאבי המשימה ואפשרויות הגדרה אחרות, כפי שמוסבר בקטע משאבי משימה במסמך הזה. - בסדר (
IN_ORDER): המשימות מורצות אחת בכל פעם בסדר עולה של האינדקס.
משאבים למשרות
כל משימת Batch פועלת בקבוצה אזורית של מופעי מכונה מנוהלים (MIG), שהיא קבוצה של מופע אחד או יותר של מכונות וירטואליות (VM) תואמות של Compute Engine, שכל אחת מהן ממוקמת באחד מהתחומים הכלולים. לכל מכונה וירטואלית יש חומרה ייעודית לליבות CPU (במיוחד מעבדים וירטואליים (vCPU)) ולזיכרון – שמשפיעים על הביצועים של העבודה – ודיסק הפעלה – שבו מאוחסן קובץ אימג' של מערכת הפעלה והוראות להרצת העבודה.
במהלך זמן הריצה של עבודה, Batch יוצר ומוחק באופן אוטומטי משאבים שעומדים במפרט שלכם. כשיוצרים עבודה, מגדירים את המשאבים שלה על ידי ציון הפרטים הבאים:
משאבי מחשוב לכל משימה: אלא אם ערכי ברירת המחדל מספיקים, אתם צריכים לציין את משאבי המחשוב – vCPU, זיכרון ואחסון נוסף בדיסק האתחול (אם נדרש) – שנדרשים להפעלת כל משימה. מידע נוסף מופיע במאמר בנושא שדות של משאבי מחשוב לכל משימה (
computeResource).משאבי מכונות וירטואליות: אפשר גם לציין את המכונות הווירטואליות של העבודה – כמו סוג המכונה ומערכת ההפעלה, ומשאבים נוספים כמו יחידות GPU ונפחי אחסון – באמצעות השדות של מדיניות משאבי המכונות הווירטואליות (
instances[].policy) או השדה החלופיinstances[].instanceTemplate. אם לא מגדירים את השדות האלה (מה שלא אפשרי כשיוצרים משימה באמצעותGoogle Cloud המסוף), Batch מנסה לבחור באופן אוטומטי מכונות וירטואליות תואמות ולא מוסיף משאבים נוספים.
מספר המכונות הווירטואליות ומספר המשימות שאפשר להריץ בו-זמנית בכל מכונה וירטואלית משתנים בין עבודות שונות, בהתאם לתזמון המשימות ולדרישות החומרה שצוינו. אם מציינים שמשימות של ג'וב יפעלו IN_ORDER, לג'וב תהיה מכונה וירטואלית אחת ורק משימה אחת תפעל בכל פעם. אחרת, אם המשימות של העבודה מופעלות AS_SOON_AS_POSSIBLE, אפשר להעריך את מספר המכונות הווירטואליות ואת מספר המשימות שמופעלות בו-זמנית באמצעות הנוסחה הבאה:
\[{vmsPerJob}=\frac{taskCount}{parallelTasksPerVm}\]
הנוסחה הזו כוללת את הערכים הבאים:
- \({vmsPerJob}\): המספר המקסימלי של מכונות וירטואליות לעבודה. יכול להיות שמספר המכונות הווירטואליות שנוצרו עבור משימה יהיה קטן יותר – למשל, אם Batch צופה שיהיה מהיר יותר להריץ משימה על פחות משאבים מאשר לחכות ליותר משאבים. הערך הזה מוגבל גם על ידי המגבלות על מספר המכונות הווירטואליות בו-זמנית לכל משימה.
- \({taskCount}\): המספר הכולל של המשימות בעבודה, שמוגדר באמצעות השדה של מספר המשימות (
taskCount). \({parallelTasksPerVM}\): המספר המקסימלי של משימות שיכולות לפעול במכונה וירטואלית בו-זמנית.
הערך הזה נקבע לפי כל הקריטריונים הבאים:
הערך המינימלי הוא משימה אחת.
הערך המקסימלי הוא הקטן מבין 20 משימות, ואם הוא מוגדר, הערך של השדה 'מספר מקסימלי של משימות מקבילות לכל עבודה' (
parallelism).אם מוגדר הערך בשדה של מספר המשימות המקבילות המקסימלי לכל מכונה וירטואלית (
taskCountPerNode), המערכת תשתמש בו.אחרת, אם
taskCountPerNodeלא מוגדר, Batch מחלק את המספר הכולל של משאבי המחשוב – במיוחד מעבדים וירטואליים – לכל מכונה וירטואלית, לפי הכמות שנדרשת לכל משימה:\[{parallelTasksPerVm}=\frac{vcpusPerVm}{vcpusPerTask}\]
הנוסחה הזו כוללת את הערכים הבאים:
\({vcpusPerVm}\): המספר הכולל של מעבדים וירטואליים לכל מכונה וירטואלית, שנקבע לפי סוג המכונה של המכונות הווירטואליות של העבודה.
\({vcpusPerTask}\): מספר ה-vCPU לכל משימה, שנקבע על ידי המרת היחידות של השדה vCPU לכל משימה (
cpuMilli).
אפשרויות ליצירת משימות
במאמר יצירה והרצה של משימה בסיסית מוסברים העקרונות הבסיסיים, כולל איך להגדיר הפעלה באמצעות סקריפט או קובץ אימג' של קונטיינר, ואיך להגדיר משתני סביבה מוגדרים מראש ומשתני סביבה בהתאמה אישית.
אחרי שמבינים את העקרונות הבסיסיים ליצירת משימה, אפשר ליצור משימה שמשתמשת באחת או יותר מאפשרויות ההגדרה הנוספות הבאות:
כדי לשלוט בגישה למשרה:
במאמר שליטה בגישה לעבודה באמצעות חשבון שירות בהתאמה אישית מוסבר איך מציינים את חשבון השירות של עבודה, שמשפיע על המשאבים והאפליקציות שהמכונות הווירטואליות של העבודה יכולות לגשת אליהם. אם לא מציינים חשבון שירות בהתאמה אישית, כברירת מחדל העבודות משתמשות בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine.
במאמר סקירה כללית על רשתות מוסבר מתי ואיך אפשר להתאים אישית את הגדרת הרשת של משימה, כולל ציון הרשת של המשימה, חסימת חיבורים חיצוניים והגנה על נתונים ומשאבים באמצעות VPC Service Controls.
במאמר הגנה על מידע אישי רגיש באמצעות Secret Manager מוסבר איך להגדיר בצורה מאובטחת מידע אישי רגיש, כמו משתני סביבה מותאמים אישית ופרטי כניסה, באמצעות סודות של Secret Manager כדי לציין מידע מוצפן כשיוצרים משימה.
הגדרת אפשרויות נוספות למשרה:
במאמר הזה מוסבר איך להגדיר תקשורת בין משימות באמצעות ספריית MPI מוסבר איך להגדיר עבודה עם משימות שתלויות זו בזו ומתקשרות ביניהן במכונות וירטואליות שונות באמצעות ספריית Message Passing Interface (MPI). תרחיש נפוץ לשימוש ב-MPI הוא עומסי עבודה של מחשוב עתיר ביצועים (HPC) עם צימוד הדוק.
התאמה אישית של המשאבים שבהם מופעלת עבודה:
במאמר הגדרת משאבי משימה באמצעות תבנית של הגדרות מכונה מוסבר איך לציין תבנית של הגדרות מכונה ב-Compute Engine כדי להגדיר את משאבי המשימה כשיוצרים משימה. זוהי חלופה לציון משאבים של משימה ישירות באמצעות השדה
instances[].policy.במאמר שימוש במעבדי GPU לעיבוד משימה מוסבר איך להגדיר משימה שמשתמשת במעבד גרפי אחד או יותר (GPU). מקרים נפוצים לשימוש במשימות שמשתמשות ב-GPU כוללים עומסי עבודה של עיבוד נתונים אינטנסיבי או של למידת מכונה (ML).
במאמר שימוש בנפחי אחסון לעבודה מוסבר איך להגדיר עבודה שיכולה לגשת לנפח אחסון חיצוני אחד או יותר. אפשרויות האחסון כוללות דיסקים קשיחים חדשים או קיימים, כונני SSD מקומיים חדשים, קטגוריות קיימות של Cloud Storage ומערכת קבצים קיימת ברשת (NFS) כמו שיתוף קבצים ב-Filestore.
סקירה כללית של סביבת מערכת ההפעלה של מכונה וירטואלית כוללת סקירה כללית של המקרים שבהם אפשר להתאים אישית את סביבת מערכת ההפעלה (OS) של מכונה וירטואלית עבור משימה, כולל תמונת מערכת ההפעלה של המכונה הווירטואלית ודיסקים להפעלה של המשימה.
אופטימיזציה של היבטים שונים של משרה:
שיפור המעקב והניתוח:
במאמר כתיבת יומני משימות מוסבר איך להגדיר את קובצי ההפעלה של משימה כדי לכתוב יומני משימות. כתיבת יומני משימות מאפשרת לכם להציג מידע מותאם אישית ב-Cloud Logging, וכך לנתח ולפתור בעיות במשימות בקלות רבה יותר.
במאמר הגדרת אירועים של סטטוס בהתאמה אישית מוסבר איך להגדיר אירועים של סטטוס בהתאמה אישית עבור רכיבים להרצה של משימה. אירועי סטטוס בהתאמה אישית מאפשרים לכם לתאר אירועים חשובים שקורים לקבצים שניתנים להרצה, והם מופיעים כשצופים בהיסטוריה של אירועי הסטטוס של משימה. כך קל יותר לנתח ולפתור בעיות במשימות.
במאמר הפעלת עדכוני סטטוס מוסבר איך להגדיר משימה לשליחת עדכונים על הסטטוס שלה ב-Pub/Sub. אפשר גם לאחסן את העדכונים האלה בטבלה ב-BigQuery ולהריץ עליהם שאילתות. לפני שקוראים את המאמר הזה, צריך להגדיר את הפרויקט כדי לעקוב אחרי סטטוס העבודות באמצעות התראות Pub/Sub ו-BigQuery.
במאמר הפעלת מדדים של סוכן תפעול מוסבר איך להגדיר משימה להתקנה אוטומטית של סוכן תפעול. סוכן תפעול אוסף מדדים נוספים לגבי הביצועים והניצול של משאבי המשימה. מידע נוסף על הצגה ושימוש במדדי משאבים זמין במאמר מעקב אחרי משאבי משימות ואופטימיזציה שלהם באמצעות מדדים.
במאמר תזמון משימות שתלויות במשימות אחרות (גרסת Preview) מוסבר איך לציין משימה שלא תפעל עד שמשימה אחת או יותר של תלות קיימת תצליח או תיכשל. אם יש לכם עומס עבודה עם דרישות משאבים משתנות, אתם יכולים להוזיל את העלויות ולצמצם את השימוש במכסות על ידי הפרדה בין סוגי המכונות הווירטואליות שמשמשות לפעולות עם ביקוש נמוך (כמו הכנת נתונים) ולפעולות שדורשות הרבה משאבי מחשוב (כמו עיבוד נתונים).
במאמר אוטומציה של ניסיונות חוזרים של משימות מוסבר איך להגדיר ניסיון חוזר אוטומטי של משימות בעבודה אחרי כל הכשלים או אחרי כשלים ספציפיים. ניסיונות חוזרים אוטומטיים יכולים לעזור לצמצם את הקשיים בפתרון בעיות ואת משך הזמן הכולל שנדרש להרצת משימות שנתקלו בשגיאות זמניות. לדוגמה, אפשר להשתמש בניסיונות חוזרים אוטומטיים למשימה שפועלת במכונות וירטואליות מסוג Spot, שמספקות הנחות משמעותיות אבל לא תמיד זמינות ויכולות להיקטע בכל שלב.
במאמר הגבלת משך הפעולה באמצעות פסק זמן מוסבר איך להגביל את משך הזמן שבו מותר להפעיל משימה או קובץ הפעלה. מניעת זמני ריצה מוגזמים עשויה להפחית עלויות ועיכובים בלתי צפויים.
במאמר איך מוודאים שהמשאבים זמינים באמצעות הזמנות של מכונות וירטואליות מוסבר איך להגדיר עבודה שאפשר להריץ במכונות וירטואליות מוזמנות. שימוש במכונות וירטואליות מוזמנות מראש יכול לעזור לכם לצמצם את זמן התזמון של עבודה, למנוע שגיאות בזמינות המשאבים ולבצע אופטימיזציה של העלויות.
הפחתת זמן האחזור:
איך ממקמים מכונות וירטואליות באותו מיקום כדי לצמצם את זמן האחזור מסביר איך לצמצם את זמן האחזור ברשת בין המכונות הווירטואליות של משימה מסוימת, על ידי דרישה שהמכונות הווירטואליות ימוקמו קרוב זו לזו מבחינה פיזית. השיפור בביצועים יכול להיות שימושי במיוחד לעבודות שכוללות תקשורת תכופה ברשת בין מכונות וירטואליות, כמו משימות שמתקשרות באמצעות ספריות MPI.
במאמר שימוש בסטרימינג של תמונות מוסבר איך לשפר את זמן ההפעלה של משימות על ידי סטרימינג של תמונות של מאגרי תגים מ-Artifact Registry.
שימוש בשירותים נוספים כדי ליצור ולהפעיל משימות:
במאמר תזמור משימות באמצעות Workflows מוסבר איך להשתמש ב-Workflows כדי להריץ את המשימות של עבודה בסדר שאתם מגדירים באמצעות התחביר של Workflows.
במאמר תזמור משימות באמצעות Nextflow מוסבר איך להריץ משימת Batch דרך צינור Nextflow, שבו אפשר להשתמש כדי לתזמר תהליכי עבודה בביואינפורמטיקה.
במאמר Orchestrate jobs using dsub מוסבר איך להריץ משימה באצווה דרך פייפליין
dsub, שבו אפשר להשתמש כדי לתזמר תהליכי עבודה של עיבוד ברצף (batch processing) בשירותי Google Cloud .איך יוצרים ומריצים משימות Batch באמצעות Terraform ו-Cloud Scheduler Terraform מאפשר להקצות ולנהל תשתית על ידי ציון המצב המועדף בקובצי תצורה, שאפשר להתייחס אליהם כאל קוד ולאחסן אותם במערכות בקרת גרסאות כמו GitHub.
המאמרים הבאים
מידע על העקרונות הבסיסיים של יצירת משרות: