ניפוי באגים במכונות וירטואליות של Cloud TPU
במאמר הזה מוסבר איך להשתמש בחבילת cloud-tpu-diagnostics PyPI כדי ליצור עקבות מחסנית לתהליכים שפועלים במכונות וירטואליות של TPU. החבילה הזו יוצרת dump של עקבות Python כשמתרחשת תקלה, למשל תקלות פילוח, חריגות של נקודה צפה או חריגות של פעולה לא חוקית. בנוסף, הוא גם אוסף מעת לעת עקבות מחסנית כדי לעזור לכם לנפות באגים במצבים שבהם התוכנית לא מגיבה.
כדי להשתמש בחבילת cloud-tpu-diagnostics PyPI, צריך להריץ את הפקודה pip install cloud-tpu-diagnostics בכל מכונות ה-TPU הווירטואליות. אפשר לעשות את זה באמצעות פקודה אחת של gcloud compute tpus tpu-vm ssh. לדוגמה:
gcloud compute tpus tpu-vm ssh you-tpu-name \ --zone=your-zone \ --project=your-project-name \ --worker=all \ --command="pip install cloud-tpu-diagnostics"
בנוסף, צריך להוסיף את הקוד הבא לסקריפטים שפועלים בכל מכונות ה-TPU הווירטואליות.
from cloud_tpu_diagnostics import diagnostic
from cloud_tpu_diagnostics.configuration import debug_configuration
from cloud_tpu_diagnostics.configuration import diagnostic_configuration
from cloud_tpu_diagnostics.configuration import stack_trace_configuration
stack_trace_config = stack_trace_configuration.StackTraceConfig(
collect_stack_trace = True,
stack_trace_to_cloud = True)
debug_config = debug_configuration.DebugConfig(
stack_trace_config = stack_trace_config)
diagnostic_config = diagnostic_configuration.DiagnosticConfig(
debug_config = debug_config)
כברירת מחדל, נתוני מעקב אחר מחסנית (stack trace) נאספים כל 10 דקות. אפשר לשנות את משך הזמן בין שני אירועים של איסוף דוח קריסות ל-5 דקות, למשל:
stack_trace_config = stack_trace_configuration.StackTraceConfig(
collect_stack_trace = True,
stack_trace_to_cloud = True,
stack_trace_interval_seconds = 300)
כדי לאסוף את עקבות המחסנית באופן תקופתי, עוטפים את השיטה הראשית בתג diagnose():
with diagnostic.diagnose(diagnostic_config):
run_main()
ההגדרה הזו מתחילה לאסוף עקבות מחסנית בתוך ספריית /tmp/debugging בכל מכונת TPU VM. יש סוכן שפועל בכל מכונות ה-VM של TPU ומעלה את העקבות מספרייה זמנית אל Cloud Logging.