הגדרת פסק זמן למשימות בעבודות

כברירת מחדל, כל משימה פועלת למשך 10 דקות לכל היותר: אפשר לשנות את משך הזמן הזה לזמן קצר יותר או לזמן ארוך יותר, עד 168 שעות (7 ימים). במשימות שמשתמשות במעבדי GPU, זמן הקצוב לתפוגה המקסימלי הוא 12 שעות (גרסת טרום-השקה).

אתם יכולים להגדיר את זמן הקצוב לתפוגה של המשימה, כפי שמתואר בדף הזה. אין זמן קצוב מפורש לתפוגה של ביצוע משימה: כשכל המשימות מסתיימות, ביצוע המשימה מסתיים.

היחידות מציינות משך זמן. אפשר לציין את משך הזמן הקצוב כמספר שלם בשניות, בדקות או בשעות. לדוגמה, כדי להגדיר את משך הזמן הקצוב ל-10 דקות ו-5 שניות, מציינים את הערך 605 שניות.

אם הפעלתם ניסיונות חוזרים במשימה, הגדרת הזמן הקצוב לתפוגה חלה על כל ניסיון של משימה. אם הניסיון להשלים את המשימה לא יסתיים בפרק הזמן הזה, הוא ייפסק. ככל שמשימה פועלת זמן רב יותר, כך גדל הסיכוי שהיא תיתקל בבעיות שיגרמו לה להיכשל, כמו כשלים בתלות במורד הזרם, שגיאות של אין זיכרון פנוי (OOM) או בעיות בתשתית. מומלץ להפעיל ניסיונות חוזרים לכל המשימות, במיוחד למשימות עם זמן ריצה ארוך.

אירועי תחזוקה

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

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

בכל פעם שמשימה מתחילה ומסיימת את ההעברה, Cloud Run מדפיס הודעה ביומן.

בנוסף, אם רוצים לעקוב אחרי אירועי תחזוקה או לטפל בהם בדרך מסוימת, אפשר לתפוס את האות SIGTSTP, שנשלח 10 שניות לפני העברת המשימה. אחרי ההעברה, המשימה מקבלת אות SIGCONT מיד אחרי שהיא מופעלת מחדש.

הדוגמה הבאה ב-Go היא פונקציה שקולטת את האותות האלה ומדפיסה רשומה ביומן:

func testSignals() {
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGTSTP, syscall.SIGCONT)
    go func() {
        for  {
            sig := <-sigs
            log.Printf("Got Signal: %v", sig)
        }
    }()
 }
 

משימות GPU ממושכות

במקרים מסוימים, כמו משימות GPU ארוכות, אירועי תחזוקה עלולים לגרום להפקעה או לסיום של מכונות בלי מיגרציה פעילה.

כדי לטפל באירועים האלה בצורה חלקה, אפשרות אחת היא לתפוס את האות SIGTERM, ש-Cloud Run שולח 10 שניות לפני סיום המשימה, כדי לשמור את ההתקדמות על ידי כתיבת נקודות ביקורת סופיות ושמירת המצב באחסון מתמיד. למידע נוסף, קראו את המאמר תכנון משימות GPU עמידות לטווח ארוך.

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

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

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להגדרת משימות ב-Cloud Run, אתם צריכים לבקש מהאדמין לתת לכם את התפקידים הבאים ב-IAM:

רשימה של תפקידים והרשאות ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם המשימה ב-Cloud Run מתממשקת עם ממשקי API שלGoogle Cloud , כמו ספריות הלקוח ב-Cloud, עיינו במדריך להגדרת זהות השירות. מידע נוסף על הקצאת תפקידים זמין במאמרים הרשאות פריסה וניהול הגישה.

הגדרת זמן קצוב לתפוגה של משימה

כדי לציין את זמן הקצוב לתפוגה של משימה ב-Cloud Run:

המסוף

  1. נכנסים לדף Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. בתפריט הניווט של Cloud Run, לוחצים על Jobs:

    1. אם אתם יוצרים משימה חדשה, לוחצים על Deploy container כדי למלא את דף הגדרות המשימה הראשוני.

    2. אם אתם מגדירים משימה קיימת, בוחרים את המשימה ולוחצים על View and edit job configuration.

  3. לוחצים על Containers, Connections, Security כדי להרחיב את דף מאפייני המשימה.

  4. בשדה Task timeout, מציינים את משך הזמן המקסימלי למשימות של המשימה הנוכחית, ובוחרים Time unit. אפשר לציין את משך הזמן הקצוב רק כערך של מספר שלם בשניות, דקות או שעות. לדוגמה, כדי להגדיר משך זמן של 10 דקות ו-5 שניות, בשדה Task timeout מציינים 605 ובוחרים באפשרות second בשדה Time unit.

  5. לוחצים על יצירה או על עדכון.

gcloud

  1. למשימה שאתם יוצרים:

    gcloud run jobs create JOB_NAME --image IMAGE_URL --task-timeout TIMEOUT

    החלפה

    • ‫JOB_NAME בשם של המשימה.
    • ‫IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמה us-docker.pkg.dev/cloudrun/container/job:latest.
    • ‫TIMEOUT עם משך הזמן המקסימלי למשימות של ה-job, תוך ציון משך הזמן והיחידות: לדוגמה, 10m5s מציין עשר דקות וחמש שניות.
  2. למשרה שאתם מעדכנים:

    gcloud run jobs update JOB_NAME --task-timeout TIMEOUT

YAML

  1. אם אתם יוצרים משימה חדשה, דלגו על השלב הזה. אם אתם מעדכנים משימה קיימת, הורידו את הגדרת ה-YAML שלה:

    gcloud run jobs describe JOB --format export > job.yaml
  2. מעדכנים את המאפיין timeoutSeconds::

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
              timeoutSeconds: TIMEOUT

    מחליפים את:

    • ‫JOB_NAME בשם של המשימה.
    • ‫IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמה us-docker.pkg.dev/cloudrun/container/job:latest.
    • ‫TIMEOUT עם משך הזמן המקסימלי למשימות, כולל ציון של משך הזמן והיחידות. אפשר לציין את הזמן רק כערך של מספר שלם בשניות, בדקות או בשעות. לדוגמה, כדי להגדיר משך זמן של 10 דקות ו-5 שניות, מציינים 605.

    אפשר גם לציין פרטי הגדרה נוספים, כמו משתני סביבה או מגבלות זיכרון.

  3. מעדכנים את הגדרת המשימה הקיימת:

    gcloud run jobs replace job.yaml

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

מוסיפים את הקוד הבא למשאב google_cloud_run_v2_job בתצורה של Terraform:
resource "google_cloud_run_v2_job" "default" {
  name     = "cloud-run-job-timeout"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    template {
      timeout = "3.500s"

      containers {
        image = "us-docker.pkg.dev/cloudrun/container/job:latest"
      }
    }
  }
}

הצגת ההגדרות של הזמן הקצוב לתפוגה של משימות

כדי לראות את ההגדרות הנוכחיות של זמן הקצוב לתפוגה של המשימה ב-Cloud Run, אתם יכולים להשתמש במסוף Google Cloud או ב-Google Cloud CLI:

המסוף

  1. נכנסים לדף Cloud Run jobs במסוף Google Cloud :

    כניסה לדף Cloud Run jobs

  2. לוחצים על המשימה כדי לפתוח את הדף Job details.

  3. לוחצים על הצגה ועריכה של הגדרות המשימה.

  4. מאתרים את הגדרת הזמן הקצוב לתפוגה של המשימה בפרטי ההגדרה.

gcloud

  1. מריצים את הפקודה הבאה:

    gcloud run jobs describe JOB
  2. מאתרים את הגדרת הזמן הקצוב לתפוגה של המשימה בהגדרות שהוחזרו.