用 TensorBoard 於偵錯和分析 Amazon 中的訓練任務 SageMaker - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

用 TensorBoard 於偵錯和分析 Amazon 中的訓練任務 SageMaker

Amazon TensorBoard 是 Amazon SageMaker 的一種功能 SageMaker ,它帶來的可視化工TensorBoard具 SageMaker,與 SageMaker 培訓和域集成。它提供透過SageMaker 網域管理 AWS 帳戶和屬於該帳戶的使用者的選項,讓網域使用者透過 Amazon S3 的適當許可存取 TensorBoard 資料,以及協助網域使用者使用 TensorBoard 視覺化外掛程式執行模型偵錯任務。 SageMaker 使用 TensorBoard SageMaker Data Manager 外掛程式進行擴充,網域使用者可以在 TensorBoard應用程式內的一個位置存取許多訓練工作。

注意

此功能適用於使用 PyTorch 或 TensorFlow 架構訓練和偵錯深度學習模型。

對於資料科學家

訓練大型模型可能會遇到科學問題,這些問題需要資料科學家對其進行偵錯和解決,以改善模型收斂並穩定梯度下降程序。

當您遇到模型訓練問題時 (例如遺失值未收斂、權重和梯度消失或爆炸),您需要存取張量資料,以深入探索並分析模型參數、純量和任何自訂指標。 SageMaker 搭配使用時 TensorBoard,您可以視覺化從訓練工作擷取的模型輸出張量。當您試驗不同的模型、多個訓練執行和模型超參數時,您可以在中選取多個訓練工作, TensorBoard 並在一個位置進行比較。

針對管理員

如果您是 AWS 帳戶或SageMaker 網域的管理員,則可以透過 SageMaker 主控台或網域中的 TensorBoard 登陸頁面管理 TensorBoard 應用程式使用者。 SageMaker每個域用戶都可以訪問他們自己的 TensorBoard 應用程序給予授予的權限。身為 SageMaker 網域管理員和網域使用者,您可以根據您擁有的權限等級來建立和刪除 TensorBoard 應用程式。

支援的架構和 AWS 區域

此功能支援下列機器學習架構和 AWS 區域。

架構
  • PyTorch

  • TensorFlow

  • Hugging Face 轉換器

AWS 區域
  • 美國東部 (維吉尼亞北部) (us-east-1)

  • 美國東部 (俄亥俄) (us-east-2)

  • 美國西部 (奧勒岡) (us-west-2)

  • 歐洲 (法蘭克福) (eu-central-1)

  • 歐洲 (愛爾蘭) (eu-west-1)

注意

Amazon SageMaker 在 TensorBoard 執行個ml.r5.large體上執行 TensorBoard 應用程式,並在 SageMaker 免費方案或功能的免費試用期後產生費用。如需詳細資訊,請參閱 Amazon SageMaker 定價

必要條件

下列清單顯示開始使用的先決條 SageMaker 件 TensorBoard。

  • 在您的 AWS 帳戶中使用 Amazon VPC 設定的 SageMaker 網域。

    如需設定網域的指示,請參閱使用快速設定登入 Amazon SageMaker 網域。您還需要為個別使用者新增網域使用者設定檔,才能存取 TensorBoard on SageMaker。如需詳細資訊,請參閱新增和移除 SageMaker 網域使用者設定檔

  • 下列清單是 TensorBoard 在上使用的最低權限組合 SageMaker。

    • sagemaker:CreateApp

    • sagemaker:DeleteApp

    • sagemaker:DescribeTrainingJob

    • sagemaker:Search

    • s3:GetObject

    • s3:ListBucket

使用 TensorBoard 輸出資料組態準備訓練工作

深度學習的典型訓練工作 SageMaker 包含兩個主要步驟:準備訓練指令碼和設定 SageMaker 訓練工作啟動器。在本節中,您可以檢查必要的變更,以便從 SageMaker訓練中收集 TensorBoard相容資料。

步驟 1:修改訓練指令碼

請確定您決定要收集哪些輸出張量和純量,並使用下列任一工具修改訓練指令碼中的程式碼行: TensorBoardX、Summary Writer、S TensorFlow ummary Writer 或 SageMaker 偵錯工具。 PyTorch

此外,請務必將 TensorBoard 資料輸出路徑指定為訓練容器中回呼的 log 目錄 (log_dir)。

如需每個架構回調的更多相關資訊,請參閱下列資源。

步驟 2:使用 TensorBoard 數據配置構建 SageMaker訓練啟動器

在配置 SageMaker 框架估算器sagemaker.debugger.TensorBoardOutputConfig時使用。此組態 API 會將您指定用於儲存 TensorBoard 資料的 S3 儲存貯體與訓練容器中的本機路徑對應 (/opt/ml/output/tensorboard)。將模組的物件傳遞給估算器類別的tensorboard_output_config參數。下列程式碼片段顯示使用 TensorBoard 輸出組態參數準備 TensorFlow 估算器的範例。

注意

這個範例假設您使用 SageMaker Python 開發套件。如果您使用低級 SageMaker API,則應在 CreateTrainingJobAPI 的請求語法中包含以下內容。

"TensorBoardOutputConfig": { "LocalPath": "/opt/ml/output/tensorboard", "S3OutputPath": "s3_output_bucket" }
from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import TensorBoardOutputConfig # Set variables for training job information, # such as s3_out_bucket and other unique tags. ... LOG_DIR="/opt/ml/output/tensorboard" output_path = os.path.join( "s3_output_bucket", "sagemaker-output", "date_str", "your-training_job_name" ) tensorboard_output_config = TensorBoardOutputConfig( s3_output_path=os.path.join(output_path, 'tensorboard'), container_local_output_path=LOG_DIR ) estimator = TensorFlow( entry_point="train.py", source_dir="src", role=role, image_uri=image_uri, instance_count=1, instance_type="ml.c5.xlarge", base_job_name="your-training_job_name", tensorboard_output_config=tensorboard_output_config, hyperparameters=hyperparameters )

如何訪 TensorBoard 問 SageMaker

您可以 TensorBoard 透過兩種方法存取:以程式設計方式使用產生未簽署或預先簽署 URL 的sagemaker.interactive_apps.tensorboard模組,或使用 SageMaker 主控台中的 TensorBoard 登陸頁面。開啟之後 TensorBoard, SageMaker 執行 TensorBoard 外掛程式,並以 TensorBoard相容的檔案格式自動尋找所有訓練工作輸出資料。

TensorBoard 使用sagemaker.interactive_apps.tensorboard模組開啟

sagemaker.interactive_apps.tensorboard模組提供一個名為的函數get_app_url,可產生未簽署或預先簽署的 URL,以便在 Amazon EC2 中的任何環境中 SageMaker 開啟 TensorBoard 應用程式。這是為了為工作室經典版和非工作室經典用戶提供統一的體驗。對於 Studio 環境,您可以 TensorBoard 按原樣運行該get_app_url()函數來打開,也可以指定作業名稱以在 TensorBoard 應用程序打開時開始跟踪。對於非 Studio 傳統環境,您可以將網域和使用者設定檔資訊提供給公用程式功能來開啟 TensorBoard。使用此功能,無論您在何處或如何執行訓練程式碼和啟動訓練工作,都可以透 TensorBoard 過在 Jupyter 筆記本或終端機中執行該get_app_url函數來直接存取。

注意

此功能可在開發套件 SageMaker Python 2.184.0 及更新版本中使用。若要使用此功能,請務必透過pip install sagemaker --upgrade執行升級 SDK。

選項 1:對於經典 SageMaker工作室

如果您使用的是 SageMaker Studio Classic,則可以通過運行該get_app_url函數直接打開 TensorBoard應用程序或檢索未簽名的 URL,如下所示。由於您已經在 Studio Classic 環境中並以網域使用者身分登入,因此get_app_url()會產生未簽署的 URL,因為不需要再次驗證。

開啟 TensorBoard 應用程式

下列程式碼會自動從未簽署的 URL 開啟 TensorBoard 應用程式,該 get_app_url() URL 會在您環境的預設網頁瀏覽器中傳回該應用程式。

from sagemaker.interactive_apps import tensorboard region = "us-west-2" app = tensorboard.TensorBoardApp(region) app.get_app_url( training_job_name="your-training_job_name" # Optional. Specify the job name to track a specific training job )

擷取未簽署的 URL 並手動開啟 TensorBoard應用程式

下面的代碼打印一個未簽名的 URL,您可以將其複製到 Web 瀏覽器並打開 TensorBoard 應用程序。

from sagemaker.interactive_apps import tensorboard region = "us-west-2" app = tensorboard.TensorBoardApp(region) print("Navigate to the following URL:") print( app.get_app_url( training_job_name="your-training_job_name", # Optional. Specify the name of the job to track. open_in_default_web_browser=False # Set to False to print the URL to terminal. ) )

請注意,如果您在 SageMaker Studio Classic 環境之外執行前兩個程式碼範例,函式會傳回 SageMaker 主控台中登 TensorBoard陸頁面的 URL,因為這些範例沒有您網域和使用者設定檔的登入資訊。如需建立預先登入的 URL,請參閱下一節中的選項 2。

選項 2:適用於非工作室傳統環境

如果您使用非 Studio 傳統環境 (例如 SageMaker 筆記本執行個體或 Amazon EC2),並且想要 TensorBoard 直接從您所在的環境開啟,則需要產生預先使用網域和使用者設定檔資訊簽署的 URL。預先簽署的 URL 是使用您的網域和使用者設定檔建立時登入 Amazon SageMaker Studio Classic 的 URL,因此會授與與您網域相關聯的所有網域應用程式和檔案的存取權。若要 TensorBoard 透過預先簽署的 URL 開啟,請使用您的網域和使用者設定檔名稱的get_app_url功能,如下所示。

請注意,此選項需要網域使用者具有sagemaker:CreatePresignedDomainUrl權限。未經許可,域用戶將收到異常錯誤。

重要

請勿與他人分享任何預先登入的 URL。此get_app_url功能會建立預先簽署的 URL,該 URL 會自動驗證您的網域和使用者設定檔,並可存取與您網域相關聯的任何應用程式和檔案。

print( app.get_app_url( training_job_name="your-training_job_name", # Optional. Specify the name of the job to track. create_presigned_domain_url=True, # Reguired to be set to True for creating a presigned URL. domain_id="your-domain-id", # Required if creating a presigned URL (create_presigned_domain_url=True). user_profile_name="your-user-profile-name", # Required if creating a presigned URL (create_presigned_domain_url=True). open_in_default_web_browser=False, # Optional. Set to False to print the URL to terminal. optional_create_presigned_url_kwargs={} # Optional. Add any additional args for Boto3 create_presigned_domain_url ) )
提示

get_app_url函數會在後端執 AWS SDK for Python (Boto3) 行 SageMaker.Client.create_presigned_domain_urlAPI。由於 Boto3 create_presigned_domain_url API 建立預先簽署的網域網址 (預設會在 300 秒後到期),因此預先簽署的 TensorBoard 應用程式網址也會在 300 秒後過期。如果要延長到期時間,請將ExpiresInSeconds引數發送至get_app_url功能的optional_create_presigned_url_kwargs參數,如下所示。

optional_create_presigned_url_kwargs={"ExpiresInSeconds": 1500}
注意

如果傳遞給的引數的任何輸入get_app_url無效,函數會將 URL 輸出到 TensorBoard 登陸頁面,而不是開啟 TensorBoard 應用程式。輸出訊息可能類似以下內容。

Navigate to the following URL: https://us-west-2.console.aws.amazon.com/sagemaker/home?region=us-west-2#/tensor-board-landing

TensorBoard 使用get_app_url函數作為estimator類別方法來開啟

如果您正在使用 SageMaker Python SDK 的estimator類別執行訓練工作,並且具有類estimator別的使用中物件,您也可以將get_app_url函數當做類別的類別方法存取。estimator開啟 TensorBoard 應用程式或透過執行get_app_url方法擷取未簽署的 URL,如下所示。get_app_urlclass 方法從估計器中提取訓練工作名稱,並使用指定的工作打開 TensorBoard 應用程序。

注意

此功能可在開發套件 SageMaker Python 2.184.0 及更新版本中使用。若要使用此功能,請務必透過pip install sagemaker --upgrade執行升級 SDK。

選項 1:對於經典 SageMaker 工作室

開啟 TensorBoard 應用程式

下列程式碼會從get_app_url()方法傳回的未簽署 URL 自動開啟 TensorBoard 應用程式,該 URL 會在您環境的預設網頁瀏覽器中傳回。

estimator.get_app_url( app_type=SupportedInteractiveAppTypes.TENSORBOARD # Required. )

擷取未簽署的 URL 並手動開啟 TensorBoard應用程式

下面的代碼打印一個未簽名的 URL,您可以將其複製到 Web 瀏覽器並打開 TensorBoard 應用程序。

print( estimator.get_app_url( app_type=SupportedInteractiveAppTypes.TENSORBOARD, # Required. open_in_default_web_browser=False, # Optional. Set to False to print the URL to terminal. ) )

請注意,如果您在 SageMaker Studio Classic 環境之外執行前兩個程式碼範例,函式會傳回 SageMaker 主控台中登 TensorBoard陸頁面的 URL,因為這些範例沒有您網域和使用者設定檔的登入資訊。如需建立預先登入的 URL,請參閱下一節中的選項 2。

選項 2:適用於非工作室傳統環境

如果您使用非 Studio 傳統環境 (例如 SageMaker 筆記本執行個體和 Amazon EC2),並且想要產生預先簽署的 URL 來開啟 TensorBoard 應用程式,請使用該get_app_url方法搭配您的網域和使用者設定檔資訊,如下所示。

請注意,此選項需要網域使用者具有sagemaker:CreatePresignedDomainUrl權限。未經許可,域用戶將收到異常錯誤。

重要

請勿與他人分享任何預先登入的 URL。此get_app_url功能會建立預先簽署的 URL,該 URL 會自動驗證您的網域和使用者設定檔,並可存取與您網域相關聯的任何應用程式和檔案。

print( estimator.get_app_url( app_type=SupportedInteractiveAppTypes.TENSORBOARD, # Required create_presigned_domain_url=True, # Reguired to be set to True for creating a presigned URL. domain_id="your-domain-id", # Required if creating a presigned URL (create_presigned_domain_url=True). user_profile_name="your-user-profile-name", # Required if creating a presigned URL (create_presigned_domain_url=True). open_in_default_web_browser=False, # Optional. Set to False to print the URL to terminal. optional_create_presigned_url_kwargs={} # Optional. Add any additional args for Boto3 create_presigned_domain_url ) )

TensorBoard 透過 SageMaker主控台開啟

您也可以使用主 SageMaker 控台 UI 開啟 TensorBoard 應用程式。有兩個選項可以通過 SageMaker 控制台打開 TensorBoard 應用程序。

選項 1: TensorBoard 從網域詳細資料頁面啟動

導覽至網域詳細資訊頁面

下列程序顯示如何瀏覽至網域詳細資訊頁面。

  1. 在以下位置打開 Amazon SageMaker 控制台 https://console.aws.amazon.com/sagemaker/

  2. 在左側導覽窗格中,選擇管理員組態

  3. 在 [管理員設定] 下,選擇 [網域

  4. 從網域清單中,選取您要在其中啟動 TensorBoard 應用程式的網域。

啟動使用者設定檔應用程式

下列程序顯示如何啟動範圍為使用者設定檔的 Studio 典型應用程式。

  1. 在網域詳細資料頁面上,選擇使用者設定檔索引標籤。

  2. 識別您要啟動 Studio 典型應用程式的使用者設定檔。

  3. 為您選取的使用者設定檔選擇 [啟動],然後選擇TensorBoard

選項 2: TensorBoard 從 TensorBoard 登陸頁面啟動

下列程序說明如何從 TensorBoard 登陸頁面啟動 TensorBoard 應用程式。

  1. 在以下位置打開 Amazon SageMaker 控制台 https://console.aws.amazon.com/sagemaker/

  2. 在左側導覽窗格中,選擇TensorBoard

  3. 在 [開始使用] 下,選取您要啟動 Studio 典型應用程式的網域。如果您的使用者設定檔僅屬於一個網域,您將看不到選取網域的選項。

  4. 選取您要啟動 Studio 典型應用程式的使用者設定檔。如果網域中沒有使用者設定檔,請選擇 [建立使用者設定檔]。如需更多資訊,請參閱新增和移除使用者設定檔

  5. 選擇「開啟」 TensorBoard。

下列螢幕擷取畫面顯示主控台左側導覽窗格 TensorBoard 中的位置,以及 SageMaker 主窗格中 SageMaker 含 TensorBoard 登陸頁面的位置。

TensorBoard 登陸頁面

存取並視覺化的訓練輸出資料 TensorBoard

在訓練期間或訓練後,您可以載入從 S3 儲存貯體收集到的輸出張量及對應的訓練任務,以進行線上或離線分析。

當您開 TensorBoard 啟 TensorBoard 應用程式時,會以「SageMaker資料管理員」標籤開啟。下列螢幕擷取畫面顯示 TensorBoard 應用程式中 SageMaker 資料管理員索引標籤的完整檢視。

TensorBoard 應用程式中 SageMaker 資料管理員索引標籤的螢幕擷取畫面

SageMaker 資料管理員索引標籤中,您可以選取任何訓練任務,並從 Amazon S3 載入 TensorBoard相容的訓練輸出資料。

  1. 搜尋訓練任務區段中,使用篩選器縮小您要尋找、載入和視覺化的訓練任務清單。

  2. 訓練任務清單區段中,使用核取方塊來選擇您要從中擷取資料,並進行視覺化以偵錯的訓練任務。

  3. 選擇新增選取任務。選取任務應顯示在追蹤的訓練任務區段中,如下列螢幕擷取畫面所示。

    TensorBoard 應用程式中「 SageMaker 資料管理員」標籤下「追蹤訓練工作」區段的螢幕擷取畫面
注意

[資SageMaker 料管理員] 索引標籤只會顯示使用TensorBoardOutputConfig參數設定的訓練工作。請確定您已使用此參數設 SageMaker 定估算器。如需詳細資訊,請參閱 步驟 2:使用 TensorBoard 數據配置構建 SageMaker訓練啟動器

注意

如果您是第一次使用,或者沒有從上次使 SageMaker TensorBoard 用載入任何資料,則視覺化標籤可能不會顯示。新增訓練任務並等待幾秒鐘後,請選擇右上角的順時針圓形箭頭來重新整理檢視器。成功載入任務資料後,視覺化索引標籤應該會出現。您也可以使用右上角重新整理按鈕旁的設定按鈕,設定為自動重新整理。

探索視覺化的訓練輸出資料 TensorBoard

在圖形索引標籤中,您可以在左面板中看到已載入的訓練任務清單。您也可以使用訓練任務核取方塊來顯示或隱藏視覺化。動 TensorBoard 態外掛程式會根據您設定訓練指令碼的方式,以包含摘要撰寫器並傳遞函式以供張量和純量集合傳遞回呼的方式而動態啟動,因此圖形索引標籤也會動態顯示。下列螢幕擷取畫面顯示每個索引標籤的檢視範例,其中包含兩個訓練任務的視覺化方式,這些任務收集了時間序列、純量、圖形、分佈和長條圖外掛程式

時間序列索引標籤式檢視

「時間序列」(TIME SERIES) 標籤的螢幕擷取畫面,其中顯示選取要追蹤的訓練工作的 TensorBoard 資料,以及主窗格中序列化的色階分佈圖 .

純量索引標籤式檢視

SCALARS 索引標籤的螢幕擷取畫面,其中會顯示選取要追蹤的訓練工作的 TensorBoard 資料,以及與主窗格中步驟 (或紀元) 相關的純量值 (例如準確度和損失) 繪圖。

圖表索引標籤式檢視

圖表索引標籤的螢幕擷取畫面,顯示所選訓練任務的模型圖表。

分佈索引標籤式檢視

[分佈] 索引標籤的螢幕擷取畫面,其中顯示選取要追蹤之訓練工作的 TensorBoard 資料,以及模型參數 (例如偏差和核心) 相對於主窗格中步驟 (或紀元) 的分佈變更。

長條圖索引標籤式檢視

[直方圖] 索引標籤的螢幕擷取畫面,其中顯示選取要追蹤之訓練工作的 TensorBoard 資料,以及主窗格中模型參數 (例如偏差和核心) 的序列化直方圖。

刪除未用的 TensorBoard 應用

在中完成監視和試驗工作之後 TensorBoard,請關閉 TensorBoard 應用程式。

  1. 開啟主 SageMaker 控台。

  2. 在左側導覽窗格中,選擇管理員組態

  3. 在 [管理員設定] 下,選擇 [網域

  4. 選擇您的網域。

  5. 選擇您的使用者設定檔。

  6. 在 [應用程式] 下方,選擇 TensorBoard 列的 [刪除應用程式

  7. 選擇是,刪除應用程式

  8. 在文字方塊中輸入delete,然後選擇刪除

  9. 畫面頂端應會出現藍色訊息:預設值正在刪除

考量事項

SageMaker 搭配使用時,請考慮下列事項 TensorBoard。

  • 您無法共用 TensorBoard 應用程式以進行協同作業,因為 SageMaker 網域不允許應用程式在使用者之間共用。如果使用者有儲存貯體的存取權限,他們可以共用儲存在 S3 儲存貯體中的輸出張量。

  • 第一次啟動應用程式時,視覺效果外掛 TensorBoard 程式可能不會出現。在 SageMaker 資料管理員外掛程式中選取訓練工作後, TensorBoard 應用程式會載入 TensorBoard 資料並填入視覺效果外掛程式。

  • TensorBoard 應用程式會在閒置 1 小時後自動關閉。如果您想在使用完應用程式後關閉應用程式,請務必手動關閉 TensorBoard ,以避免支付託管應用程式的執行個體費用。如需刪除應用程式的指示,請參閱刪除未用的 TensorBoard 應用

  • 上的 TensorBoard 應用程序 SageMaker 旨在為 SageMaker 培訓工作提供 out-of-the-box支持。這項內建整合可讓訓練容器內的本機目錄與 Amazon S3 儲存貯體之間的無縫對應,並在 CreateTrainingJobAPI 層促進。透過此整合,您可以輕鬆地對應目錄路徑,如 [使用 TensorBoard 輸出資料組態準備訓練工作] 一節中所述。

    不過,請注意, TensorBoard 應用程式不提供 SageMaker 超參數調整工作的 out-of-the-box支援,因為 CreateHyperParameterTuningJobAPI 並未與對應的 TensorBoard 輸出組態整合。若要將 TensorBoard 應用程式用於超參數調整任務,您需要在訓練指令碼中撰寫程式碼,以便將指標上傳到 Amazon S3。將指標上傳到 Amazon S3 儲存貯體後,您就可以在上將儲存貯體載入 TensorBoard應用程式 SageMaker。