

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

# Mempersiapkan dan menjalankan pekerjaan pelatihan dengan SageMaker Profiler
<a name="profiler-prepare"></a>

Menyiapkan untuk menjalankan pekerjaan pelatihan dengan SageMaker Profiler terdiri dari dua langkah: mengadaptasi skrip pelatihan dan mengonfigurasi peluncur pekerjaan SageMaker pelatihan.

**Topics**
+ [Langkah 1: Sesuaikan skrip pelatihan Anda menggunakan modul SageMaker Profiler Python](#profiler-prepare-training-script)
+ [Langkah 2: Buat estimator kerangka kerja SageMaker AI dan aktifkan SageMaker Profiler](#profiler-profilerconfig)
+ [(Opsional) Instal paket SageMaker Profiler Python](#profiler-install-python-package)

## Langkah 1: Sesuaikan skrip pelatihan Anda menggunakan modul SageMaker Profiler Python
<a name="profiler-prepare-training-script"></a>

Untuk mulai menangkap kernel berjalan pada GPU saat tugas pelatihan berjalan, modifikasi skrip pelatihan Anda menggunakan modul SageMaker Profiler Python. Impor pustaka `start_profiling()` dan tambahkan `stop_profiling()` metode dan untuk menentukan awal dan akhir pembuatan profil. Anda juga dapat menggunakan anotasi kustom opsional untuk menambahkan penanda dalam skrip pelatihan untuk memvisualisasikan aktivitas perangkat keras selama operasi tertentu di setiap langkah.

Perhatikan bahwa annotator mengekstrak operasi dari GPU. Untuk operasi pembuatan profil di CPU, Anda tidak perlu menambahkan anotasi tambahan apa pun. Profiling CPU juga diaktifkan saat Anda menentukan konfigurasi profil, yang akan Anda praktikkan. [Langkah 2: Buat estimator kerangka kerja SageMaker AI dan aktifkan SageMaker Profiler](#profiler-profilerconfig)

**catatan**  
Membuat profil seluruh pekerjaan pelatihan bukanlah penggunaan sumber daya yang paling efisien. Kami merekomendasikan pembuatan profil paling banyak 300 langkah pekerjaan pelatihan.

**penting**  
Rilis pada [14 Desember 2023](profiler-release-notes.md#profiler-release-notes-20231214) melibatkan perubahan besar. Nama paket SageMaker Profiler Python diubah `smppy` dari menjadi. `smprof` Ini efektif dalam [SageMaker AI Framework Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) untuk TensorFlow v2.12 dan yang lebih baru.  
Jika Anda menggunakan salah satu versi sebelumnya dari [SageMaker AI Framework Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) seperti TensorFlow v2.11.0, paket Profiler SageMaker Python masih tersedia sebagai. `smppy` Jika Anda tidak yakin tentang versi atau nama paket mana yang harus Anda gunakan, ganti pernyataan impor paket SageMaker Profiler dengan cuplikan kode berikut.  

```
try:
    import smprof 
except ImportError:
    # backward-compatability for TF 2.11 and PT 1.13.1 images
    import smppy as smprof
```

**Pendekatan 1.** Gunakan pengelola konteks `smprof.annotate` untuk membubuhi keterangan fungsi lengkap

Anda dapat membungkus fungsi penuh dengan manajer `smprof.annotate()` konteks. Pembungkus ini direkomendasikan jika Anda ingin membuat profil berdasarkan fungsi alih-alih baris kode. Contoh skrip berikut menunjukkan bagaimana menerapkan manajer konteks untuk membungkus loop pelatihan dan fungsi penuh di setiap iterasi.

```
import smprof

SMProf = smprof.SMProfiler.instance()
config = smprof.Config()
config.profiler = {
    "EnableCuda": "1",
}
SMProf.configure(config)
SMProf.start_profiling()

for epoch in range(args.epochs):
    if world_size > 1:
        sampler.set_epoch(epoch)
    tstart = time.perf_counter()
    for i, data in enumerate(trainloader, 0):
        with smprof.annotate({{"step_"+str(i)}}):
            inputs, labels = data
            inputs = inputs.to("cuda", non_blocking=True)
            labels = labels.to("cuda", non_blocking=True)
    
            optimizer.zero_grad()
    
            with smprof.annotate({{"Forward"}}):
                outputs = net(inputs)
            with smprof.annotate({{"Loss"}}):
                loss = criterion(outputs, labels)
            with smprof.annotate({{"Backward"}}):
                loss.backward()
            with smprof.annotate({{"Optimizer"}}):
                optimizer.step()

SMProf.stop_profiling()
```

**Pendekatan 2.** Gunakan `smprof.annotation_begin()` dan `smprof.annotation_end()` untuk membubuhi keterangan baris kode tertentu dalam fungsi

Anda juga dapat menentukan anotasi untuk membuat profil baris kode tertentu. Anda dapat mengatur titik awal dan titik akhir pembuatan profil yang tepat pada tingkat baris kode individual, bukan oleh fungsinya. Misalnya, dalam skrip berikut, `step_annotator` didefinisikan pada awal setiap iterasi dan berakhir pada akhir iterasi. Sementara itu, anotator rinci lainnya untuk setiap operasi didefinisikan dan membungkus operasi target di setiap iterasi.

```
import smprof

SMProf = smprof.SMProfiler.instance()
config = smprof.Config()
config.profiler = {
    "EnableCuda": "1",
}
SMProf.configure(config)
SMProf.start_profiling()

for epoch in range(args.epochs):
    if world_size > 1:
        sampler.set_epoch(epoch)
    tstart = time.perf_counter()
    for i, data in enumerate(trainloader, 0):
        step_annotator = smprof.annotation_begin({{"step_" + str(i)}})

        inputs, labels = data
        inputs = inputs.to("cuda", non_blocking=True)
        labels = labels.to("cuda", non_blocking=True)
        optimizer.zero_grad()

        forward_annotator = smprof.annotation_begin({{"Forward"}})
        outputs = net(inputs)
        smprof.annotation_end(forward_annotator)

        loss_annotator = smprof.annotation_begin({{"Loss"}})
        loss = criterion(outputs, labels)
        smprof.annotation_end(loss_annotator)

        backward_annotator = smprof.annotation_begin({{"Backward"}})
        loss.backward()
        smprof.annotation_end(backward_annotator)

        optimizer_annotator = smprof.annotation_begin({{"Optimizer"}})
        optimizer.step()
        smprof.annotation_end(optimizer_annotator)

        smprof.annotation_end(step_annotator)

SMProf.stop_profiling()
```

Setelah membuat anotasi dan menyiapkan modul inisiasi profiler, simpan skrip untuk dikirimkan menggunakan peluncur pekerjaan SageMaker pelatihan di Langkah 2 berikut. Peluncur sampel mengasumsikan bahwa skrip pelatihan diberi nama. `train_with_profiler_demo.py`

## Langkah 2: Buat estimator kerangka kerja SageMaker AI dan aktifkan SageMaker Profiler
<a name="profiler-profilerconfig"></a>

Prosedur berikut menunjukkan cara menyiapkan estimator kerangka kerja SageMaker AI untuk pelatihan menggunakan SageMaker Python SDK.

1. Siapkan `profiler_config` objek menggunakan `ProfilerConfig` dan `Profiler` modul sebagai berikut.

   ```
   from sagemaker import ProfilerConfig, Profiler
   profiler_config = ProfilerConfig(
       profile_params = Profiler(cpu_profiling_duration=3600)
   )
   ```

   Berikut ini adalah deskripsi `Profiler` modul dan argumennya.
   +  `Profiler`: Modul untuk mengaktifkan SageMaker Profiler dengan pekerjaan pelatihan.
     +  `cpu_profiling_duration`(int): Tentukan durasi waktu dalam hitungan detik untuk pembuatan profil pada CPU. Defaultnya adalah 3600 detik. 

1. Buat estimator kerangka SageMaker AI dengan `profiler_config` objek yang dibuat pada langkah sebelumnya. Kode berikut menunjukkan contoh membuat PyTorch estimator. Jika Anda ingin membuat TensorFlow estimator, impor `sagemaker.tensorflow.TensorFlow` sebagai gantinya, dan tentukan salah satu [TensorFlowversi](profiler-support.md#profiler-support-frameworks-tensorflow) yang didukung oleh SageMaker Profiler. Untuk informasi selengkapnya tentang kerangka kerja dan jenis instance yang didukung, lihat[SageMaker Gambar kerangka kerja AI yang sudah diinstal sebelumnya dengan Profiler SageMaker](profiler-support.md#profiler-support-frameworks).

   ```
   import sagemaker
   from sagemaker.pytorch import PyTorch
   
   estimator = PyTorch(
       framework_version="{{2.0.0}}",
       role=sagemaker.get_execution_role(),
       entry_point="{{train_with_profiler_demo.py}}", # your training job entry point
       source_dir={{source_dir}}, # source directory for your training script
       output_path={{output_path}},
       base_job_name="{{sagemaker-profiler-demo}}",
       hyperparameters={{hyperparameters}}, # if any
       instance_count={{1}}, # Recommended to test with < 8
       instance_type={{ml.p4d.24xlarge}},
       profiler_config={{profiler_config}}
   )
   ```

1. Mulai pekerjaan pelatihan dengan menjalankan `fit` metode. Dengan`wait=False`, Anda dapat membungkam log pekerjaan pelatihan dan membiarkannya berjalan di latar belakang.

   ```
   estimator.fit(wait=False)
   ```

Saat menjalankan pekerjaan pelatihan atau setelah pekerjaan selesai, Anda dapat pergi ke topik berikutnya di [Buka aplikasi UI SageMaker Profiler](profiler-access-smprofiler-ui.md) dan mulai menjelajahi dan memvisualisasikan profil yang disimpan.

Jika Anda ingin langsung mengakses data profil yang disimpan di bucket Amazon S3, gunakan skrip berikut untuk mengambil URI S3.

```
import os
# This is an ad-hoc function to get the S3 URI
# to where the profile output data is saved
def get_detailed_profiler_output_uri(estimator):
    config_name = None
    for processing in estimator.profiler_rule_configs:
        params = processing.get("RuleParameters", dict())
        rule = config_name = params.get("rule_to_invoke", "")
        if rule == "DetailedProfilerProcessing":
            config_name = processing.get("RuleConfigurationName")
            break
    return os.path.join(
        estimator.output_path, 
        estimator.latest_training_job.name, 
        "rule-output",
        config_name,
    )

print(
    f"Profiler output S3 bucket: ", 
    get_detailed_profiler_output_uri(estimator)
)
```

## (Opsional) Instal paket SageMaker Profiler Python
<a name="profiler-install-python-package"></a>

Untuk menggunakan SageMaker Profiler pada PyTorch atau gambar TensorFlow kerangka kerja yang tidak tercantum dalam[SageMaker Gambar kerangka kerja AI yang sudah diinstal sebelumnya dengan Profiler SageMaker](profiler-support.md#profiler-support-frameworks), atau pada wadah Docker kustom Anda sendiri untuk pelatihan, Anda dapat menginstal SageMaker Profiler dengan menggunakan salah satu. [SageMaker Profiler Python paket file biner](profiler-support.md#profiler-python-package)

**Opsi 1: Instal paket SageMaker Profiler saat meluncurkan pekerjaan pelatihan**

Jika Anda ingin menggunakan SageMaker Profiler untuk melatih pekerjaan menggunakan PyTorch atau TensorFlow gambar yang tidak tercantum[SageMaker Gambar kerangka kerja AI yang sudah diinstal sebelumnya dengan Profiler SageMaker](profiler-support.md#profiler-support-frameworks), buat `requirements.txt` file dan temukan di bawah jalur yang Anda tentukan ke `source_dir` parameter estimator kerangka kerja SageMaker AI di [Langkah](#profiler-profilerconfig) 2. Untuk informasi selengkapnya tentang menyiapkan `requirements.txt` file secara umum, lihat [Menggunakan pustaka pihak ketiga](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#using-third-party-libraries) dalam dokumentasi *SageMaker Python SDK*. Dalam `requirements.txt` file, tambahkan salah satu jalur bucket S3 untuk file. [SageMaker Profiler Python paket file biner](profiler-support.md#profiler-python-package)

```
# requirements.txt
https://smppy.s3.amazonaws.com/{{tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl}}
```

**Opsi 2: Instal paket SageMaker Profiler di wadah Docker khusus Anda**

Jika Anda menggunakan wadah Docker khusus untuk pelatihan, tambahkan salah satunya [SageMaker Profiler Python paket file biner](profiler-support.md#profiler-python-package) ke Dockerfile Anda.

```
# Install the smprof package version compatible with your CUDA version
RUN pip install https://smppy.s3.amazonaws.com/{{tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl}}
```

Untuk panduan menjalankan wadah Docker khusus untuk pelatihan SageMaker AI secara umum, lihat [Mengadaptasi wadah pelatihan Anda sendiri](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html).