設定偵錯工具內建規則 - Amazon SageMaker

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

設定偵錯工具內建規則

Amazon SageMaker 偵錯工具的內建規則會分析模型訓練期間發出的張量。 SageMaker偵錯工具提供 Rule API 作業,可監控訓練工作進度和錯誤,以便成功訓練模型。例如,規則可以偵測漸層是否變得太大或太小、模型是過度擬合還是過度訓練,以及訓練任務是否不會降低損耗功能並改善。要查看可用內建規則的完整清單,請參閱偵錯工具內建規則清單

在下列主題中,您將學習如何使用 SageMaker 除錯程式內建規則。

搭配預設參數設定使用偵錯工具內建規則

若要在估算器中指定偵錯工具內建規則,您需要設定清單物件。下列範例程式碼顯示列出偵錯工具內建規則的基本結構。

from sagemaker.debugger import Rule, rule_configs rules=[ Rule.sagemaker(rule_configs.built_in_rule_name_1()), Rule.sagemaker(rule_configs.built_in_rule_name_2()), ... Rule.sagemaker(rule_configs.built_in_rule_name_n()), ... # You can also append more profiler rules in the ProfilerRule.sagemaker(rule_configs.*()) format. ]

有關預設參數值和內建規則說明的詳細資訊,請參閱偵錯工具內建規則清單

若要尋找除 SageMaker 錯程式 API 參考,請參閱sagemaker.debugger.rule_configssagemaker.debugger.Rule

例如,若要檢查模型的整體訓練效能和進度,請使用下列內建規則組態建構 SageMaker 估算器。

from sagemaker.debugger import Rule, rule_configs rules=[ Rule.sagemaker(rule_configs.loss_not_decreasing()), Rule.sagemaker(rule_configs.overfit()), Rule.sagemaker(rule_configs.overtraining()), Rule.sagemaker(rule_configs.stalled_training_rule()) ]

當您開始訓練任務時,偵錯工具會每 500 毫秒收集一次系統資源使用率資料,並依預設每 500 個步驟收集一次遺失和準確度值。偵錯工具會分析資源使用率,來識別您的模型是否有瓶頸問題。loss_not_decreasingoverfitovertrainingstalled_training_rule 會監控您的模型是否在沒有這些訓練問題的情況下,最佳化損耗功能。如果規則偵測到訓練有異常狀況,則規則評估狀態會變更為 IssueFound。您可以設定自動化動作,例如使用 Amazon E CloudWatch vents 和 AWS Lambda. 如需詳細資訊,請參閱 Amazon SageMaker 調試器規則的操作

搭配自訂參數值使用偵錯工具內建規則

如果您想要調整內建規則參數值並自訂張量集合 Regex,請設定 ProfilerRule.sagemakerRule.sagemaker 類別方法的 base_configrule_parameters 參數。對於 Rule.sagemaker 類別方法,您還可以透過 collections_to_save 參數自訂張量集合。使用 CollectionConfig API 設定張量集合提供如何使用 CollectionConfig 類別的指示。

使用下列內建規則的組態範本來自訂參數值。您可以視需要變更規則參數,調整要觸發的規則敏感度。

  • base_config 引數是您呼叫內建規則方法的位置。

  • rule_parameters 引數是調整 偵錯工具內建規則清單 中所列出的內建規則預設金鑰值。

  • collections_to_save 引數透過 CollectionConfig API 進行張量設定,這需要 nameparameters 引數。

如需有關偵錯程式規則類別、方法和參數的詳細資訊,請參閱 Amazon SageMaker Python 開發套件中的SageMaker偵錯程式規則類別

from sagemaker.debugger import Rule, ProfilerRule, rule_configs, CollectionConfig rules=[ Rule.sagemaker( base_config=rule_configs.built_in_rule_name(), rule_parameters={ "key": "value" }, collections_to_save=[ CollectionConfig( name="tensor_collection_name", parameters={ "key": "value" } ) ] ) ]

針對 偵錯工具內建規則清單 中的每個規則提供參數描述和參數值自訂範例。

範例筆記本和程式碼範例,以設定偵錯工具規則

在以下各節中,提供了如何使用偵錯工具規則監視 SageMaker 訓練工作的筆記本和程式碼範例。

偵錯工具內建規則範例筆記本

下列範例筆記本示範如何在使用 Amazon 執行訓練任務時使用偵錯工具內建規則 SageMaker:

在 Studio 中執行範例筆記本時,您可以找到在 [ SageMaker Studio 實驗清單] 索引標籤上建立的訓練工作試驗。例如,如下列螢幕擷取畫面所示,您可以尋找並開啟目前訓練任務的描述試驗元件視窗。在偵錯工具索引標籤上,您可以檢查偵錯程式規則 (vanishing_gradient()loss_not_decreasing()) 是否平行監控訓練任務工作階段。如需如何在 Studio UI 中尋找訓練工作試用元件的完整說明,請參閱 SageMaker Studio-檢視實驗、試用和試用元件

在 SageMaker Studio 中激活調試器內置規則運行培訓工作的圖像

在 SageMaker 環境中使用 Debuter 內建規則有兩種方式:在準備好時部署內建規則,或根據需要調整其參數。下列主題示範如何搭配範例程式碼使用內建規則。

偵錯工具內建規則範例程式碼

下列程式碼範例示範如何使用 Rule.sagemaker 方法設定偵錯工具內建規則。若要指定要執行的內建規則,請使用 rules_configs API 作業呼叫內建規則。要查找 Debugger 內建規則和預設參數值的完整清單,請參閱偵錯工具內建規則清單

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import Rule, CollectionConfig, rule_configs # call built-in rules that you want to use. built_in_rules=[ Rule.sagemaker(rule_configs.vanishing_gradient()) Rule.sagemaker(rule_configs.loss_not_decreasing()) ] # construct a SageMaker estimator with the Debugger built-in rules sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-built-in-rules-demo', instance_count=1, instance_type="ml.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific arguments below rules=built_in_rules ) sagemaker_estimator.fit()
注意

偵錯工具內建規則會與您的訓練任務平行執行。訓練任務的內建規則容器數量上限為 20。

如需有關偵錯程式規則類別、方法和參數的詳細資訊,請參閱 Amazon SageMaker Python 開發套件中的SageMaker 除錯程式規則類別

要查找有關如何調整 Debugger 規則參數的範例,請參閱以下 使用偵錯工具內建規則與參數修改 部分。

使用偵錯工具內建規則與參數修改

下列程式碼範例示範調整參數的內建規則結構。在此範例中,stalled_training_rule 會每 50 個步驟會從訓練任務收集 losses 張量集合,並每 10 個步驟收集評估階段。如果訓練程序開始停止,而且在 120 秒內未收集張量輸出,則 stalled_training_rule 會停止訓練任務。

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import Rule, CollectionConfig, rule_configs # call the built-in rules and modify the CollectionConfig parameters base_job_name_prefix= 'smdebug-stalled-demo-' + str(int(time.time())) built_in_rules_modified=[ Rule.sagemaker( base_config=rule_configs.stalled_training_rule(), rule_parameters={ 'threshold': '120', 'training_job_name_prefix': base_job_name_prefix, 'stop_training_on_fire' : 'True' } collections_to_save=[ CollectionConfig( name="losses", parameters={ "train.save_interval": "50" "eval.save_interval": "10" } ) ] ) ] # construct a SageMaker estimator with the modified Debugger built-in rule sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name=base_job_name_prefix, instance_count=1, instance_type="ml.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific arguments below rules=built_in_rules_modified ) sagemaker_estimator.fit()

關於使用 CreateTrainingJob API 的 Debugger 內建規則的進階組態,請參閱使用 Amazon SageMaker API 配置調試器