擷取設定檔

如要使用 Xprof,您必須先在模型工作負載程式碼中啟用設定檔擷取功能。擷取設定檔的方式有兩種,詳情如下。

以程式輔助方式擷取

使用程式輔助擷取功能時,您需要註解模型程式碼,指定要在程式碼中的哪個位置擷取設定檔。通常使用者會在訓練迴圈的幾個步驟中收集設定檔,或在模型中設定特定區塊的設定檔。在不同的架構 JAX、Pytorch XLA 和 Tensorflow 中,您可以透過不同方式擷取追蹤記錄,包括以 API 為基礎啟動/停止追蹤,或以內容管理員為基礎。

隨選擷取 (又稱手動擷取)

如果您想在執行期間臨時擷取設定檔,或是在未啟用程式輔助設定檔擷取的時段擷取設定檔,請使用隨選設定檔擷取功能。通常是在執行期間發現模型指標有問題,並想在該時間點擷取一段時間的設定檔,以診斷問題時使用。

如要啟用隨選設定檔擷取功能,您仍須在程式碼中啟動 xprof 伺服器。舉例來說,在 JAX 中啟用 jax.profiler.start_server 會在 ML 工作負載上啟動 xprof 伺服器,監聽隨選擷取觸發程序,以便開始擷取設定檔。

每次執行作業的多個工作階段

擷取設定檔時,您可以擷取單一執行的設定檔做為多個工作階段。假設您在訓練執行期間擷取步驟 1 至 3 的設定檔,稍後再擷取步驟 8 至 10 的設定檔。因此這些設定檔適用於相同執行階段,但步驟 1 到 3 的第一次擷取作業會是 session1,步驟 8 到 10 的第二次擷取作業會是 session2。每次執行都會有不同的日期戳記,用來表示不同的工作階段。您可以透過程式輔助、隨選或兩者混合的方式,在不同工作階段中擷取設定檔。

在 Google Cloud 上使用 XProf 和 Tensorboard

在 Google Cloud 上,建議使用 cloud-diagnostics-xprof 程式庫,以便輕鬆代管 Tensorboard 和 XProf。在 GCP 上使用這個程式庫的主要優點包括:

  • 輕鬆設定和封裝 XProf 和 TensorBoard 依附元件;
  • 將設定檔儲存在 GCS 中,這有助於長期保留設定檔和進行執行後分析 (研究人員完成執行後,系統會刪除擷取的本機設定檔);
  • 在 GCE VM 或 GKE Pod 上佈建 TensorBoard,即可快速載入大型設定檔和多個設定檔,並可根據使用者對載入速度和費用的需求變更機器類型;
  • 建立連結,輕鬆分享設定檔,並與團隊成員和 Google 工程師協作;
  • 在 GKE 和 GCE 上,更輕鬆地依需求分析工作負載,並選擇執行工作負載的任何主機來擷取設定檔。

特定架構的操作說明

請參閱下列不同架構的說明,瞭解如何啟用程式輔助設定檔和隨選設定檔:

疑難排解

GPU 剖析

在 GPU 上執行的程式應會產生追蹤記錄,並顯示在追蹤記錄檢視器頂端的 GPU 串流附近。如果只看到主機追蹤記錄,請檢查程式記錄和/或輸出內容,確認是否出現下列錯誤訊息。

如果收到類似下列內容的錯誤訊息:Could not load dynamic library 'libcupti.so.10.1'
完整錯誤訊息:

W external/org_tensorflow/tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcupti.so.10.1'; dlerror: libcupti.so.10.1: cannot open shared object file: No such file or directory
2020-06-12 13:19:59.822799: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1422] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI could not be loaded or symbol could not be found.

libcupti.so 的路徑新增至環境變數 LD_LIBRARY_PATH。 (請嘗試使用 locate libcupti.so 尋找路徑)。例如:

export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH

如果完成上述步驟後仍收到 Could not load dynamic library 訊息,請檢查追蹤記錄檢視器是否仍顯示 GPU 追蹤記錄。即使一切正常運作,有時仍會出現這則訊息,因為系統會在多個位置尋找 libcupti 程式庫。

如果收到類似下列內容的錯誤訊息:failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
完整錯誤訊息:

E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1445] function cupti_interface_->EnableCallback( 0 , subscriber_, CUPTI_CB_DOMAIN_DRIVER_API, cbid)failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
2020-06-12 14:31:54.097791: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1487] function cupti_interface_->ActivityDisable(activity)failed with error CUPTI_ERROR_NOT_INITIALIZED

執行下列指令 (注意:這需要重新啟動):

echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now

詳情請參閱 NVIDIA 針對這項錯誤提供的說明文件

在遠端電腦上進行剖析

如果要剖析的程式是在遠端電腦上執行,其中一個方法是在遠端電腦上執行上述所有指令 (特別是在遠端電腦上啟動 XProf 伺服器),然後使用 SSH 本機通訊埠轉送功能,從本機電腦存取 XProf 網頁使用者介面。使用下列 SSH 指令,將預設的 XProf 通訊埠 8791 從本機轉送至遠端電腦:

ssh -L 8791:localhost:8791 <remote server address>

如果您使用 Google Cloud:

$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791

安裝多個 TensorBoard

如果啟動 TensorBoard 失敗,並出現類似下列的錯誤:ValueError: Duplicate plugins for name projector

通常是因為安裝了兩個版本的 TensorBoard 和/或 TensorFlow (例如 tensorflowtf-nightlytensorboardtb-nightly pip 套件都包含 TensorBoard)。解除安裝單一 pip 套件可能會導致 tensorboard 可執行檔遭到移除,之後很難取代,因此可能需要解除安裝所有項目,然後重新安裝單一版本:

pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof

解決權限問題

在 Docker 環境或 Linux 中使用 CUDA® Toolkit 執行剖析時,您可能會遇到與 CUPTI 權限不足相關的問題 (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES)。請參閱 NVIDIA 開發人員文件,進一步瞭解如何在 Linux 上解決這些問題。

如要解決 Docker 環境中的 CUPTI 權限問題,請執行

docker run option '--privileged=true'