לוחות בקרה של מעקב ורישום ביומן ב-Cloud TPU

מאגר לוחות הבקרה למעקב ולניפוי באגים ב-Cloud TPU מכיל את כל התשתית והלוגיקה שנדרשות למעקב ולניפוי באגים בתהליכי עבודה שפועלים במכונות TPU VM. הוא דורש Terraform, כלי בקוד פתוח שמשתמש בקובצי הגדרות כדי להגדיר ולנהל תשתית Google Cloud.

לוח הבקרה למעקב

בלוח הבקרה של המעקב מוצגים המדדים הבאים של Cloud TPU:

  • ניצול המעבד (CPU) ב-TPU worker: cpu/utilization
  • השימוש בזיכרון על ידי TPU VM: memory/usage
  • מספר הבייטים שהתקבלו ברשת על ידי Pod: ‏ network/received_bytes_count
  • מספר הבייטים שנשלחו על ידי Pod ברשת: network/sent_bytes_count
  • משך ההמתנה של TensorCore בשבב TPU: ‏ tpu/tensorcore/idle_duration

מערכת Cloud Monitoring יוצרת באופן אוטומטי נתוני מדדים. כדי לראות את לוח הבקרה של המעקב, נכנסים למסוף Google Cloud , בוחרים באפשרות Monitoring ואז באפשרות Dashboards. ברשימת לוחות הבקרה, בוחרים באפשרות GCE - TPU Monitoring Dashboard. לוח הבקרה של Cloud TPU Monitoring מורכב מכמה חלוניות, וכל אחת מהן מציגה נתוני מדדים. בכל מדד של Cloud TPU, לוח הבקרה מציג את ערכי המדד הנוכחיים, את הממוצע ואת הערכים המקסימליים בחלוניות נפרדות. בחלוניות 'ממוצע' ו'מקסימום' אפשר לזהות מכונות TPU VM חריגות כדי לבדוק אותן לעומק.

אפשר גם לראות את מדדי ה-TPU באמצעות Metrics Explorer במסוף Cloud Monitoring Google Cloud . מידע נוסף מופיע במאמר מעקב אחרי מכונות וירטואליות של Cloud TPU.

לוח הבקרה של רישום ביומן

לוח הבקרה של הרישום ביומן מחולק לשני קטעים:

  1. מדדי יומן: מוצגת ספירה של רשומות של דוח קריסות שנאספו עבור כל עובד של מכונה וירטואלית של TPU.
  2. חלונית היומנים: מוצגות בה כל הרשומות של דוח קריסות, עם עמודות של חומרה, חותמת זמן וסיכום של הרשומה. אפשר לסנן את חלונית היומנים הזו לפי מחרוזת או לפי תוויות של עובדי TPU, כמו node_id ו-worker_id. לדוגמה, הוספת המסנן resource.labels.node_id:"testing" מציגה את כל רשומות המעקב שנאספו עבור העובד של TPU VM עם המזהה שהוגדר כ-'testing'.

שירות Cloud Logging אוסף רשומות ביומן שנוצרות על ידי שירותי Google Cloud , שירותים של צד שלישי, מסגרות ML והקוד שלכם. אפשר להתקין את חבילת cloud-tpu-diagnostics PyPi כדי לכתוב מעקב אחר מחסנית (stack trace) של Python כשמתרחשת תקלה או חריגה, או כשעומס העבודה לא מגיב. מידע נוסף זמין במאמר ניפוי באגים במכונות וירטואליות של Cloud TPU.

כדי להציג את לוח הבקרה של הרישום ביומן, נכנסים למסוף Google Cloud , בוחרים באפשרות Monitoring ואז באפשרות Dashboards. ברשימת מרכזי הבקרה, בוחרים באפשרות GCE - TPU Logging Dashboard.

הגדרת מרכזי הבקרה של המדדים והרישום ביומן

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

שכפול מאגר מרכז הבקרה

אפשר לשכפל את המאגר ישירות ממאגר GitHub של Cloud TPU Monitoring and Debugging או משורת הפקודה:

git clone https://github.com/google/cloud-tpu-monitoring-debugging.git

התקנת Terraform

  1. מתקינים את Terraform במחשב המקומי.
  2. מריצים את הפקודה terraform init כדי להוסיף את יישומי הפלאגין הנדרשים וליצור את הספרייה .terraform.
  3. מריצים את הפקודה terraform init -upgrade כדי להתקין את העדכונים הזמינים.

הגדרת הרשאות לניטור ולרישום ביומן

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

יצירת קטגוריה של Cloud Storage

יוצרים קטגוריה של Cloud Storage לאחסון קובצי מצב של Terraform. אפשר גם להשתמש בקטגוריה קיימת של Cloud Storage. שימוש בקטגוריה של Cloud Storage מבטיח שכמה משתמשים יוכלו להריץ את Terraform בו-זמנית ולגשת לאותה תשתית.

  1. יוצרים את הקטגוריה של Cloud Storage ב-Cloud Shell:

    gcloud storage buckets create gs://${GCS_BUCKET_NAME}
    
  2. כדי לשמור את היסטוריית הפריסות, צריך להפעיל את התכונה 'ניהול גרסאות של אובייקטים'. הפעלת התכונה 'ניהול גרסאות של אובייקטים' מייקרת את עלויות האחסון, אבל אפשר לצמצם אותן על ידי קביעת הגדרות אישיות בשביל ניהול מחזור חיים של אובייקטים כדי למחוק גרסאות ישנות של מצבים.

    gcloud storage buckets update gs://${GCS_BUCKET_NAME} --versioning
    

הפעלת Terraform

מריצים את הפקודה terraform init בתוך הספרייה gcp_resources/gce של המאגר. הפקודה מבקשת להזין את השם של קטגוריה של Cloud Storage לאחסון קובצי המצב של Terraform.

פריסת לוחות הבקרה של המעקב והרישום ביומן

מריצים את הפקודה terraform apply בתוך הספרייה gcp_resources/gce כדי לפרוס את לוחות הבקרה של המעקב והרישום בפרויקט Google Cloud . הפקודה תבקש מכם לציין ערכים למשתנים הבאים:

  • var.monitoring_dashboard_config
  • var.project_name
  • var.stack_trace_bucket_config

כדי לפרוס רק את לוח הבקרה של המעקב, מריצים את הפקודות terraform init ו-terraform apply בתוך הספרייה gcp_resources/gce/dashboard/monitoring_dashboard. באופן דומה, מריצים את הפקודות האלה בספרייה gcp_resources/gce/dashboard/logging_dashboard כדי לפרוס רק את מרכז הבקרה של הרישום ביומן.

הגדרות לדוגמה

כשמריצים את הפקודה terraform apply, מערכת Terraform מבקשת ערכים של כמה משתני תצורה. בקטע הזה מובאות כמה דוגמאות להגדרות שאפשר להשתמש בהן. בכל דוגמה מוצגת הפלטה שמוצג על ידי הפקודה terraform apply, וגם ערכים מוצעים לכל משתנה תצורה באותיות מודגשות. הקלט צריך להיות בפורמט JSON, מוקף בסוגריים מסולסלים ({}).

דוגמה 1

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

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
      "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": <the number of outliers to show on dashboard, default to 10 if not set>
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {}

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

דוגמה 2

בדוגמה הזו, לוח הבקרה מוגדר להצגת 5 מכונות וירטואליות של TPU שהן חריגות.

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
        "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": &lt;number of outliers to show on dashboard, default to 10 if not set&gt;
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {"outlier_count":5}

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

דוגמה 3

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

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
      "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": &ltnumber of outliers to show on dashboard, default to 10 if not set&gt;
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {"node_prefix":"test"}

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

דוגמה 4

ההגדרה הזו יוצרת לוח בקרה שמציג 5 מכונות וירטואליות חריגות, עם הקידומת test לשמות הצמתים שנוצרו על ידי לוח הבקרה.

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
        "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": "number of outliers to show on dashboard, default to 10 if not set"
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {"node_prefix":"test", "outlier_count":5}

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

דוגמה 5

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

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
    "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": "number of outliers to show on dashboard, default to 10 if not set"
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {}

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {"bucket_name":"stack_trace_log_bucket"}


דוגמה 6

בדוגמה הזו מוגדרת קטגוריה של Cloud Storage עם תקופת שמירה של 20 ימים.

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
        "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": "number of outliers to show on dashboard, default to 10 if not set"
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {}

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {"bucket_name":"stack_trace_log_bucket", "retention_days":20}