本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon SageMaker Experiments 記錄參數和指標
本指南說明如何使用 Amazon SageMaker Experiments 記錄參數和指標。 SageMaker 實驗包含執行,每個執行包含單一模型訓練互動的所有輸入、參數、組態和結果。
您可以使用 @remote RemoteExecutor
裝飾程式或 從遠端函數記錄參數和指標API。
若要從遠端函式記錄參數與指標,請選擇下列其中一個方法:
-
使用 SageMaker SageMaker Experiments 程式庫
Run
中的 ,在遠端函數中實現實驗執行。如需詳細資訊,請參閱建立 Amazon SageMaker 實驗 。 -
在 Experiments 程式庫的 SageMaker遠端
load_run
函數內使用 函數。這將載入在遠端函式外部宣告的Run
執行個體。
下列各節說明如何使用先前列出的方法建立和追蹤 SageMaker 實驗執行的譜系。這些章節也會說明 SageMaker 訓練不支援的案例。
使用 @remote 裝飾程式與 SageMaker Experiments 整合
您可以在 中實例化實驗 SageMaker,或從遠端函數內部載入目前的 SageMaker實驗。下列區段顯示如何使用任一方法。
使用 SageMaker Experiments 建立實驗
您可以在實驗中建立 SageMaker 實驗執行。若要做到這點,請傳遞實驗名稱、執行名稱與其他參數至遠端函式。
下列代碼範例會匯入實驗名稱、執行名稱,以及每次執行期間要記錄的參數。參數 param_1
與 param_2
會隨著時間記錄於訓練迴路內部。常見參數可能包含批次大小或週期。在此範例,指標 metric_a
與 metric_b
會隨著執行時間記錄於訓練迴路內部。其他常見指標可能包含 accuracy
或 loss
。
from sagemaker.remote_function import remote from sagemaker.experiments.run import Run # Define your remote function @remote def train(
value_1
,value_2
,exp_name
,run_name
): ... ... #Creates the experiment with Run( experiment_name=exp_name, run_name=run_name, ) as run: ... #Define values for the parameters to log run.log_parameter("param_1
", value_1) run.log_parameter("param_2
", value_2) ... #Define metrics to log run.log_metric("metric_a
", 0.5) run.log_metric("metric_b
", 0.1) # Invoke your remote function train(1.0, 2.0, "my-exp-name", "my-run-name")
載入 @remote 裝飾程式啟動任務的目前 SageMaker 實驗
使用 SageMaker Experiments 程式庫中的 load_run()
函數,從執行內容載入目前的執行物件。您還可以在遠端函式內使用 load_run()
函式。如下列代碼範例所示,將 with
陳述式在本機初始化的執行物件載入執行物件。
from sagemaker.experiments.run import Run, load_run # Define your remote function @remote def train(
value_1
,value_2
): ... ... with load_run() as run: run.log_metric("metric_a
", value_1) run.log_metric("metric_b
", value_2) # Invoke your remote function with Run( experiment_name="my-exp-name
", run_name="my-run-name
", ) as run: train(0.5, 1.0)
載入使用 啟動的任務內目前的實驗執行 RemoteExecutor
API
如果您的任務是使用 RemoteExecutor
啟動的,您也可以載入目前的 SageMaker 實驗執行API。下列程式碼範例示範如何RemoteExecutor
API搭配 SageMaker Experiments load_run
函數使用 。您這樣做會載入目前的 SageMaker 實驗執行,並在 提交的任務中擷取指標RemoteExecutor
。
from sagemaker.experiments.run import Run, load_run def square(x): with load_run() as run: result = x * x run.log_metric("result", result) return result with RemoteExecutor( max_parallel_job=2, instance_type="
ml.m5.large
" ) as e: with Run( experiment_name="my-exp-name
", run_name="my-run-name
", ): future_1 = e.submit(square, 2)
不支援使用 SageMaker Experiments,同時使用 @remote 裝飾程式註釋程式碼
SageMaker 不支援將Run
類型物件傳遞至 @remote 函數或使用全域Run
物件。下列範例顯示將擲回 SerializationError
的代碼。
下列代碼範例會嘗試傳遞 Run
類型物件至 @remote 裝飾項目,但會產生錯誤。
@remote def func(run: Run): run.log_metrics("metric_a", 1.0) with Run(...) as run: func(run) ---> SerializationError caused by NotImplementedError
下列代碼範例會嘗試使用在遠端函式外部具現化的全域 run
物件。在此代碼範例,train()
函式在 with Run
內容內部進行定義,從內部參考全域執行物件。當呼叫 train()
時,其會產生錯誤。
with Run(...) as run: @remote def train(
metric_1
,value_1
,metric_2
,value_2
): run.log_parameter(metric_1, value_1) run.log_parameter(metric_2, value_2) train("p1", 1.0, "p2", 0.5) ---> SerializationError caused by NotImplementedError