

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Pencatatan parameter dan metrik dengan Amazon SageMaker Experiments
<a name="train-remote-decorator-experiments"></a>

Panduan ini menunjukkan cara mencatat parameter dan metrik dengan Amazon SageMaker Experiments. Eksperimen SageMaker AI terdiri dari run, dan setiap run terdiri dari semua input, parameter, konfigurasi, dan hasil untuk interaksi pelatihan model tunggal. 

Anda dapat mencatat parameter dan metrik dari fungsi jarak jauh menggunakan dekorator @remote atau `RemoteExecutor` API. 

Untuk mencatat parameter dan metrik dari fungsi jarak jauh, pilih salah satu metode berikut:
+ Buat instance eksperimen SageMaker AI yang dijalankan di dalam fungsi jarak jauh menggunakan `Run` dari pustaka SageMaker Eksperimen. Untuk informasi selengkapnya, lihat [ Membuat Eksperimen SageMaker AI Amazon](https://docs.aws.amazon.com/sagemaker/latest/dg/experiments-create.html).
+ Gunakan `load_run` fungsi di dalam fungsi jarak jauh dari pustaka SageMaker AI Experiments. Ini akan memuat `Run` instance yang dideklarasikan di luar fungsi jarak jauh.

Bagian berikut menunjukkan cara membuat dan melacak garis keturunan dengan eksperimen SageMaker AI yang dijalankan dengan menggunakan metode yang tercantum sebelumnya. Bagian tersebut juga menjelaskan kasus-kasus yang tidak didukung oleh SageMaker pelatihan.

## Gunakan dekorator @remote untuk berintegrasi dengan Eksperimen SageMaker
<a name="train-remote-decorator-experiments-remote"></a>

Anda dapat membuat instance eksperimen di SageMaker AI, atau memuat eksperimen SageMaker AI saat ini dari dalam fungsi jarak jauh. Bagian berikut menunjukkan Anda menunjukkan untuk menggunakan salah satu metode. 

### Buat eksperimen dengan SageMaker Eksperimen
<a name="train-remote-decorator-experiments-remote-create"></a>

Anda dapat membuat eksperimen yang dijalankan dalam eksperimen SageMaker AI. Untuk melakukan ini, Anda meneruskan nama eksperimen, nama jalankan, dan parameter lainnya ke fungsi jarak jauh Anda.

Contoh kode berikut mengimpor nama eksperimen Anda, nama proses, dan parameter yang akan dicatat selama setiap proses. Param `param_2` eter `param_1` dan dicatat dari waktu ke waktu di dalam loop pelatihan. Parameter umum mungkin termasuk ukuran batch atau zaman. Dalam contoh ini, metrik `metric_a` dan `metric_b` dicatat untuk proses dari waktu ke waktu di dalam loop pelatihan. Metrik umum lainnya mungkin termasuk `accuracy` atau`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")
```

### Muat Eksper SageMaker imen saat ini dengan pekerjaan yang diprakarsai oleh dekorator @remote
<a name="train-remote-decorator-experiments-remote-current"></a>

Gunakan `load_run()` fungsi dari pustaka SageMaker Eksperimen untuk memuat objek run saat ini dari konteks run. Anda juga dapat menggunakan `load_run()` fungsi dalam fungsi jarak jauh Anda. Muat objek run yang diinisialisasi secara lokal oleh `with` pernyataan pada objek run seperti yang ditunjukkan dalam contoh kode berikut.

```
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)
```

## Muat percobaan yang dijalankan saat ini dalam pekerjaan yang dimulai dengan `RemoteExecutor` API
<a name="train-remote-decorator-experiments-api"></a>

Anda juga dapat memuat percobaan SageMaker AI saat ini yang dijalankan jika pekerjaan Anda dimulai dengan `RemoteExecutor` API. Contoh kode berikut menunjukkan cara menggunakan `RemoteExecutor` API dengan `load_run` fungsi SageMaker Eksperimen. Anda melakukan ini untuk memuat percobaan SageMaker AI yang dijalankan saat ini dan menangkap metrik dalam pekerjaan yang dikirimkan oleh`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)
```

## Penggunaan yang tidak didukung untuk SageMaker Eksperimen saat membuat anotasi kode Anda dengan dekorator @remote
<a name="train-remote-decorator-experiments-unsupported"></a>

SageMaker AI tidak mendukung meneruskan objek `Run` tipe ke fungsi @remote atau menggunakan `Run` objek global. Contoh berikut menunjukkan kode yang akan melemparkan a`SerializationError`.

Contoh kode berikut mencoba meneruskan objek `Run` tipe ke dekorator @remote, dan menghasilkan kesalahan.

```
@remote
def func(run: Run):
    run.log_metrics("metric_a", 1.0)
    
with Run(...) as run:
    func(run) ---> SerializationError caused by NotImplementedError
```

Contoh kode berikut mencoba menggunakan `run` objek global yang dibuat di luar fungsi jarak jauh. Dalam contoh kode, `train()` fungsi didefinisikan di dalam `with Run` konteks, merujuk objek run global dari dalam. Ketika `train()` dipanggil, itu menghasilkan kesalahan.

```
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
```