

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>

**catatan**  
Pemberitahuan akhir dukungan: Pada 30 Juni 2027, dukungan untuk Amazon SageMaker Profiler AWS akan berakhir. Setelah 30 Juni 2027, Anda tidak akan lagi dapat mengakses konsol Profiler atau sumber daya Profiler. Untuk informasi selengkapnya, lihat [Perubahan ketersediaan profiler](profiler-availability-change.md).

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 SageMaker AI ModelTrainer dan aktifkan SageMaker Profiler](#profiler-profilerconfig)
+ [(Opsional) Instal SageMaker paket 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 pekerjaan pelatihan sedang berjalan, ubah skrip pelatihan Anda menggunakan modul Pro SageMaker filer 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 anotator mengekstrak operasi dari GPU. Untuk operasi pembuatan profil di CPU, Anda tidak perlu menambahkan anotasi tambahan. Pembuatan profil CPU juga diaktifkan saat Anda menentukan konfigurasi pembuatan profil, yang akan Anda praktikkan[Langkah 2: Buat SageMaker AI ModelTrainer 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 [14 Desember 2023](profiler-release-notes.md#profiler-release-notes-20231214) melibatkan perubahan besar. Nama paket SageMaker Profiler Python diubah dari `smppy` menjadi`smprof`. Ini efektif di [ 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 SageMaker Profiler Python masih tersedia sebagai. `smppy` Jika Anda tidak yakin tentang versi atau nama paket mana yang harus Anda gunakan, ganti pernyataan impor dari 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 membuat anotasi fungsi penuh

Anda dapat membungkus fungsi penuh dengan pengel `smprof.annotate()` ola konteks. Pembungkus ini disarankan jika Anda ingin membuat profil berdasarkan fungsi alih-alih baris kode. Contoh skrip berikut menunjukkan cara mengimplementasikan 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 membuat anotasi baris kode tertentu dalam fungsi

Anda juga dapat menentukan anotasi untuk profil baris kode tertentu. Anda dapat mengatur titik awal dan titik akhir profil yang tepat pada tingkat baris kode individu, bukan berdasarkan fungsi. Misalnya, dalam skrip berikut, `step_annotator` didefinisikan di awal setiap iterasi dan berakhir pada akhir iterasi. Sementara itu, anotator terperinci lainnya untuk setiap operasi ditentukan 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 SageMaker AI ModelTrainer dan aktifkan SageMaker Profiler
<a name="profiler-profilerconfig"></a>

Prosedur berikut menunjukkan cara mempersiapkan SageMaker AI ModelTrainer untuk pelatihan menggunakan SageMaker Python SDK.

1. Siapkan `profiler_config` objek menggunakan `Profiler` modul `ProfilerConfig` dan 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 detik untuk pembuatan profil pada CPU. Defaultnya adalah 3600 detik. 

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

   ```
   from sagemaker.train import ModelTrainer
   from sagemaker.train.configs import SourceCode
   from sagemaker.core.helper.session_helper import get_execution_role
   from sagemaker.core import image_uris
   
   training_image = image_uris.retrieve(
       framework="pytorch", region=region, version="{{2.0.0}}",
       image_scope="training", instance_type={{ml.p4d.24xlarge}}
   )
   
   model_trainer = ModelTrainer(
       training_image=training_image,
       role=get_execution_role(),
       source_code=SourceCode(entry_script="{{train_with_profiler_demo.py}}", source_dir={{source_dir}}), # your training job entry point
       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 `train` metode. Dengan`wait=False`, Anda dapat membungkam log pekerjaan pelatihan dan membiarkannya berjalan di latar belakang.

   ```
   model_trainer.train(wait=False)
   ```

Saat menjalankan pekerjaan pelatihan atau setelah pekerjaan selesai, Anda dapat pergi ke topik berikutnya di [Buka aplikasi SageMaker Profiler UI](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(model_trainer):
    config_name = None
    for processing in model_trainer.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(
        model_trainer.output_path, 
        model_trainer.latest_training_job.name, 
        "rule-output",
        config_name,
    )

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

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

Untuk menggunakan SageMaker Profiler pada PyTorch atau gambar TensorFlow kerangka kerja yang tidak terdaftar di[SageMaker Gambar kerangka 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 dari[SageMaker File biner paket Profiler Python](profiler-support.md#profiler-python-package).

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

Jika Anda ingin menggunakan SageMaker Profiler untuk pekerjaan pelatihan menggunakan PyTorch atau TensorFlow gambar yang tidak tercantum[SageMaker Gambar kerangka 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 SageMaker AI ModelTrainer di [ Langkah 2](#profiler-profilerconfig). Untuk informasi selengkapnya tentang menyiapkan `requirements.txt` file secara umum, lihat [ Menggunakan pustaka pihak ketiga ](https://sagemaker.readthedocs.io/en/stable/api/sagemaker_train.html) dalam dokumentasi * SageMaker Python SDK*. Dalam `requirements.txt` file, tambahkan salah satu jalur bucket S3 untuk[SageMaker File biner paket Profiler Python](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 kustom Anda **

Jika Anda menggunakan wadah Docker khusus untuk pelatihan, tambahkan salah satunya [SageMaker File biner paket Profiler Python](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 Meng [ adaptasi wadah ](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html) pelatihan Anda sendiri.