本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
配置架構分析
警告
為了使用 Amazon 效能分 SageMaker 析 SageMaker工具,偵錯工具會棄用從 TensorFlow 2.11 和 2.0 開始的架構分析功能。 PyTorch 您仍然可以在舊版本的架構和開發套件中使用該功能,如下所示。
-
SageMaker Python 開發套件
-
PyTorch > = 版本 1.6.0,< 2.0 版
-
TensorFlow > = 第 2.3.1 版,
另請參閱2023 年 3 月 16 日。
若要啟用偵錯工具架構設定,請在建構估算器時設定 framework_profile_params
參數。偵錯工具架構分析使用 cProfile 或 Pyinstrument 選項收集架構指標,例如初始化階段的資料、資料載入器程序、深度學習架構和訓練指令碼的 Python 運算子、在各步驟內及步驟之間的詳細分析。使用 FrameworkProfile
類別,您可以設定自訂架構分析選項。
注意
在開始使用偵錯工具架構分析之前,請先驗證偵錯工具是否支援用於建立模型的框架進行框架分析。如需詳細資訊,請參閱 支援的架構和演算法。
偵錯工具會將架構指標儲存在預設 S3 儲存貯體中。預設 S3 儲存貯體 URI 的格式為 s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/
。
使用預設的架構分析開始訓練工作
下列範例程式碼是啟動預設系統監控和預設架構分析的最簡單 profiler_config
參數設定。下列範例程式碼中的 FrameworkProfile
類別會在訓練工作開始時啟動預設架構分析。偵錯工具架構分析包含以下選項:詳細的分析、資料載入器分析和 Python 分析。
from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile() )
使用 profiler_config
參數組態時,偵錯工具會呼叫監控和分析的預設設定。偵錯工具每 500 毫秒監控一次系統指標;使用詳細的分析選項剖析第五個步驟;使用資料載入器設定選項的第七個步驟;以及使用 Python 效能分析選項的第九、第十和第十一個步驟。
若要尋找可用的設定檔組態選項、預設參數設定以及如何進行設定的範例,請參閱 Amazon SageMaker Python 開發套件 FrameworkProfile
如果您想要變更系統監控間隔並啟用預設架構分析設定,您可以使用 framework_profile_params
參數以明確指定 system_monitor_interval_millis
參數。例如,若要每 1000 毫秒監控一次,並啟用預設的架構分析,請使用下列範例程式碼。
from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=
1000
, framework_profile_params=FrameworkProfile() )
如需有關此FrameworkProfile
類別的詳細資訊,請參閱 Amazon SageMaker Python 開發套件 FrameworkProfile
使用預設系統監控和針對目標步驟或目標時間範圍的自訂架構分析來開始訓練工作
如果您想要指定目標步驟或目標時間間隔來分析訓練工作,則需要指定 FrameworkProfile
類別的參數。下列程式碼範例示範如何指定分析以及系統監控的目標範圍。
-
針對目標步驟範圍
使用下列範例組態,偵錯工具會每 500 毫秒監控整個訓練工作 (預設監控),並分析目標步驟範圍,從步驟 5 到步驟 15 (10 個步驟)。
from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_step=
5
, num_steps=10
) )使用下列範例組態,Debugger 會每 1000 毫秒監控整個訓練工作,並分析目標步驟範圍,從步驟 5 到步驟 15 (10 個步驟)。
from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=
1000
, framework_profile_params=FrameworkProfile(start_step=5
, num_steps=10
) ) -
針對目標時間範圍
使用下列範例組態,Debugger 會每 500 毫秒監控整個訓練工作 (預設監控),並分析目標時間範圍 (從目前的 Unix 時間起 600 秒)。
import time from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_unix_time=int(
time.time()
), duration=600
) )使用下列範例組態,Debugger 會每 1000 毫秒監控整個訓練工作,並分析目標時間範圍 (從目前的 Unix 時間起 600 秒)。
import time from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=
1000
, framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()
), duration=600
) )架構分析會針對目標步驟或時間範圍內的所有分析選項進行。
若要尋找有關可用設定檔選項的詳細資訊,請參閱 Amazon SageMaker Python 開
發套件 FrameworkProfile中的SageMaker 偵錯工具 API 。 下一節為您示範如何編寫可用的分析選項指令碼。
使用預設的系統監控並使用不同分析選項的自訂架構分析開始訓練工作
您可以透過下列設定檔組態類別來管理架構分析選項:
-
DetailedProfilingConfig
— 使用原生架構效能分析工具 (效能分析工具和效能分析工具) 指定目標步驟或時間範圍,以分TensorFlow 析架構作業。 PyTorch 例如,如果使用 TensorFlow,偵錯工具掛接可讓效能分 TensorFlow 析工具收集 TensorFlow特定的架構度量。詳細的分析可讓您在訓練工作的步驟前 (第一步之前)、步驟中以及步驟之間,分析所有架構運算子。 注意
詳細分析可能會大幅增加 GPU 記憶體使用量。我們不建議您針對超過一兩個步驟啟用詳細的分析。
-
DataloaderProfiling設 Config
— 指定目標步驟或時間範圍,以剖析深度學習架構資料載入程序。偵錯工具收集架構的每個資料載入器事件。 注意
資料載入器分析從資料載入器收集資訊時,可能會降低訓練效能。我們不建議您為超過一兩個步驟啟用資料載入器分析。
Debugger 已為註釋資料預先設定,僅適用於 AWS 深度學習容器的資料載入器程序。偵錯工具無法剖析來自任何其他自訂或外部訓練容器的資料載入器程序。
-
PythonProfilingConfig
— 指定目標步驟或時間範圍以分析 Python 函數。您還可以在兩個 Python 剖析工具之間進行選擇:cProfile 和 Pyinstrument。 -
cProfile — 標準的 Python 剖析工具。cProfile 會收集訓練期間呼叫的每個 Python 運算子的資訊。使用 cProfile,偵錯工具儲存每個函式呼叫的累積時間和註釋,提供有關 Python 函式的完整細節。例如,在深度學習中,最常被呼叫的函式可能是卷積網路篩選器和向後傳遞運算子,而 cProfile 會剖析其中的每一個。針對 cProfile 選項,您可以進一步選擇計時器選項:總時間、CPU 時間和關閉 CPU 時間。雖然您可以分析 CPU 時間內在處理器 (CPU 和 GPU) 上執行的每個函式呼叫,但您也可以使用關閉 CPU 時間選項來識別 I/O 或網路瓶頸。預設值為總時間,偵錯工具會同時分析 CPU時間和關閉 CPU 時間。使用 CPenfile,您可以在分析設定檔資料時向下切入至每一個函式。
-
Pyinstrument— Pyinstrument 是一種基於取樣的低額外負載 Python 剖析工具。使用 Pyinstrument 選項,偵錯工具每毫秒對分析事件進行一次取樣。由於 Pyinstrument 測量的是經過時間而不是 CPU 時間,因此訓練您的模型時,Pyinstrument 選項比起 cProfile 選項可能會是更好的選擇,可減少分析雜訊 (過濾掉累積速度很快的不相關函式呼叫) 並擷取實際運算密集型 (累計慢) 的運算子。使用 Pyinstrument 可以看到函式呼叫的樹狀,更能理解結構和緩慢的根本原因。
注意
啟用 Python 分析可能會減慢總體訓練時間。cProfile 會在每次呼叫時分析最常呼叫的 Python 運算子,因此分析的處理時間會隨著呼叫次數的增加而增加。至於 Pyinstrument,由於其取樣機制,累積分析時間會隨時間增加。
-
下列範例組態顯示當您以指定數值使用不同分析選項時的完整結構。
import time from sagemaker.debugger import (ProfilerConfig, FrameworkProfile, DetailedProfilingConfig, DataloaderProfilingConfig, PythonProfilingConfig, PythonProfiler, cProfileTimer) profiler_config=ProfilerConfig( system_monitor_interval_millis=
500
, framework_profile_params=FrameworkProfile( detailed_profiling_config=DetailedProfilingConfig( start_step=5
, num_steps=1
), dataloader_profiling_config=DataloaderProfilingConfig( start_step=7
, num_steps=1
), python_profiling_config=PythonProfilingConfig( start_step=9
, num_steps=1
, python_profiler=PythonProfiler.CPROFILE
, cprofile_timer=cProfileTimer.TOTAL_TIME
) ) )
如需有關可用 DetailedProfilingConfig 定