追蹤記錄檢視器工具
您可以使用 Trace Viewer 將剖析工作階段期間發生的事件以時間軸呈現。這項指標會顯示模型在系統不同部分 (例如主機 (CPU) 和加速器 (GPU 或 TPU)) 上執行的作業時間長度。這可讓您瞭解模型如何運用硬體資源、找出效能瓶頸,並調整模型以加快執行速度。追蹤記錄檢視器 UI 是根據 chrome://tracing
中使用的 UI 設計,因此必須使用 Chrome 瀏覽器。
支援平台
TPU:支援
GPU:支援
針對 GPU,Trace Viewer 會將每個 GPU 晶片和其中的串流,依時間軸分組事件;針對 TPU,則會依時間軸將事件分組為每個 TPU 晶片和核心。無論是哪種情況,Trace Viewer 也會針對加速器連線的主機 CPU,在每個執行緒的時間軸上顯示事件。
與時間軸互動
追蹤記錄檢視器提供多種工具和方法,可用於瀏覽及檢查時間軸:
- 導覽:您可以使用下列鍵盤快速鍵:
- W:放大。
- S:縮小。
- 答:向左平移。
- D:向右平移。
- 工具選取器:您可以按一下工具選取器中的工具,或使用對應的鍵盤快速鍵:
- 選取工具 (1 或 !): 按一下事件即可選取該事件,並在「Details」窗格中查看詳細資料。透過 Ctrl + 點選選取多個事件,即可查看摘要。
- 平移工具 (2 或 @):拖曳以水平或垂直方向移動時間軸。
- 縮放工具 (3 或 #):拖曳即可放大時間軸的特定區域。
- 時間工具 (4 或 $):拖曳即可標示時間間隔。系統會顯示標記區間的時間長度。您也可以使用 'm' 鍵標示所選項目,並決定其總時間長度。
- 放大選取的事件 (f):選取一或多個事件,然後按下「f」鍵,即可快速放大時間軸的該部分。這有助於您專注於特定訓練步驟。
處理大量追蹤記錄事件時,追蹤記錄檢視器會以串流模式運作。也就是說,當您在時間軸上拖曳及縮放時,系統會視需要載入資料,類似於地圖應用程式的運作方式。如果您以比資料載入速度更快的速度進行縮放,您可能會看到資料的低解析度呈現,直到資料載入完成為止。
追蹤記錄檢視器介面元件
以下是 Trace Viewer 的主要 UI 元件:
- 時間軸會水平顯示在頂端,顯示相對於追蹤開始時間的時間。
- 時間軸會依區段和軌道分類,標籤則位於左側垂直軸。每個區段代表一個處理元素 (例如裝置節點或主機執行緒),可展開或摺疊。每個部分都包含軌道,也就是特定活動的時程表。
- 事件是時間軸軌跡上彩色的矩形區塊,代表運算或中繼事件 (例如訓練步驟) 的持續時間。事件的顏色沒有特定意義。
- 詳細資料窗格會顯示時間軸窗格中所選事件的其他資訊,例如名稱、開始時間和持續時間。
常見的區段和追蹤
追蹤記錄檢視器提供下列區段和軌跡。
- 每個 TPU 節點一個區段,包含下列追蹤:
- XLA 模組:正在執行的 XLA 程式。
- XLA 運算:顯示在 TPU 核心上執行的 XLA HLO 運算。每個較高層級的架構運算 (例如 JAX、Tensorflow 或 PyTorch) 都會轉譯為一或多項 XLA 運算,然後編譯為在 TPU 上執行。點選 XLA 作業後,您會在圖表檢視器中看到作業的連結,以及作業的其他資訊,例如開始/停止時間、時間長度和來源堆疊追蹤 (如果架構和編譯器提供的話)。
- XLA TraceMe:使用者在程式碼中指定的註解,用來描述他們要追蹤的工作邏輯單位。即使您未新增任何註解,這裡仍可能會顯示資料;這些資料通常是由 XLA (例如障礙核心) 或 XProf 本身 (例如已捨棄的追蹤項目) 新增。
- 步驟:如果使用者程式或架構中已適當註解,則會顯示在該 TPU 核心上執行的訓練步驟持續時間。
- 架構運算:如果使用者程式或架構中適當加上註解,系統會顯示在 TPU 核心上執行的架構運算 (例如 JAX、Tensorflow 或 PyTorch)。
- 架構名稱範圍:針對每個架構作業,顯示堆疊追蹤的示意圖。為了簡化說明,這個軌跡只會顯示單一裝置。
- 原始碼:執行中原始碼的路徑 (如果設定檔中提供的話)。
- 標量單位:針對 TPU,在標量單位上執行的事件 (如果設定檔中提供)。
- TensorCore 同步標記:TPU 上的同步機制,如果設定檔中顯示此標記,則會顯示。
- 主機卸載:在主機記憶體和加速器記憶體之間非同步移動資料的作業。XLA 運算單元行通常會顯示對應的開始和停止運算,表示加速器已準備好進行資料傳輸 (例如,在傳輸期間將來源/目的地記憶體區域標示為「正在使用中」)。如果有多個並行執行的卸載作業,可能會有多個主機卸載列,因此追蹤記錄檢視器會同時顯示多個事件。
- 每個 Sparsecore 節點一個區段:部分 TPU 世代 (例如 除了密集運算 MXU 單元外,TPU v5p 和 TPU v6e 還配備一或多個 SparseCore 單元;與這些核心相關聯的模組、運算和 TraceMe 會顯示在此章節中。
- 每個 GPU 節點一個區段,包含下列追蹤:
- XLA 模組、架構運算、架構名稱範圍、步驟、原始碼。這些都與 TPU 部分類似。
- 每個串流一個軌道,且串流名稱也包含在串流上執行的作業類型資訊 (Memcpy、Compute 等)。
- XLA TraceMe 不支援 GPU。
- XLA 運算會顯示在 GPU 部分,但目前這類運算是從串流資料衍生,因此不一定準確。因此,它們無法完全考量 GPU 的執行模式,因為 XLA 運算可能會以 N:M 比率對應至在不同串流上執行的實際核心,並在硬體中的不同 SM 上動態排程多個串流。
- 在主機 CPU 上執行的每個元件 (例如一個執行緒池) 都有一個區段,在執行緒池的情況下,每個執行緒都有一個追蹤。如果在設定檔收集期間啟用 Python 追蹤,也會在這裡看到這些追蹤。
請注意,只有 TPU 的 XLA 運算和 GPU 的串流資料會直接在收集到的設定檔中建立基礎;所有其他行都是「衍生行」,涉及編譯器提供的選用「側帶」資訊、選用的使用者註解,以及/或 XProf 套用的推論。因此,這些衍生線可能會或不會顯示在特定設定檔中。
其他功能
- 您可以使用「尋找事件」搜尋列,搜尋特定事件名稱。目前這項功能只會在螢幕上顯示的時間視窗內搜尋,而非完整追蹤記錄。
- 流程事件:按一下頂端列中的「流程事件」按鈕即可啟用這個選項,新增可視化資料,將一個執行緒或行中的事件連結至另一個執行緒行中的事件。舉例來說,從主機上的運算作業繪製箭頭,該運算作業會為加速器排隊或啟動工作,然後指向執行該工作的加速器上的運算作業。XProf 會結合使用者註解、內建的推論法,以及從不同元件 (例如CUPTI 驅動程式、核心啟動 ID、TPU 執行階段資訊等)。
- 按一下 XLA 運算,即可在詳細資料窗格中查看其他資訊。例如,它會連結至 Graph Viewer 工具中的 op。它也可能會提供原始碼和/或 Python 堆疊追蹤的索引,以及導致產生此 XLA 操作的架構操作等 (如果在設定檔中提供)。它也可能會顯示 FLOPS (由運算子執行的浮點運算次數) 和運算子存取的位元組;這類資訊是在編譯期間從 XLA 靜態取得,而非從設定檔取得的執行階段資訊。