מעקב באמצעות tpu-info CLI
tpu-info CLI הוא כלי לזיהוי מכשירי Cloud TPU ולקריאת מדדי זמן ריצה מהספרייה libtpu, כולל שימוש בזיכרון ומחזור פעילות. הוא תומך בצילומי מצב סטטיים חד-פעמיים ובסטרימינג בשידור חי כדי לעקוב אחרי מדדים באופן רציף.
התקנה
מתקינים את הגרסה האחרונה באמצעות pip:
pip install tpu-info
אפשרות אחרת היא להתקין את tpu-info מהמקור:
pip install git+https://github.com/google/cloud-accelerator-diagnostics/#subdirectory=tpu_info
אם כבר התקנתם גרסה של tpu-info, ודאו שהיא תואמת לסביבה שלכם ושלא חסרים בה מדדים ותכונות.
מידע נוסף זמין במאמר תכונות או מדדים חסרים.
גישה למדדים רגילים של LibTPU באמצעות ה-CLI
כדי לראות את מדדי ברירת המחדל של tpu-info באמצעות ה-CLI, מריצים את הפקודה הבאה:
tpu-info
הפלט אמור להיראות כך:
TPU Chips
| Chip | Type | Devices | PID |
|--------------|--------------|---------|--------|
| /dev/vfio/0 | TPU v6e chip | 1 | 1022 |
| /dev/vfio/1 | TPU v6e chip | 1 | 1022 |
| /dev/vfio/2 | TPU v6e chip | 1 | 1022 |
| /dev/vfio/3 | TPU v6e chip | 1 | 1022 |
TPU Runtime Utilization
| Chip | HBM Usage (GiB) | Duty cycle |
|--------|--------------------------|------------|
| 8 | 17.26 GiB / 31.25 GiB | 100.00% |
| 9 | 9.26 GiB / 31.25 GiB | 100.00% |
| 12 | 9.26 GiB / 31.25 GiB | 100.00% |
| 13 | 9.26 GiB / 31.25 GiB | 100.00% |
TensorCore Utilization
| Core ID | TensorCore Utilization |
|---------|------------------------|
| 0 | 15.17% |
| 1 | 14.62% |
| 2 | 14.68% |
| 3 | 15.14% |
TPU Buffer Transfer Latency
| Buffer Size | P50 | P90 | P95 | P999 |
|--------------|--------------|--------------|--------------|--------------|
| 8MB+ | 18264.03 us | 33263.06 us | 35990.98 us | 53997.32 us |
TPU Inbound Buffer Transfer Latency
| Buffer Size | P50 | P90 | P95 | P999 |
|--------------|--------------|--------------|--------------|--------------|
| 8MB+ | 18316.95 us | 32857.03 us | 36501.59 us | 58854.54 us |
TPU Host Compute Latency
| Buffer Size | P50 | P90 | P95 | P999 |
|--------------|--------------|--------------|--------------|--------------|
| 8MB+ | 678.33 us | 2611.93 us | 5258.30 us | 11083.23 us |
TPU gRPC TCP Minimum RTT
| P50 | P90 | P95 | P999 |
|----------|----------|----------|----------|
| 35.99 us | 52.15 us | 53.83 us | 55.51 us |
TPU gRPC TCP Delivery Rate
| P50 | P90 | P95 | P999 |
|---------------|---------------|---------------|---------------|
| 12305.96 Mbps | 18367.10 Mbps | 24872.11 Mbps | 44841.55 Mbps |
Usage
כדי לראות את נתוני הניצול הנוכחיים של TPU, צריך להפעיל עומס עבודה של TPU עם מסגרת נתמכת של למידת מכונה, כמו JAX או PyTorch/XLA.tpu-info אפשר להריץ את הפקודה tpu-info במסוף עם הדגלים הבאים.
עיבוד
משתמשים בדגל --process או -p כדי להציג מידע על התהליכים שפועלים ב-TPU.
$ tpu-info --process
הפלט אמור להיראות כך:
TPU Process Info
| Chip | PID | Process Name |
|-------------|--------|--------------|
| /dev/vfio/0 | 799657 | python3 |
| /dev/vfio/1 | 799657 | python3 |
| /dev/vfio/2 | 799657 | python3 |
| /dev/vfio/3 | 799657 | python3 |
| /dev/vfio/4 | 799657 | python3 |
| /dev/vfio/5 | 799657 | python3 |
| /dev/vfio/6 | 799657 | python3 |
| /dev/vfio/7 | 799657 | python3 |
מדד
משתמשים בדגל --metric כדי להציג מדדים ספציפיים. אפשר לציין כמה מדדים ולהפריד ביניהם ברווחים. דוגמאות למדדים נפוצים שנתמכים:
hbm_usageduty_cycle_percenttensorcore_utilizationbuffer_transfer_latencyhost_to_device_transfer_latencydevice_to_host_transfer_latencycollective_e2e_latency
$ tpu-info --metric duty_cycle_percent hbm_usage
הפלט אמור להיראות כך:
TPU Duty Cycle
| Core ID | Duty Cycle (%) |
|---------|----------------|
| 0 | 100.00% |
| 1 | 100.00% |
| 2 | 100.00% |
| 3 | 100.00% |
| 4 | 100.00% |
| 5 | 100.00% |
| 6 | 100.00% |
| 7 | 100.00% |
TPU HBM Usage
| Chip | HBM Usage (GiB) |
|--------|-----------------------|
| 0 | 29.50 GiB / 31.25 GiB |
| 1 | 21.50 GiB / 31.25 GiB |
| 2 | 21.50 GiB / 31.25 GiB |
| 3 | 21.50 GiB / 31.25 GiB |
| 4 | 21.50 GiB / 31.25 GiB |
| 5 | 21.50 GiB / 31.25 GiB |
| 6 | 21.50 GiB / 31.25 GiB |
| 7 | 21.50 GiB / 31.25 GiB |
רשימת מדדים
משתמשים בדגל --list_metrics כדי להציג את כל המדדים הנתמכים שאפשר לבקש באמצעות הדגל --metric.
$ tpu-info --list_metrics
הפלט אמור להיראות כך:
╭─ Supported Metrics ─────────────────────────────────────────────────────────────────────────────╮
│ grpc_tcp_min_rtt │
│ host_to_device_transfer_latency │
│ grpc_tcp_delivery_rate │
│ inbound_buffer_transfer_latency │
│ host_compute_latency │
│ buffer_transfer_latency │
│ collective_e2e_latency │
│ device_to_host_transfer_latency │
│ hbm_usage │
│ duty_cycle_percent │
│ tensorcore_utilization │
╰─────────────────────────────────────────────────────────────────────────────────────────────────╯
מדדים של סטרימינג
במצב סטרימינג, הנתונים הסטטיסטיים של השימוש מתעדכנים ומוצגים מעת לעת. כדי להזרים את המדדים של LibTPU, מוסיפים את הדגל --streaming לפקודה tpu-info. משתמשים בדגל --rate כדי לשלוט בקצב של הסטרימינג בשניות.
כדי להזרים את מדדי ברירת המחדל של tpu-info באמצעות ה-CLI, משתמשים בפקודה הבאה:
# Refresh metrics every 2 seconds
tpu-info --streaming --rate 2
הפלט אמור להיראות כך:
Refresh rate: 0.1s
Last update: 2025-07-24 11:00:59 UTC
Libtpu version: 0.0.19.dev20250721+nightly
Accelerator type: v6e
TPU Chips
| Chip | Type | Devices | PID |
|--------------|--------------|---------|--------|
| /dev/vfio/0 | TPU v6e chip | 1 | 1022 |
| /dev/vfio/1 | TPU v6e chip | 1 | 1022 |
| /dev/vfio/2 | TPU v6e chip | 1 | 1022 |
| /dev/vfio/3 | TPU v6e chip | 1 | 1022 |
TPU Runtime Utilization
| Chip | HBM Usage (GiB) | Duty cycle |
|--------|--------------------------|------------|
| 8 | 17.26 GiB / 31.25 GiB | 100.00% |
| 9 | 9.26 GiB / 31.25 GiB | 100.00% |
| 12 | 9.26 GiB / 31.25 GiB | 100.00% |
| 13 | 9.26 GiB / 31.25 GiB | 100.00% |
TensorCore Utilization
| Core ID | TensorCore Utilization |
|---------|------------------------|
| 0 | 15.17% |
| 1 | 14.62% |
| 2 | 14.68% |
| 3 | 15.14% |
TPU Buffer Transfer Latency
| Buffer Size | P50 | P90 | P95 | P999 |
|--------------|--------------|--------------|--------------|--------------|
| 8MB+ | 18264.03 us | 33263.06 us | 35990.98 us | 53997.32 us |
TPU Inbound Buffer Transfer Latency
| Buffer Size | P50 | P90 | P95 | P999 |
|--------------|--------------|--------------|--------------|--------------|
| 8MB+ | 18316.95 us | 32857.03 us | 36501.59 us | 58854.54 us |
TPU Host Compute Latency
| Buffer Size | P50 | P90 | P95 | P999 |
|--------------|--------------|--------------|--------------|--------------|
| 8MB+ | 678.33 us | 2611.93 us | 5258.30 us | 11083.23 us |
TPU gRPC TCP Minimum RTT
| P50 | P90 | P95 | P999 |
|----------|----------|----------|----------|
| 35.99 us | 52.15 us | 53.83 us | 55.51 us |
TPU gRPC TCP Delivery Rate
| P50 | P90 | P95 | P999 |
|---------------|---------------|---------------|---------------|
| 12305.96 Mbps | 18367.10 Mbps | 24872.11 Mbps | 44841.55 Mbps |
מדדי TPU-Z
TPU-Z הוא כלי לטלמטריה ולניפוי באגים ב-TPU. הוא מספק מידע מפורט על סטטוס זמן הריצה של כל ליבות ה-TPU שמצורפות למארח. הפונקציונליות מסופקת דרך המודול tpuz, שהוא חלק מהמודול libtpu.sdk ב-Python SDK libtpu. המודול מספק תמונת מצב של הסטטוס של כל ליבה.
תרחיש השימוש העיקרי ב-TPU-Z הוא אבחון של תקיעות או חסימות בנקודות מתות בעומסי עבודה מבוזרים של TPU. אתם יכולים לשלוח שאילתות לשירות TPU-Z במארחים כדי לתעד את המצב של כל ליבה, להשוות בין מוני התוכניות, מיקומי ה-HLO ומזהי ההרצה בכל הליבות כדי לזהות אנומליות.
כדי להציג את מדדי TPU-Z באמצעות ה-CLI, מריצים את הפקודה הבאה:
tpu-info --metric core_state
tpu-info --metric sequencer_state
tpu-info --metric sequencer_state_detailed
tpu-info --metric queued_program
הפלט צריך לכלול את הטבלאות core_state, sequencer_state, sequencer_state_detailed ו-queued_programs.
Core State Information
בטבלה Core State Information (core_state) מוצג מידע על ליבות של צ'יפ נתון. לכל שבב TPU יש ליבה אחת או שתי ליבות, בהתאם לדור.
| שדה | תיאור | ערכים לדוגמה |
|---|---|---|
| מזהה צ'יפ | המזהה של הצ'יפ שאליו שייכת הליבה. | 0 |
| מזהה ליבה גלובלי | המזהה הייחודי של הליבה בתוך מערכת ה-TPU כולה. | 1 |
| סוג הליבה | סוג ליבת ה-TPU. | "TPU_CORE_TYPE_TENSOR_CORE""TPU_CORE_TYPE_SPARSE_CORE" |
| השרת xdb פועל | ההגדרה הזו מציינת אם שרת Accelerator Debugger (XDB) פועל בליבת TPU ספציפית. | True |
הפלט אמור להיראות כמו בטבלה הבאה:
Core Information
| Chip ID | Global Core ID | Core Type | xdb Server |
|---------|----------------|-----------------------------|------------|
| 0 | 0 | TPU_CORE_TYPE_TENSOR_CORE | True |
| 0 | 1 | TPU_CORE_TYPE_SPARSE_CORE | True |
| 1 | 2 | TPU_CORE_TYPE_SPARSE_CORE | False |
| 1 | 3 | TPU_CORE_TYPE_SPARSE_CORE | False |
| 2 | 4 | TPU_CORE_TYPE_SPARSE_CORE | True |
| 2 | 5 | TPU_CORE_TYPE_SPARSE_CORE | True |
מידע על מצב ה-Sequencer
בטבלה Sequencer State Information (sequencer_state) (מידע על מצב הרצף) מוצג מידע על מצב הרצף בליבה. רכיב sequencer הוא יחידת בקרה בתוך ליבת TPU שאחראית לאחזור, לפענוח ולתיאום של ביצוע ההוראות. יכולים להיות כמה רכיבי תזמון לליבה אחת.
| מדד | תיאור | ערכים לדוגמה |
|---|---|---|
| מזהה צ'יפ | המזהה של הצ'יפ שאליו שייכת הליבה. | 0 |
| מזהה ליבה גלובלי | המזהה הייחודי של הליבה בתוך מערכת ה-TPU כולה. | 1 |
| מונה תוכניות | כתובת הזיכרון של ההוראה שתבוצע על ידי הרכיב לניהול רצף הפעולות. | 15390 |
| Tracemark | מזהה ההפעלה של התוכנית הנוכחית או האחרונה. אם השדה לא רלוונטי, הוא לא יופיע. | 2147483647 |
| מזהה תוכנית | המזהה שמשויך למופע ספציפי של תוכנית שמופעלת לביצוע בליבת TPU. | 3230481660274331500 |
| מזהה ההרצה | מזהה ההפעלה שמשויך לתוכנית. | 1150 |
| סוג הרצף | סוג רכיב ההפעלה ברצף. | "TPU_SEQUENCER_TYPE_SPARSE_CORE_SEQUENCER""TPU_SEQUENCER_TYPE_SPARSE_CORE_TILE_EXECUTE_CORE_SEQUENCER" |
הפלט אמור להיראות כמו בטבלה הבאה:
Sequencer Info
| Chip ID | Global Core | Program Counter:Tag | Tracemark | Program ID | Run ID | Sequence Type |
|---------|-------------|---------------------|------------|------------|--------|-------------------------------|
| 0 | 0 | 760:1 | 2147483647 | -5.75e17 | 1150 | TPU_SEQ_SPARSE_CORE_SEQUENCER |
| 0 | 1 | 9:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
| 0 | 1 | 0:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
| 1 | 2 | 9:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
| 1 | 3 | 0:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
| 1 | 3 | 9:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
| 1 | 3 | 0:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
| 2 | 4 | 9:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
| 2 | 4 | 0:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
| 2 | 4 | 9:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
| 2 | 5 | 9:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
| 2 | 5 | 0:0 | 0 | -1 | -1 | TPU_SEQ_SPARSE_TILE_EXECUTE |
מידע על מצב הרצף (מפורט)
בטבלה Sequencer State Information (detailed) (פרטי מצב של רצף) (sequencer_state_detailed) מוצג כל המידע מהטבלה Sequencer State Information (פרטי מצב של רצף) (sequencer_state), יחד עם המדדים הנוספים הבאים:
| מדד | תיאור | ערכים לדוגמה |
|---|---|---|
| פרטי HLO | מידע מפורט על HLO, אם יש. | [] |
| מזהה הרצת תוכנית בתור | מזהה ההפעלה של התוכנית הזו בתור. | 81 |
| מזהה השקת התוכנית שהוכנסה לתור | מזהה ההפעלה של התוכנית הזו בתור. | 1394130914 |
| שגיאת ליבה | מכילה את כל הודעות השגיאה של ליבת המערכת הזו. אם אין שגיאות, השדה הזה לא מופיע. | "Failed to parse launch id: 0xdcf36153" |
| מיקום HLO | נתוני מיקום של כלי האופטימיזציה ברמה גבוהה (HLO). | "no HLO mapping""HLO: fusion.11; HLO computation: main.126_spmd" |
הפלט אמור להיראות כמו בטבלה הבאה:
Sequencer States (Detailed)
| Chip ID | Global Core ID | Program Counter | Tracemark | Program ID | Run ID | Sequence Type | Core Error | HLO Location | HLO Details |
|---------|----------------|-----------------|------------|----------------------|--------|------------------------------------------|----------------------------------------------------------|----------------|-------------|
| 0 | 0 | 760 | 2147483647 | -5752110712385440928 | 114 | TPU_SEQUENCER_TYPE_TENSOR_CORE_SEQUENCER | Failed to parse launch id: 0xdcf36109 | no HLO mapping | [] |
| 0 | 1 | 9 | 0 | -1 | -1 | TPU_SEQUENCER_TYPE_SPARSE_CORE_SEQUENCER | Compiler metadata or executable fingerprint not found. | None | None |
| 0 | 1 | 0 | 0 | -1 | -1 | TPU_SEQUENCER_TYPE_SPARSE_CORE_TILE_EXE… | Compiler metadata or executable fingerprint not found. | None | None |
| 0 | 1 | 0 | 0 | -1 | -1 | TPU_SEQUENCER_TYPE_SPARSE_CORE_TILE_EXE… | Compiler metadata or executable fingerprint not found. | None | None |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
תוכניות בתור
בטבלה Queued programs (תוכניות בהמתנה) (queued_programs) מופיעה רשימת התוכניות
שממתינות להפעלה.
| מדד | תיאור | ערכים לדוגמה |
|---|---|---|
| מזהה צ'יפ | המזהה של הצ'יפ שאליו שייכת הליבה. | 0 |
| Global Core | המזהה הייחודי של הליבה בתוך מערכת ה-TPU כולה. | 1 |
| מונה תוכניות:תג | כתובת הזיכרון של ההוראה שתבוצע על ידי הרכיב לניהול רצף הפעולות. | 15390 |
| Tracemark | מזהה ההפעלה של התוכנית הנוכחית או האחרונה. אם השדה לא רלוונטי, הוא לא יופיע. | 2147483647 |
| מזהה תוכנית | המזהה שמשויך למופע ספציפי של תוכנית שמופעלת לביצוע בליבת TPU. | 3230481660274331500 |
| מזהה ההרצה | מזהה ההפעלה שמשויך לתוכנית. | 1150 |
| סוג הרצף | סוג רכיב ההפעלה ברצף. | "\ufffdU\ufffd4j\u7c6e\ufffd\ufffd{\u0017\ufffd\ufffdHHV\ufffdD\ufffde\uff" |
Queued Programs
| Chip ID | Global Core | Program Counter:Tag | Tracemark | Program ID | Run ID | Sequence Type |
|---------|-------------|---------------------|-----------|-------------|--------|------------------------------------|
| 0 | 0 | 10712385440928 | 1220 | -5.75e17 | 1220 | \ufffdU\\...ufffd{\\u0017\\...\\ |
| 0 | 1 | 31435440272417 | 1530 | -1 | 1530 | \ufff4j\\...\\ufffd{\\u0017\\...\\ |
| 0 | 1 | 10230672051156 | 1410 | -1 | 1410 | \ufffde\\...\\ufffd{\\u0017\\...\\ |
| ... | ... | ... | ... | ... | ... | ... |
תכונות או מדדים חסרים
אם אתם לא מצליחים לראות חלק מהתכונות או מהמדדים, הסיבה הכי נפוצה לכך היא גרסה לא עדכנית של libtpu. התכונות והמדדים ב-tpu-info כלולים במהדורות של libtpu, ובגרסאות מיושנות יכול להיות שחסרים מדדים ותכונות חדשים.
כדי לוודא שהגרסה של tpu-info תואמת לסביבה שלכם, משתמשים בדגל --version או -v:
$ tpu-info --version
בדוגמה הבאה מוצג פלט של סביבה תואמת:
- tpu-info version: 0.5.1
- libtpu version: 0.0.18
- accelerator type: v6e
בדוגמה הבאה מוצג פלט של סביבה לא תואמת:
- tpu-info version: 0.5.1
- libtpu version: N/A (incompatible environment)
- accelerator type: N/A (incompatible environment)
אם אתם משתמשים בגרסה ישנה, אתם צריכים לעדכן לגרסה האחרונה של libtpu:
pip install --upgrade libtpu