在 Cloud TPU VM 上分析模型

您可以使用剖析功能,在 Cloud TPU 上改善模型的訓練效能。您可以使用 TensorBoard 和 Cloud TPU TensorBoard 外掛程式剖析模型。

如要進一步瞭解如何搭配支援的架構使用 TensorBoard,請參閱下列文件:

開始分析模型訓練

模型在訓練時,請開啟另一個終端機視窗或 Cloud Shell。請按照下列步驟開始分析模型訓練作業。

  1. 在新的視窗或 Shell 中,透過連接埠轉送連線至 TPU VM。

    gcloud compute tpus tpu-vm ssh your-vm --zone=us-central2-b --ssh-flag="-4 -L 9001:localhost:9001"

    通訊埠轉送可讓本機瀏覽器與在 TPU VM 上執行的 TensorBoard 伺服器進行通訊。

  2. 安裝 Cloud TPU TensorBoard 外掛程式。

    在 TPU VM 中執行下列指令:

     pip3 install --upgrade "cloud-tpu-profiler>=2.3.0"
     pip3 install tensorflow
     pip3 install tensorboard_plugin_profile
  3. 啟動 TensorBoard 伺服器

    請執行 TensorBoard,並在 TPU VM 上建立記錄目錄 (logdir),讓 TensorBoard 能夠寫入剖析資料。請使用 --logdir 標記指定記錄目錄。例如:

    export PATH=$HOME/.local/bin:$PATH
    mkdir log-directory
    TPU_LOAD_LIBRARY=0 tensorboard --logdir log-directory --port 9001

TensorBoard 會啟動網路伺服器並顯示其網址:

Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.3.0 at http://localhost:9001 (Press CTRL+C to quit)

開啟網頁瀏覽器,前往 TensorBoard 輸出中顯示的網址。在 TensorBoard 頁面右上方的下拉式選單中,選取「Profile」。可用的剖析工具清單會顯示在左側欄的「tools」下拉式選單中。

TensorBoard 剖析頁面

在 TPU VM 上擷取設定檔

  1. 選取「擷取設定檔」按鈕。
  2. 選取「IP 位址」圓形按鈕。
  3. Profile Service URL 欄位中輸入 HOSTNAME:6000
  4. 選取「擷取」按鈕。

使用 TensorBoard 擷取設定檔

使用 TensorBoard 查看設定檔資料

擷取設定檔後,TensorBoard 會顯示總覽頁面。左側窗格會顯示可用的剖析工具清單。

TensorBoard 總覽頁面

設定檔

擷取部分模型資料後,系統就會顯示「Profile」分頁。您可能需要按一下 TensorBoard 頁面上的「重新整理」按鈕。等有可用的資料後,按一下「Profile」分頁標籤,畫面就會顯示一系列工具協助您進行效能分析。您可以使用下列任一工具分析模型。

設定檔總覽頁面

總覽頁面 (overview_page) 在「Profile」(設定檔)頁面底下,提供頂層概要檢視,讓您瞭解擷取運算執行時的模型效能情形。這個頁面會顯示所有 TPU 的匯總總覽,以及整體輸入管道分析情況。您也可以在「Host」下拉式選單中選取個別的 TPU。

總覽頁面會在以下面板中顯示相關資料:

TensorBoard 設定檔總覽

  • Performance summary (效能摘要)

    • FLOPS 使用率:TPU 矩陣單元的使用率百分比
  • Top ten TensorFlow operations on TPU (TPU 上前 10 個 TensorFlow 運算):顯示耗用了大部分時間的 TensorFlow 運算。每列都會顯示運算的自我時間 (所有運算佔用的時間百分比)、累計時間、類別、名稱及達到的 FLOPS 率。

  • Run environment (執行環境)

    • 使用的主機數量
    • 使用的 TPU 類型
    • TPU 核心數量

輸入管道分析工具

輸入管道分析工具可提供有關效能結果的深入分析。這項工具能在您的程式受到輸入限制時立即通知您,並逐步協助您進行裝置及主機端分析和偵錯,以找出產生瓶頸的管道階段。

請參閱輸入管道效能指南,進一步瞭解如何最佳化管道效能。

輸入管道

TensorFlow 程序讀取檔案中的資料時,讀取程序會分為多個串聯的資料處理階段。一個階段的輸出內容會成為下一個階段的輸入內容。這種讀取機制稱為「輸入管道」

由檔案讀取記錄的一般管道具有下列階段:

  1. 檔案讀取
  2. 檔案預處理 (選用)
  3. 將檔案從主機傳輸至裝置

效率不彰的輸入管道,可能大幅減緩應用程式速度。應用程式將大部分時間用於輸入管道,就是所謂的受到輸入限制。您可以利用輸入管道分析工具來瞭解輸入管道效能低落的部分。

輸入管道資訊主頁

如要開啟輸入管道分析工具,請先選取「Profile」(設定檔),然後從「Tools」(工具) 下拉式選單選取「input_pipeline_analyzer」

資訊主頁會顯示裝置端和主機端的分析詳細資料。

裝置端分析

本節會顯示裝置步驟時間的詳細資料。

  • 裝置步驟時間統計資料
  • 等待輸入資料的裝置步驟時間百分比

主機端分析

本節將主機端分析的詳細資料分為多個類別:

  • 將傳輸至裝置的資料加入佇列:在資料傳輸至裝置之前,將資料放置於饋入佇列所花費的時間。
  • 資料預先處理:預先處理作業 (例如圖片解壓縮) 所花費的時間。
  • 預先從檔案讀取資料:讀取檔案所花費的時間,包括快取、預先擷取和交錯。
  • 隨需由檔案讀取資料:在沒有快取、預先擷取及交錯的情況下,由檔案讀取資料所花費的時間。
  • 其他資料讀取或處理作業:使用 tf.data 以外的其他輸入相關作業所花費的時間。

TensorBoard 主機端分析詳細資料

如要查看按執行時間細分的各個輸入運算及其類別的統計資料,請展開「Show Input Op statistics」部分。

這時會出現類似下圖的來源資料表:

TensorBoard 輸入操作統計資料

每個表格項目都包含下列資訊:

  • Input Op:顯示輸入運算的 TensorFlow 運算名稱。
  • 計數:顯示剖析期間執行運算的執行個體總數。
  • 總時間 (毫秒):顯示在各個作業例項上花費的時間總和。
  • 總時間百分比:顯示某運算花費的總時間佔輸入處理運算總時間的百分比。
  • 總自我時間 (以毫秒為單位):顯示函式所有例項的累積時間。自我時間是計算函式主體內部花費的時間所得的結果,不包含在其呼叫的任何函式中花費的時間。舉例來說,Iterator::PaddedBatch::Filter::ForeverRepeat::Map 是由 Iterator::PaddedBatch::Filter 呼叫,因此前者的總自我時間不含後者的總自我時間。
  • 總自我時間百分比:以輸入處理總時間的比例顯示總自我時間。
  • 類別:顯示輸入運算的處理類別。

運算設定檔

運算設定檔是一種 Cloud TPU 工具,可顯示剖析期間執行 XLA 運算的效能統計資料。作業設定檔會顯示:

  • 您應用程式使用 Cloud TPU 的情況,並按類別顯示各項運算耗費的時間百分比,以及 TPU FLOPS 使用率百分比。
  • 最耗時的運算。這類運算可能會是適合您進行最佳化的目標。
  • 個別運算的詳細資料,包括形狀、填充及使用該運算的運算式。

您可以使用運算設定檔找出最佳化目標。舉例來說,您可以使用運算設定檔找出花費最長執行時間的 XLA 運算,並查看其耗用的 TPU FLOPS 有多少。

使用運算設定檔

運算設定檔工具包含 XLA 運算的效能統計資料。您可以在 TensorBoard 中查看 Op Profile 資料,方法是按一下畫面頂端的「Profile」分頁標籤,然後從「Tools」下拉式選單中選取「op_profile」。您會看到類似下圖的顯示畫面:

TensorBoard 運算子設定檔工具

  • 總覽:顯示 Cloud TPU 使用率,並提供最佳化建議。
  • 控制面板:包含控制項,可讓您設定表格中顯示的運算數量、要顯示哪些運算,以及運算的排序方式。
  • 運算表:列出與 XLA 運算相關聯的前幾項 TensorFlow 運算類別。這些運算會依 Cloud TPU 使用率百分比排序。
  • 運算詳細資料卡:顯示運算詳細資料,當您在表格中指向運算時,這些詳細資料就會顯示。這些詳細資料包括 FLOPS 使用率、使用該運算的運算式,以及運算版面配置 (固定)。

XLA 運算表

運算表會按 Cloud TPU 使用率,從高到低依序列出 XLA 運算類別。表格會顯示時間百分比、運算類別名稱、相關聯的 TensorFlow 運算名稱,以及該類別的 FLOPS 使用率百分比。如要顯示 (或隱藏) 特定類別前 10 個最耗時的 XLA 運算,請按一下表格中類別名稱旁邊的三角形。

TensorBoard XLA 運算資料表

  • 時間:顯示該類別中所有運算花費時間的總百分比。您可點選以展開特定項目,查看個別運算花費時間的分析資料。
  • 前十大 Ops:類別名稱旁邊的切換按鈕,可顯示或隱藏類別中前 10 個最耗時的運算。如果運算清單中有 fusion 運算項目,您可以將其展開來查看其中包含的非 fusion 元素運算。
  • TensorFlow Op:顯示與 XLA 運算相關的 TensorFlow 運算名稱。
  • FLOPS:顯示 FLOPS 使用率,這是指測量的 FLOPS (以 Cloud TPU 尖峰 FLOPS 的百分比表示)。FLOPS 使用率百分比越高,運算的運算速度越快。表格儲存格採用色彩編碼:綠色代表高 FLOPS 使用率 (良好),紅色代表低 FLOPS 使用率 (不良)。

運算詳細資料卡

選取表格項目時,系統會顯示資訊卡,提供更多有關 XLA 運算或運算類別的詳細資料。一般資訊卡外觀如下所示:

TensorBoard 運算子詳細資料資訊卡

  • 名稱類別:顯示醒目顯示的 XLA 運算名稱和類別。
  • FLOPS 使用率:顯示 FLOPS 使用率在可能的總 FLOPS 中佔多少百分比。
  • 運算式:顯示內含該運算的 XLA 運算式
  • 記憶體使用率:顯示程式尖峰記憶體用量的百分比。
  • 版面配置:(僅限卷積運算) 顯示張量的形狀和版面配置,包括 XLA 編譯器執行的任何填充作業說明。

解讀結果

針對卷積運算,TPU FLOPS 使用率低可能是下列其中一或兩個原因造成:

  • 填充 (使用一部分的矩陣單元)
  • 卷積運算有記憶體限制

本節將針對 FLOP 使用率偏低的模型,解讀其中的部分效能指標。在本例中,輸出融合卷積佔據了大部分的執行時間。許多向量或純量運算的 FLOPS 使用率偏低。

最佳化這類設定檔的策略之一,就是將向量或純量運算轉換為卷積運算。

在下方這個例子中,%convolution.399 的 FLOPS 和記憶體使用率都比前一個例子的 %convolution.340 相關數值低。

TensorBoard 卷積運算

在這個範例中,批次大小會填充至 128,特徵大小則會填充至 8。在這種情況下,只有 5% 的矩陣單位能有效使用。利用率的計算方式為 (((batch_time * num_of_features) / padding_size ) / num_of_cores)。您可以比較本例的 FLOPS 和前一個例子的 %convolution.340 (不使用填充)。

追蹤記錄檢視工具

追蹤記錄檢視器是一種 Cloud TPU 效能分析工具,可在「Profile」(設定檔)頁面中找到。這項工具使用 Chrome 追蹤事件剖析檢視器,因此只能在 Chrome 瀏覽器中運作。

追蹤記錄檢視器內含時間軸,顯示下列內容:

  • TensorFlow 模型執行運算的持續時間。
  • 由哪個部分的系統執行運算 (TPU 或主機機器)。一般來說,主機執行饋入運算,以便預處理訓練資料並傳輸至 TPU,由 TPU 執行實際的模型訓練。

追蹤記錄檢視器可協助您找出模型之中的效能問題,然後採取步驟加以解決。例如您可於高階找出究竟是饋入或模型訓練花費大部分時間。如果繼續深入分析,您可找出執行時間最長的 TensorFlow 運算。

追蹤記錄檢視器只能針對每個 Cloud TPU 顯示 100 萬筆事件。如果您需要評估更多事件,請改用串流追蹤記錄檢視器

追蹤記錄檢視器介面

如要開啟追蹤記錄檢視器,請前往 TensorBoard,按一下畫面頂端的「Profile」分頁標籤,然後從「Tools」下拉式選單中選擇「trace_viewer」。檢視器會顯示您最近的執行作業資訊:

TensorBoard 追蹤記錄檢視器

此畫面包含下列主要元素 (在先前的螢幕截圖中以數字標示):

  • 「執行作業」下拉式選單:包含您已擷取追蹤記錄資訊的所有執行作業。預設檢視畫面為您最近的執行,您也可開啟下拉式選單來選取其他執行作業。
  • 「工具」下拉式選單:選取其他剖析工具。
  • 主機下拉式選單:選取包含 Cloud TPU 集的主機。
  • 時間軸窗格:顯示 Cloud TPU 和主機在一段時間內執行的運算。
  • 詳細資料窗格:顯示在「時間軸」窗格中選取的作業的其他相關詳細資料。

以下更深入檢視時間軸窗格:

TensorBoard 追蹤記錄檢視器時間軸窗格

時間軸窗格包含下列元素:

  • 頂端列:包含各種輔助控制項。
  • 時間軸:顯示相對於追蹤開始的時間。
  • 區段和追蹤記錄標籤:每個區段都有多項追蹤記錄,您可點選左側的三角形,以便展開及收合區段。系統中每個處理元素都有一個區段。
  • 工具選取器:包含與追蹤記錄檢視器互動的各種工具。
  • 事件:顯示運算執行的持續時間,或中繼事件的持續時間,例如訓練步驟。
  • 垂直分頁列:這個分頁列對 Cloud TPU 來說沒有太大的實用價值。這個分頁列屬於 Chrome 追蹤記錄檢視器工具的一部分,這類通用檢視器可用於各種效能分析工作。

區段及追蹤

追蹤記錄檢視器包含下列區段:

  • 每個 TPU 節點一個區段,並標示 TPU 晶片數量及晶片內 TPU 節點數量,例如「Chip 2: TPU Core 1」(晶片 2:TPU 核心 1)。每個 TPU 節點區段都包含下列追蹤:
    • 步驟:顯示在 TPU 上執行的訓練步驟持續時間。
    • TensorFlow 運算:顯示在 TPU 上執行的 TensorFlow 運算。
    • XLA 運算:顯示在 TPU 上執行的 XLA 運算。(每個運算都會轉譯為一項或多項 XLA 運算)。XLA 編譯器會將這些 XLA 運算轉譯為程式碼,於 TPU 執行。
  • 在主機 CPU 執行的執行緒有一個區段,標示為「Host Threads」(主機執行緒)。本區段的每個 CPU 執行緒都有一個追蹤。注意:您可以忽略區段標籤旁顯示的資訊。

時間軸工具選取器

您可以透過 TensorBoard 中的時間軸工具選取器與時間軸視圖互動。按一下時間軸工具,即可啟用及醒目顯示特定工具。如要移動時間軸工具選取器,請按一下最上方的虛線區域,然後將選取器拖曳至您想要的位置。

請按以下方式操作時間軸工具:

選取工具
按一下事件即可選取該事件,或拖曳以選取多個事件。選取事件的額外資訊 (名稱、開始時間及持續時間) 將顯示於詳細資料窗格。

平移工具
拖曳以水平及垂直方向平移時間軸視圖。

縮放工具
延著水平 (時間) 軸往上拖曳可放大,往下拖曳可縮小。滑鼠游標的水平位置,決定縮放進行的中心點。

注意:如果放開滑鼠按鈕後縮放工具仍處於作用中狀態,請按一下時間軸檢視畫面來停用縮放工具。

時間工具
以水平方向拖曳,標示時間間隔,間隔長度會出現在時間軸。如欲調整間隔,請拖曳間隔末端。如欲清除間隔,請點選時間軸視圖內部的任何位置。

如果您選取其他工具,間隔仍會維持標示。

記憶體檢視器

記憶體檢視器可讓您以視覺化方式呈現程式的尖峰記憶體用量和記憶體用量趨勢。

記憶體檢視器使用者介面如下所示:

TensorBoard 記憶體檢視器

  • 主機 下拉式選單:選取要視覺化的 TPU 主機和 XLA 高階最佳化工具 (HLO) 模組。
  • 記憶體總覽:顯示在沒有填充的情況下,尖峰記憶體的分配情形和大小。
  • 工作區域圖表:顯示尖峰記憶體用量,以及程式的記憶體用量趨勢圖。將滑鼠游標懸停在其中一個緩衝區圖的緩衝區上,即可在緩衝區分配資訊卡中顯示其他資訊。
  • 緩衝區圖表:兩張圖表顯示尖峰記憶體用量時的分配情形。將滑鼠游標懸停在其中一個緩衝區圖的緩衝區上,就會在緩衝區詳細資訊卡中顯示其他資訊。
  • 緩衝區分配詳細資訊卡:顯示緩衝區的分配詳細資訊。

記憶體總覽面板

記憶體總覽 (頂端) 面板顯示模組名稱,以及總緩衝區分配大小達到最大值的尖峰記憶體分配情形,並且列出未填充的尖峰分配大小以供比較。

TensorBoard 記憶體檢視器總覽面板

工作區域圖表

此圖顯示尖峰記憶體用量,以及程式的記憶體用量趨勢圖。垂直線代表程式的尖峰記憶體使用率。這張圖表會顯示程式是否能夠融入可用的全域記憶體空間。

TensorBoard 記憶體檢視器工作區域圖表

圖表中的每個點都代表 XLA HLO 程式中的「程式點」。這條線會顯示程式記憶體用量隨時間的變化情形。

與緩衝區圖表元素互動

將滑鼠游標懸停在緩衝區圖中的緩衝區上,工作區域圖就會顯示顯示緩衝區生命週期的水平線。

與 TensorBoard 記憶體檢視器緩衝區圖表互動

水平線的粗細代表緩衝區對比尖峰記憶體分配的相對幅度。線條的長度代表緩衝區的生命週期。

緩衝區圖表

兩張圖顯示尖峰使用點的記憶體使用情形分析。

尖峰用量時的 TensorBoard 記憶體檢視器緩衝區圖表

  • 依程式順序:依據緩衝區在程式執行期間作用的順序由左至右顯示。

  • 依大小排序:依據緩衝區在程式執行期間作用的大小降冪顯示。

緩衝區分配詳細資訊卡

將滑鼠游標懸停在其中一個緩衝區圖表中顯示的緩衝區上方,就會顯示緩衝區分配詳細資料卡。一般資訊卡外觀如下所示:

TensorBoard 記憶體檢視器緩衝區分配詳細資料

  • 名稱:XLA 運算的名稱。
  • 類別:運算類別。
  • Size:緩衝區分配大小 (包含填充)。
  • 未填充的大小:未填充的緩衝區分配大小。
  • Expansion:填充緩衝區對比未填充大小的相對幅度。
  • 額外記憶體:顯示填充使用了多少額外記憶體。
  • 形狀:說明 N 維陣列的排名、大小和資料類型。
  • TensorFlow 運算名稱:顯示與緩衝區分配相關的 TensorFlow 運算名稱。
  • 分配類型:指出緩衝區分配類別:參數、輸出、執行緒本機和暫時 (例如 fusion 內部的緩衝區分配)。

記憶體不足錯誤

如果您執行模型時收到「記憶體不足」錯誤,請按照本文件中的指南擷取設定檔。請等到指令碼訓練模型後再啟動分析工具。剖析輸出內容可協助您瞭解導致錯誤的原因。