設定 SageMaker 偵錯工具以儲存張量 - Amazon SageMaker

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

設定 SageMaker 偵錯工具以儲存張量

張量是從每個訓練迭代的向後和向前傳遞更新參數的數據集合。 SageMaker 偵錯工具會收集輸出張量以分析訓練工作的狀態。 SageMaker 偵錯工具CollectionConfigDebuggerHookConfigAPI作業提供了將張量分組到集合中並將其儲存到目標 S3 儲存貯體的方法。

注意

正確設定並啟動後,除非另有指定,除 SageMaker 錯工具會將輸出張量儲存在預設 S3 儲存貯體中。預設 S3 儲存貯體的格式URI為s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/

在構建一個 SageMaker 估計器,通過指定參數激活 SageMaker 調試器。debugger_hook_config下列步驟包含如何設定debugger_hook_config使用CollectionConfig和作DebuggerHookConfigAPI業將張量從訓練工作中拉出並儲存它們的範例。

使用設定張量集合 CollectionConfig API

使用此作CollectionConfigAPI業可設定張量集合。如果使用 Debugger 支援的深度學習架構和機器學習演算法,Debugger 提供預先構建的張量集合,涵蓋各種參數的正規表示式 (regex)。如下列範例程式碼所示,新增您要偵錯的內建張量集合。

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig(name="weights"), CollectionConfig(name="gradients") ]

前面的集合設定了 Debugger 勾點,基於預設的 "save_interval" 值,每 500 個步驟儲存張量。

如需可用 Debugger 內建集合的完整清單,請參閱 Debugger 內建集合

如果您想自訂內建集合,例如變更儲存間隔和張量規則表達式,請使用下列 CollectionConfig 範本調整參數。

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig( name="tensor_collection", parameters={ "key_1": "value_1", "key_2": "value_2", ... "key_n": "value_n" } ) ]

如需有關可用參數金鑰的詳細資訊,請參閱 Amazon SageMaker Python CollectionConfig中的SDK。例如,下列程式碼範例會示範如何在不同訓練階段調整 “遺失” 張量集合的儲存間隔:在訓練階段每 100 個步驟儲存一次遺失,並在驗證階段每 10 個步驟儲存一次驗證遺失。

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig( name="losses", parameters={ "train.save_interval": "100", "eval.save_interval": "10" } ) ]
提示

此張量集合配置物件可用於DebuggerHookConfigRule API 作業。

設定DebuggerHookConfigAPI要儲存張量

使用可使用您在上一個debugger_hook_config步驟中建立的collection_configs物件DebuggerHookConfigAPI來建立物件。

from sagemaker.debugger import DebuggerHookConfig debugger_hook_config=DebuggerHookConfig( collection_configs=collection_configs )

Debugger 會將模型訓練輸出張量儲存至預設 S3 儲存貯體。預設 S3 儲存貯體的格式URI為 s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/.

如果您想要指定確切的 S3 儲存貯體URI,請使用下列程式碼範例:

from sagemaker.debugger import DebuggerHookConfig debugger_hook_config=DebuggerHookConfig( s3_output_path="specify-amzn-s3-demo-bucket-uri" collection_configs=collection_configs )

有關更多信息,請DebuggerHookConfig參閱 Amazon SageMaker Python 中的SDK。

設定 Debugger 勾點的範例筆記本和程式碼範例

下列各節提供如何使用 Debugger 勾點儲存、存取和視覺化輸出張量的筆記本和程式碼範例。

張量視覺化範例筆記本

下列兩個筆記型電腦範例顯示 Amazon SageMaker 偵錯工具進階用於視覺化張量的使用方式。Debugger 提供訓練深度學習模型的透明檢視。

  • SageMaker 工作室筆記本中的互動式張量分析 MXNet

    此筆記本範例顯示如何使用 Amazon SageMaker 偵錯工具將儲存的張量視覺化。透過將張量視覺化,訓練深度學習演算法的同時,您可以查看張量值的變化方式。此筆記本包含一個設定不良神經網路的訓練任務,並使用 SageMaker Amazon Debuer 彙總和分析張量,包括漸層、啟動輸出和權重。例如,下圖顯示了受消失坡度問題影響之卷積圖層的坡度分佈。

    繪製漸層分佈的圖表。

    此筆記本也說明良好的初始超參數設定可產生相同的張量分佈圖,從而改善訓練程序。

  • 從MXNet模型訓練視覺化和偵錯張量

    此筆記本範例顯示如何使用 Amazon SageMaker Debug 從 MXNet Gluon 模型訓練任務中儲存和視覺化張量。它說明偵錯工具設定為將所有張量儲存至 Amazon S3 儲存貯體,並擷取視覺效果的 ReLu 啟動輸出。下圖顯示 ReLu 啟動輸出的三維視覺化。色彩方案設為藍色表示接近 0 的值,設為黃色表示接近 1 的值。

    ReLU 啟用輸出的視覺化

    在這本筆記本中,從導入的TensorPlottensor_plot.py被設計為繪製卷積神經網絡(),這些卷積神經網絡(CNNs)為輸入獲取二維圖像。筆記本隨附的tensor_plot.py指令碼會使用偵錯工具擷取張量,並將. CNN 您可以在 SageMaker Studio 上運行此筆記本以重現張量可視化並實現自己的卷積神經網絡模型。

  • SageMaker 筆記型電腦中的即時張量分析 MXNet

    本範例會引導您在 Amazon SageMaker 訓練任務中安裝用於發出張量的必要元件,以及在訓練執行期間使用偵錯程式API操作存取這些張量。膠子CNN模型在時尚MNIST數據集訓練。任務執行時,您會看到 Debugger 如何從每 100 個批次的第一個卷積層擷取啟用輸出,並將它們視覺化。此外,這將向您顯示如何在任務完成後視覺化權重。

使用 Debugger 內建集合儲存張量

您可以使用使用內建張量集合,CollectionConfigAPI並使用儲存它們。DebuggerHookConfig API下列範例顯示如何使用偵錯工具掛接組態的預設設定來建構 SageMaker TensorFlow 估算器。您也可以利用此MXNet, PyTorch, 和XGBoost估計器.

注意

在下列範例程式碼中,DebuggerHookConfigs3_output_path 參數是選用的。如果您未指定它,偵錯工具會將張量儲存在s3://<output_path>/debug-output/,其中<output_path>是 SageMaker 訓練工作的預設輸出路徑。例如:

"s3://sagemaker-us-east-1-111122223333/sagemaker-debugger-training-YYYY-MM-DD-HH-MM-SS-123/debug-output"
import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to call built-in collections collection_configs=[ CollectionConfig(name="weights"), CollectionConfig(name="gradients"), CollectionConfig(name="losses"), CollectionConfig(name="biases") ] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-built-in-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

若要查看 Debugger 內建集合的清單,請參閱 Debugger 內建集合

使用 Debugger 修改後的內建集合儲存張量

您可以使用此CollectionConfigAPI作業修改「除錯程式」內建集合。下面的例子演示了如何調整內置losses集合和構造一個 SageMaker TensorFlow 估計器。您也可以將其用於MXNet、 PyTorch、和XGBoost估計器。

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to call and modify built-in collections collection_configs=[ CollectionConfig( name="losses", parameters={"save_interval": "50"})] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-modified-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

如需參數的完整清單,請CollectionConfig參閱偵錯工具 CollectionConfig API

使用 Debugger 自訂集合儲存張量

您也可以儲存較少的張量而不是整組張量 (例如,如果您想減少 Amazon S3 儲存貯體中儲存的資料量)。下列範例顯示如何自訂 Debugger 勾點組態,指定您想儲存的目標張量。您可以將其用於 TensorFlow、MXNet PyTorch、和XGBoost估計器。

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to create a custom collection collection_configs=[ CollectionConfig( name="custom_activations_collection", parameters={ "include_regex": "relu|tanh", # Required "reductions": "mean,variance,max,abs_mean,abs_variance,abs_max" }) ] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-custom-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

如需參數的完整清單,請CollectionConfig參閱偵錯工具 CollectionConfig