Amazon SageMaker Experiments를 사용하여 파라미터 및 지표 로깅 - Amazon SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon SageMaker Experiments를 사용하여 파라미터 및 지표 로깅

이 가이드는 Amazon SageMaker Experiments를 사용하여 파라미터 및 지표를 로깅하는 방법을 보여줍니다. SageMaker 실험은 실행으로 구성되며 각 실행은 단일 모델 훈련 상호 작용에 대한 모든 입력, 파라미터, 구성 및 결과로 구성됩니다.

@remote 데코레이터 또는 RemoteExecutor 를 사용하여 원격 함수에서 파라미터와 지표를 로깅할 수 있습니다API.

원격 함수에서 파라미터 및 지표를 기록하려면 다음 방법 중 하나를 선택합니다.

  • SageMaker 실험 라이브러리Run에서 를 사용하여 원격 함수 내에서 SageMaker 실험 실행을 인스턴스화합니다. 자세한 내용은 Amazon SageMaker 실험 생성을 참조하세요.

  • 실험 라이브러리의 원격 load_run 함수 내에서 함수를 SageMaker 사용합니다. 그러면 원격 함수 외부에서 선언된 Run 인스턴스가 로드됩니다.

다음 섹션에서는 앞서 나열된 방법을 사용하여 SageMaker 실험 실행으로 계보를 생성하고 추적하는 방법을 보여줍니다. 또한 이 섹션에서는 SageMaker 훈련에서 지원되지 않는 사례에 대해서도 설명합니다.

@remote 데코레이터를 사용하여 SageMaker 실험과 통합

에서 실험을 인스턴스화 SageMaker하거나 원격 함수 내에서 현재 SageMaker 실험을 로드할 수 있습니다. 다음 섹션에서는 두 가지 메서드를 사용하는 방법을 보여줍니다.

SageMaker 실험을 사용하여 실험 생성

실험에서 SageMaker 실험 실행을 생성할 수 있습니다. 이렇게 하려면 실험 이름, 실행 이름 및 기타 파라미터를 원격 함수에 전달해야 합니다.

다음 코드 예제에서는 실험 이름, 실행 이름, 각 실행 중에 로깅할 파라미터를 가져옵니다. 파라미터 param_1param_2는 시간이 지남에 따라 훈련 루프 내에 로깅됩니다. 일반적인 파라미터에는 배치 크기 또는 에포크가 포함될 수 있습니다. 이 예제에서 어떤 실행의 지표 metric_ametric_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 실험 라이브러리의 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

로 작업을 시작한 경우 현재 SageMaker 실험 실행을 로드할 수도 있습니다RemoteExecutorAPI. 다음 코드 예제는 SageMaker 실험 load_run 함수와 RemoteExecutor API 함께 를 사용하는 방법을 보여줍니다. 이렇게 하면 현재 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)

@remote 데코레이터로 코드에 주석을 달면서 지원되지 않는 SageMaker 실험용 사용

SageMaker 는 Run 유형 객체를 @remote 함수로 전달하거나 전역 Run 객체를 사용하는 것을 지원하지 않습니다. 다음 예제는 SerializationError를 발생시키는 코드를 보여줍니다.

다음 코드 예제에서는 @remote 데코레이터에 Run 형식 객체를 전달하려고 할 때 오류가 발생합니다.

@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