

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

# Menyesuaikan SageMaker HyperPod cluster menggunakan skrip siklus hidup
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm"></a>

SageMaker HyperPod selalu menawarkan cluster up-and-running komputasi, yang sangat dapat disesuaikan karena Anda dapat menulis skrip siklus hidup untuk memberi tahu SageMaker HyperPod cara mengatur sumber daya cluster. Topik berikut adalah praktik terbaik untuk menyiapkan skrip siklus hidup untuk menyiapkan SageMaker HyperPod cluster dengan alat pengelola beban kerja sumber terbuka.

Topik berikut membahas praktik terbaik mendalam untuk menyiapkan skrip siklus hidup untuk menyiapkan konfigurasi Slurm. SageMaker HyperPod

## Ikhtisar tingkat tinggi
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-highlevel-overview"></a>

Prosedur berikut adalah aliran utama penyediaan HyperPod cluster dan mengaturnya dengan Slurm. Langkah-langkahnya diatur dalam urutan pendekatan ***bottom-up***.

1. Rencanakan bagaimana Anda ingin membuat node Slurm pada sebuah HyperPod cluster. Misalnya, jika Anda ingin mengkonfigurasi dua node Slurm, Anda harus mengatur dua grup instance dalam sebuah HyperPod cluster.

1. Siapkan konfigurasi Slurm. Pilih salah satu pendekatan berikut:
   + **Opsi A: Konfigurasi berbasis API (disarankan)** — Tentukan tipe dan partisi node Slurm secara langsung di payload `CreateCluster` API menggunakan dalam setiap grup instans. `SlurmConfig` Dengan pendekatan ini:
     + Tidak ada `provisioning_parameters.json` file yang dibutuhkan
     + Topologi slurm didefinisikan dalam payload API bersama definisi grup instance
     + FSx filesystem dikonfigurasi melalui per-instance-group `InstanceStorageConfigs`
     + Strategi konfigurasi dikendalikan melalui `Orchestrator.Slurm.SlurmConfigStrategy`

     Contoh `SlurmConfig` dalam grup instance:

     ```
     {
         "InstanceGroupName": "gpu-compute",
         "InstanceType": "ml.p4d.24xlarge",
         "InstanceCount": 8,
         "SlurmConfig": {
             "NodeType": "Compute",
             "PartitionNames": ["gpu-training"]
         }
     }
     ```
   + **Opsi B: Konfigurasi lama** - Siapkan `provisioning_parameters.json` file, yang merupakan [Formulir konfigurasi untuk provisioning\$1parameters.json](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-provisioning-forms-slurm) file. `provisioning_parameters.json`harus berisi informasi konfigurasi simpul Slurm untuk disediakan di cluster. HyperPod Ini harus mencerminkan desain node Slurm dari Langkah 1.

1. Siapkan satu set skrip siklus hidup untuk menyiapkan Slurm on HyperPod untuk menginstal paket perangkat lunak dan menyiapkan lingkungan di cluster untuk kasus penggunaan Anda. Anda harus menyusun skrip siklus hidup untuk dijalankan secara kolektif dalam skrip Python pusat (`lifecycle_script.py`), dan menulis skrip shell titik masuk () untuk menjalankan skrip Python. `on_create.sh` Skrip shell entrypoint adalah apa yang perlu Anda berikan ke permintaan pembuatan HyperPod cluster nanti di Langkah 5. 

   Juga, perhatikan bahwa Anda harus menulis skrip `resource_config.json` yang diharapkan akan dihasilkan oleh HyperPod selama pembuatan cluster. `resource_config.json`berisi informasi sumber daya HyperPod cluster seperti alamat IP, jenis instance, dan ARNs, dan apa yang perlu Anda gunakan untuk mengkonfigurasi Slurm.

1. Kumpulkan semua file dari langkah sebelumnya ke dalam folder. Struktur folder tergantung pada pendekatan konfigurasi yang Anda pilih di Langkah 2.

   Jika Anda memilih Opsi A (konfigurasi berbasis API):

   Folder Anda hanya membutuhkan skrip siklus hidup untuk tugas penyiapan khusus. Konfigurasi slurm dan FSx pemasangan ditangani secara otomatis HyperPod berdasarkan muatan API.

   ```
   └── lifecycle_files // your local folder
   
       ├── on_create.sh
       ├── lifecycle_script.py
       └── ... // more setup scripts to be fed into lifecycle_script.py
   ```
**catatan**  
`provisioning_parameters.json`File tidak diperlukan saat menggunakan konfigurasi berbasis API.

   Jika Anda memilih Opsi B (konfigurasi lama):

   Folder Anda harus menyertakan `provisioning_parameters.json` dan set lengkap skrip siklus hidup.

   ```
   └── lifecycle_files // your local folder
   
       ├── provisioning_parameters.json
       ├── on_create.sh
       ├── lifecycle_script.py
       └── ... // more setup scrips to be fed into lifecycle_script.py
   ```

1. Unggah semua file ke bucket S3. Salin dan simpan jalur bucket S3. Perhatikan bahwa Anda harus membuat jalur bucket S3 dimulai `sagemaker-` karena Anda harus memilih yang [Peran IAM untuk SageMaker HyperPod](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod) terpasang [`AmazonSageMakerClusterInstanceRolePolicy`](security-iam-awsmanpol-AmazonSageMakerClusterInstanceRolePolicy.md), yang hanya mengizinkan jalur bucket S3 yang dimulai dengan awalan. `sagemaker-` Perintah berikut adalah contoh perintah untuk meng-upload semua file ke bucket S3.

   ```
   aws s3 cp --recursive ./lifecycle_files s3://sagemaker-hyperpod-lifecycle/src
   ```

1. Siapkan permintaan pembuatan HyperPod cluster. 
   + Opsi 1: Jika Anda menggunakan AWS CLI, tulis permintaan pembuatan cluster dalam format JSON (`create_cluster.json`) mengikuti petunjuk di[Buat cluster baru](sagemaker-hyperpod-operate-slurm-cli-command.md#sagemaker-hyperpod-operate-slurm-cli-command-create-cluster).
   + Opsi 2: Jika Anda menggunakan UI konsol SageMaker AI, isi formulir **Buat permintaan cluster** di UI HyperPod konsol dengan mengikuti petunjuk di[Buat SageMaker HyperPod cluster](sagemaker-hyperpod-operate-slurm-console-ui.md#sagemaker-hyperpod-operate-slurm-console-ui-create-cluster).

   Pada tahap ini, pastikan Anda membuat grup instance dalam struktur yang sama dengan yang Anda rencanakan di Langkah 1 dan 2. Selain itu, pastikan Anda menentukan bucket S3 dari Langkah 5 di formulir permintaan.

1. Kirim permintaan pembuatan cluster. HyperPod menyediakan cluster berdasarkan permintaan, dan kemudian membuat `resource_config.json` file dalam instance HyperPod cluster, dan menyiapkan Slurm di cluster yang menjalankan skrip siklus hidup.

Topik berikut memandu Anda dan menyelami detail tentang cara mengatur file konfigurasi dan skrip siklus hidup agar berfungsi dengan baik selama HyperPod pembuatan klaster.

**Topics**
+ [Ikhtisar tingkat tinggi](#sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-highlevel-overview)
+ [Skrip siklus hidup dasar yang disediakan oleh HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-base-config.md)
+ [Konfigurasi tertentu apa yang HyperPod dikelola dalam file konfigurasi Slurm](sagemaker-hyperpod-lifecycle-best-practices-slurm-what-hyperpod-overrides-in-slurm-conf.md)
+ [Rotasi log slurm](sagemaker-hyperpod-slurm-log-rotation.md)
+ [Memasang Amazon FSx untuk Lustre dan Amazon FSx untuk OpenZFS ke sebuah cluster HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-setup-with-fsx.md)
+ [Memvalidasi file konfigurasi JSON sebelum membuat cluster Slurm HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-validate-json-files.md)
+ [Memvalidasi runtime sebelum menjalankan beban kerja produksi pada cluster Slurm HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-validate-runtime.md)
+ [Mengembangkan skrip siklus hidup secara interaktif pada node cluster HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-develop-lifecycle-scripts.md)

# Skrip siklus hidup dasar yang disediakan oleh HyperPod
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-base-config"></a>

Bagian ini memandu Anda melalui setiap komponen aliran dasar pengaturan Slurm on HyperPod dalam pendekatan ***top-down***. Ini dimulai dari menyiapkan permintaan pembuatan HyperPod cluster untuk menjalankan `CreateCluster` API, dan menyelam jauh ke dalam struktur hierarkis hingga skrip siklus hidup. Gunakan contoh skrip siklus hidup yang disediakan di repositori Pelatihan Terdistribusi [Awsome](https://github.com/aws-samples/awsome-distributed-training/). GitHub Kloning repositori dengan menjalankan perintah berikut.

```
git clone https://github.com/aws-samples/awsome-distributed-training/
```

Skrip siklus hidup dasar untuk menyiapkan cluster Slurm tersedia di. SageMaker HyperPod [https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config)

```
cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config
```

Diagram alur berikut menunjukkan gambaran rinci tentang bagaimana Anda harus mendesain skrip siklus hidup dasar. Deskripsi di bawah diagram dan panduan prosedural menjelaskan cara kerjanya selama panggilan HyperPod `CreateCluster` API.

![\[Diagram alir rinci pembuatan HyperPod cluster dan struktur skrip siklus hidup.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/hyperpod-lifecycle-structure.png)


***Gambar:** Diagram alir rinci pembuatan HyperPod cluster dan struktur skrip siklus hidup. (1) Panah putus-putus diarahkan ke tempat kotak “dipanggil” dan menunjukkan aliran file konfigurasi dan persiapan skrip siklus hidup. Ini dimulai dari mempersiapkan `provisioning_parameters.json` dan siklus hidup skrip. Ini kemudian dikodekan `lifecycle_script.py` untuk eksekusi kolektif secara berurutan. Dan eksekusi `lifecycle_script.py` skrip dilakukan oleh skrip `on_create.sh` shell, yang akan dijalankan di terminal HyperPod instance. (2) Panah padat menunjukkan aliran pembuatan HyperPod cluster utama dan bagaimana kotak “dipanggil” atau “diserahkan ke”. `on_create.sh`diperlukan untuk permintaan pembuatan cluster, baik di dalam `create_cluster.json` atau formulir **Create a cluster** request di UI konsol. Setelah Anda mengirimkan permintaan, HyperPod jalankan `CreateCluster` API berdasarkan informasi konfigurasi yang diberikan dari permintaan dan skrip siklus hidup. (3) Panah putus-putus menunjukkan bahwa HyperPod platform membuat `resource_config.json` dalam instance cluster selama penyediaan sumber daya cluster. `resource_config.json`berisi informasi sumber daya HyperPod cluster seperti ARN cluster, tipe instance, dan alamat IP. Penting untuk dicatat bahwa Anda harus menyiapkan skrip siklus hidup untuk mengharapkan `resource_config.json` file selama pembuatan cluster. Untuk informasi lebih lanjut, lihat panduan prosedural di bawah ini.*

Panduan prosedural berikut menjelaskan apa yang terjadi selama pembuatan HyperPod klaster dan bagaimana skrip siklus hidup dasar dirancang.

1. `create_cluster.json`— Untuk mengirimkan permintaan pembuatan HyperPod cluster, Anda menyiapkan file `CreateCluster` permintaan dalam format JSON. Dalam contoh praktik terbaik ini, kami berasumsi bahwa file permintaan diberi nama`create_cluster.json`. Menulis `create_cluster.json` untuk menyediakan HyperPod cluster dengan grup instance. Praktik terbaik adalah menambahkan jumlah grup instans yang sama dengan jumlah node Slurm yang Anda rencanakan untuk dikonfigurasi di HyperPod cluster. Pastikan Anda memberikan nama khusus ke grup instance yang akan Anda tetapkan ke node Slurm yang akan Anda siapkan.

   Selain itu, Anda diminta untuk menentukan jalur bucket S3 untuk menyimpan seluruh rangkaian file konfigurasi dan skrip siklus hidup Anda ke nama bidang `InstanceGroups.LifeCycleConfig.SourceS3Uri` dalam formulir `CreateCluster` permintaan, dan menentukan nama file skrip shell titik masuk (anggap namanya). `on_create.sh` `InstanceGroups.LifeCycleConfig.OnCreate`
**catatan**  
Jika Anda menggunakan formulir **Create a cluster** submission di UI HyperPod konsol, konsol mengelola pengisian dan pengiriman `CreateCluster` permintaan atas nama Anda, dan menjalankan `CreateCluster` API di backend. Dalam hal ini, Anda tidak perlu membuat`create_cluster.json`; sebagai gantinya, pastikan Anda menentukan informasi konfigurasi cluster yang benar ke formulir **Create a cluster** submission.

1. `on_create.sh`— Untuk setiap grup instance, Anda perlu menyediakan skrip shell entrypoint,, untuk menjalankan perintah`on_create.sh`, menjalankan skrip untuk menginstal paket perangkat lunak, dan mengatur lingkungan HyperPod cluster dengan Slurm. Dua hal yang perlu Anda persiapkan `provisioning_parameters.json` diperlukan oleh HyperPod untuk menyiapkan Slurm dan satu set skrip siklus hidup untuk menginstal paket perangkat lunak. Script ini harus ditulis untuk menemukan dan menjalankan file-file berikut seperti yang ditunjukkan dalam contoh script di [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/on_create.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/on_create.sh).
**catatan**  
Pastikan Anda mengunggah seluruh rangkaian skrip siklus hidup ke lokasi S3 yang Anda tentukan. `create_cluster.json` Anda juga harus menempatkan Anda `provisioning_parameters.json` di lokasi yang sama.

   1. `provisioning_parameters.json`- Ini adalah[Formulir konfigurasi untuk provisioning\$1parameters.json](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-provisioning-forms-slurm). `on_create.sh`Skrip menemukan file JSON ini dan mendefinisikan variabel lingkungan untuk mengidentifikasi jalur ke sana. Melalui file JSON ini, Anda dapat mengonfigurasi node Slurm dan opsi penyimpanan seperti Amazon FSx untuk Lustre untuk Slurm untuk berkomunikasi dengannya. Di`provisioning_parameters.json`, pastikan bahwa Anda menetapkan grup instance HyperPod cluster menggunakan nama yang Anda tentukan `create_cluster.json` ke node Slurm dengan tepat berdasarkan bagaimana Anda berencana untuk mengaturnya.

      Diagram berikut menunjukkan contoh bagaimana dua file konfigurasi JSON `create_cluster.json` dan `provisioning_parameters.json` harus ditulis untuk menetapkan kelompok HyperPod instance untuk node Slurm. Dalam contoh ini, kita mengasumsikan kasus pengaturan tiga node Slurm: controller (management) node, log-in node (yang opsional), dan compute (worker) node.
**Tip**  
Untuk membantu Anda memvalidasi dua file JSON ini, tim HyperPod layanan menyediakan skrip validasi,. [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/validate-config.py](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/validate-config.py) Untuk mempelajari selengkapnya, lihat [Memvalidasi file konfigurasi JSON sebelum membuat cluster Slurm HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-validate-json-files.md).  
![\[Perbandingan langsung antara file.json.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/hyperpod-lifecycle-slurm-config.png)

      ***Gambar:** Perbandingan langsung antara `create_cluster.json` untuk pembuatan HyperPod cluster dan `provisiong_params.json` untuk konfigurasi Slurm. Jumlah grup instance `create_cluster.json` harus sesuai dengan jumlah node yang ingin Anda konfigurasikan sebagai node Slurm. Dalam kasus contoh pada gambar, tiga node Slurm akan dikonfigurasi pada HyperPod sekelompok tiga grup instance. Anda harus menetapkan grup instance HyperPod cluster ke node Slurm dengan menentukan nama grup instance yang sesuai.*

   1. `resource_config.json`— Selama pembuatan cluster, `lifecycle_script.py` skrip ditulis untuk mengharapkan `resource_config.json` file dari HyperPod. File ini berisi informasi tentang cluster, seperti jenis instance dan alamat IP.

      Saat Anda menjalankan `CreateCluster` API, HyperPod buat file konfigurasi sumber daya `/opt/ml/config/resource_config.json` berdasarkan `create_cluster.json` file. Path file disimpan ke variabel lingkungan bernama`SAGEMAKER_RESOURCE_CONFIG_PATH`. 
**penting**  
`resource_config.json`File ini dibuat secara otomatis oleh HyperPod platform, dan Anda TIDAK perlu membuatnya. Kode berikut adalah untuk menunjukkan contoh `resource_config.json` yang akan dibuat dari pembuatan cluster berdasarkan `create_cluster.json` pada langkah sebelumnya, dan untuk membantu Anda memahami apa yang terjadi di backend dan bagaimana tampilan yang dihasilkan secara otomatis`resource_config.json`.

      ```
      {
      
          "ClusterConfig": {
              "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/abcde01234yz",
              "ClusterName": "your-hyperpod-cluster"
          },
          "InstanceGroups": [
              {
                  "Name": "controller-machine",
                  "InstanceType": "ml.c5.xlarge",
                  "Instances": [
                      {
                          "InstanceName": "controller-machine-1",
                          "AgentIpAddress": "111.222.333.444",
                          "CustomerIpAddress": "111.222.333.444",
                          "InstanceId": "i-12345abcedfg67890"
                      }
                  ]
              },
              {
                  "Name": "login-group",
                  "InstanceType": "ml.m5.xlarge",
                  "Instances": [
                      {
                          "InstanceName": "login-group-1",
                          "AgentIpAddress": "111.222.333.444",
                          "CustomerIpAddress": "111.222.333.444",
                          "InstanceId": "i-12345abcedfg67890"
                      }
                  ]
              },
              {
                  "Name": "compute-nodes",
                  "InstanceType": "ml.trn1.32xlarge",
                  "Instances": [
                      {
                          "InstanceName": "compute-nodes-1",
                          "AgentIpAddress": "111.222.333.444",
                          "CustomerIpAddress": "111.222.333.444",
                          "InstanceId": "i-12345abcedfg67890"
                      },
                      {
                          "InstanceName": "compute-nodes-2",
                          "AgentIpAddress": "111.222.333.444",
                          "CustomerIpAddress": "111.222.333.444",
                          "InstanceId": "i-12345abcedfg67890"
                      },
                      {
                          "InstanceName": "compute-nodes-3",
                          "AgentIpAddress": "111.222.333.444",
                          "CustomerIpAddress": "111.222.333.444",
                          "InstanceId": "i-12345abcedfg67890"
                      },
                      {
                          "InstanceName": "compute-nodes-4",
                          "AgentIpAddress": "111.222.333.444",
                          "CustomerIpAddress": "111.222.333.444",
                          "InstanceId": "i-12345abcedfg67890"
                      }
                  ]
              }
          ]
      }
      ```

   1. `lifecycle_script.py`— Ini adalah skrip Python utama yang secara kolektif menjalankan skrip siklus hidup yang menyiapkan Slurm di cluster saat sedang disediakan. HyperPod Skrip ini membaca di dalam `provisioning_parameters.json` dan `resource_config.json` dari jalur yang ditentukan atau diidentifikasi`on_create.sh`, meneruskan informasi yang relevan ke setiap skrip siklus hidup, dan kemudian menjalankan skrip siklus hidup secara berurutan.

      Skrip siklus hidup adalah sekumpulan skrip yang Anda memiliki fleksibilitas lengkap untuk menyesuaikan untuk menginstal paket perangkat lunak dan mengatur konfigurasi yang diperlukan atau kustom selama pembuatan cluster, seperti menyiapkan Slurm, membuat pengguna, menginstal Conda atau Docker. [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/lifecycle_script.py](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/lifecycle_script.py)Skrip sampel disiapkan untuk menjalankan skrip siklus hidup dasar lainnya di repositori, seperti meluncurkan Slurm deamons (), memasang Amazon untuk FSx Lustre () [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/start_slurm.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/start_slurm.sh), dan menyiapkan akuntansi MariaDB () dan akuntansi RDS (). [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/setup_mariadb_accounting.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/setup_mariadb_accounting.sh) Anda juga dapat menambahkan lebih banyak skrip, mengemasnya di bawah direktori yang sama, dan menambahkan baris kode `lifecycle_script.py` untuk membiarkan HyperPod menjalankan skrip. *Untuk informasi selengkapnya tentang skrip siklus hidup dasar, lihat juga [3.1 Skrip Siklus Hidup di repositori Pelatihan Terdistribusi Awsome](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod#31-lifecycle-scripts). GitHub *
**catatan**  
HyperPod berjalan [SageMaker HyperPod DLAMI](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-hyperpod-ami) pada setiap instance cluster, dan AMI memiliki paket perangkat lunak pra-instal yang sesuai dengan kompatibilitas antara mereka dan fungsionalitas. HyperPod Perhatikan bahwa jika Anda menginstal ulang salah satu paket pra-instal, Anda bertanggung jawab untuk menginstal paket yang kompatibel dan perhatikan bahwa beberapa HyperPod fungsi mungkin tidak berfungsi seperti yang diharapkan.

      Selain pengaturan default, lebih banyak skrip untuk menginstal perangkat lunak berikut tersedia di bawah folder. [https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/utils](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/utils) `lifecycle_script.py`File sudah disiapkan untuk menyertakan baris kode untuk menjalankan skrip instalasi, jadi lihat item berikut untuk mencari baris tersebut dan hapus komentar untuk mengaktifkannya.

      1. [Baris kode berikut adalah untuk menginstal [Docker](https://www.docker.com/), [Enroot](https://github.com/NVIDIA/enroot), dan Pyxis.](https://github.com/NVIDIA/pyxis) Paket-paket ini diperlukan untuk menjalankan kontainer Docker pada cluster Slurm. 

         Untuk mengaktifkan langkah instalasi ini, atur `enable_docker_enroot_pyxis` parameter ke `True` dalam [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/config.py](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/config.py)file.

         ```
         # Install Docker/Enroot/Pyxis
         if Config.enable_docker_enroot_pyxis:
             ExecuteBashScript("./utils/install_docker.sh").run()
             ExecuteBashScript("./utils/install_enroot_pyxis.sh").run(node_type)
         ```

      1. Anda dapat mengintegrasikan HyperPod klaster Anda dengan [Amazon Managed Service untuk Prometheus](https://docs.aws.amazon.com/prometheus/latest/userguide/what-is-Amazon-Managed-Service-Prometheus.html) dan Grafana [Terkelola Amazon](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html) untuk mengekspor metrik tentang node cluster dan cluster ke dasbor Grafana HyperPod Terkelola Amazon. [https://github.com/NVIDIA/dcgm-exporter](https://github.com/NVIDIA/dcgm-exporter) Untuk informasi selengkapnya tentang menginstal paket eksportir dan menggunakan dasbor Grafana di ruang kerja Grafana yang Dikelola Amazon, lihat. [SageMaker HyperPod pemantauan sumber daya cluster](sagemaker-hyperpod-cluster-observability-slurm.md) 

         Untuk mengaktifkan langkah instalasi ini, atur `enable_observability` parameter ke `True` dalam [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/config.py](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/config.py)file.

         ```
         # Install metric exporting software and Prometheus for observability
         
         if Config.enable_observability:
             if node_type == SlurmNodeType.COMPUTE_NODE:
                 ExecuteBashScript("./utils/install_docker.sh").run()
                 ExecuteBashScript("./utils/install_dcgm_exporter.sh").run()
                 ExecuteBashScript("./utils/install_efa_node_exporter.sh").run()
             
             if node_type == SlurmNodeType.HEAD_NODE:
                 wait_for_scontrol()
                 ExecuteBashScript("./utils/install_docker.sh").run()
                 ExecuteBashScript("./utils/install_slurm_exporter.sh").run()
                 ExecuteBashScript("./utils/install_prometheus.sh").run()
         ```

1. Pastikan Anda mengunggah semua file konfigurasi dan skrip pengaturan dari **Langkah 2** ke bucket S3 yang Anda berikan dalam `CreateCluster` permintaan di **Langkah** 1. Misalnya, asumsikan bahwa Anda `create_cluster.json` memiliki yang berikut ini.

   ```
   "LifeCycleConfig": { 
   
       "SourceS3URI": "s3://sagemaker-hyperpod-lifecycle/src",
       "OnCreate": "on_create.sh"
   }
   ```

   Kemudian, Anda `"s3://sagemaker-hyperpod-lifecycle/src"` harus berisi`on_create.sh`,`lifecycle_script.py`,`provisioning_parameters.json`, dan semua skrip pengaturan lainnya. Asumsikan bahwa Anda telah menyiapkan file dalam folder lokal sebagai berikut.

   ```
   └── lifecycle_files // your local folder
       ├── provisioning_parameters.json
       ├── on_create.sh
       ├── lifecycle_script.py
       └── ... // more setup scrips to be fed into lifecycle_script.py
   ```

   Untuk mengunggah file, gunakan perintah S3 sebagai berikut.

   ```
   aws s3 cp --recursive ./lifecycle_scripts s3://sagemaker-hyperpod-lifecycle/src
   ```

# Konfigurasi tertentu apa yang HyperPod dikelola dalam file konfigurasi Slurm
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm-what-hyperpod-overrides-in-slurm-conf"></a>

Saat Anda membuat klaster Slurm aktif HyperPod, HyperPod agen akan menyiapkan [https://slurm.schedmd.com/gres.conf.html](https://slurm.schedmd.com/gres.conf.html)file [https://slurm.schedmd.com/slurm.conf.html](https://slurm.schedmd.com/slurm.conf.html)dan file `/opt/slurm/etc/` untuk mengelola klaster Slurm berdasarkan permintaan pembuatan klaster dan skrip siklus HyperPod hidup Anda. Daftar berikut menunjukkan parameter spesifik mana yang ditangani dan ditimpa HyperPod agen. 

**penting**  
Kami sangat menyarankan agar Anda **tidak** mengubah parameter ini dikelola oleh HyperPod.
+ Dalam [https://slurm.schedmd.com/slurm.conf.html](https://slurm.schedmd.com/slurm.conf.html), HyperPod mengatur parameter dasar berikut:`ClusterName`,`SlurmctldHost`,`PartitionName`, dan`NodeName`.

  Juga, untuk mengaktifkan [Pemulihan simpul otomatis dan lanjutkan otomatis](sagemaker-hyperpod-resiliency-slurm-auto-resume.md) fungsionalitas, HyperPod membutuhkan `TaskPlugin` dan `SchedulerParameters` parameter yang ditetapkan sebagai berikut. HyperPod Agen mengatur dua parameter ini dengan nilai yang diperlukan secara default.

  ```
  TaskPlugin=task/none
  SchedulerParameters=permit_job_expansion
  ```
+ Di [https://slurm.schedmd.com/gres.conf.html](https://slurm.schedmd.com/gres.conf.html), HyperPod mengelola `NodeName` node GPU.

# Rotasi log slurm
<a name="sagemaker-hyperpod-slurm-log-rotation"></a>

SageMaker HyperPod menyediakan rotasi log otomatis untuk log daemon Slurm untuk membantu mengelola penggunaan ruang disk dan mempertahankan kinerja sistem. Rotasi log sangat penting untuk mencegah log menghabiskan ruang disk yang berlebihan dan memastikan operasi sistem yang optimal dengan secara otomatis mengarsipkan dan menghapus file log lama sambil mempertahankan informasi logging terbaru. Rotasi log slurm diaktifkan secara default saat Anda membuat cluster.

## Cara kerja rotasi log
<a name="sagemaker-hyperpod-slurm-log-rotation-how-it-works"></a>

Saat diaktifkan, konfigurasi rotasi log:
+ Memantau semua file log Slurm dengan ekstensi yang `.log` terletak di `/var/log/slurm/` folder pada controller, login dan compute node.
+ Memutar log saat ukurannya mencapai 50 MB.
+ Mempertahankan hingga dua file log yang diputar sebelum menghapusnya.
+ Mengirim SIGUSR2 sinyal ke daemon Slurm (`slurmctld`,`slurmd`, dan`slurmdbd`) setelah rotasi.

## Daftar file log yang diputar
<a name="sagemaker-hyperpod-slurm-log-rotation-log-files-list"></a>

Log slurm terletak di direktori. `/var/log/slurm/` Rotasi log diaktifkan untuk semua file yang cocok`/var/log/slurm/*.log`. Ketika rotasi terjadi, file yang diputar memiliki sufiks numerik (seperti). `slurmd.log.1` Daftar berikut ini tidak lengkap tetapi menunjukkan beberapa file log penting yang berputar secara otomatis:
+ `/var/log/slurm/slurmctld.log`
+ `/var/log/slurm/slurmd.log`
+ `/var/log/slurm/slurmdb.log`
+ `/var/log/slurm/slurmrestd.log`

## Mengaktifkan atau menonaktifkan rotasi log
<a name="sagemaker-hyperpod-slurm-log-rotation-enable-disable"></a>

Anda dapat mengontrol fitur rotasi log menggunakan `enable_slurm_log_rotation` parameter dalam `config.py` skrip skrip siklus hidup klaster Anda, seperti yang ditunjukkan pada contoh berikut:

```
class Config:
    # Set false if you want to disable log rotation of Slurm daemon logs
    enable_slurm_log_rotation = True  # Default value
```

Untuk menonaktifkan rotasi log, atur parameter ke`False`, seperti yang ditunjukkan pada contoh berikut:

```
enable_slurm_log_rotation = False
```

**catatan**  
Skrip siklus hidup berjalan di semua node Slurm (pengontrol, login, dan node komputasi) selama pembuatan cluster. Mereka juga berjalan pada node baru ketika ditambahkan ke cluster. Memperbarui konfigurasi rotasi log harus dilakukan secara manual setelah pembuatan cluster. Konfigurasi rotasi log disimpan di`/etc/logrotate.d/sagemaker-hyperpod-slurm`. Kami menyarankan agar rotasi log diaktifkan untuk mencegah file log menghabiskan ruang disk yang berlebihan. Untuk menonaktifkan rotasi log, hapus `sagemaker-hyperpod-slurm` file atau komentari isinya dengan menambahkan `#` di awal setiap baris dalam `sagemaker-hyperpod-slurm` file.

## Pengaturan rotasi log default
<a name="sagemaker-hyperpod-slurm-log-rotation-default-settings"></a>

Pengaturan berikut dikonfigurasi secara otomatis untuk setiap file log yang diputar:


| Pengaturan | Nilai | Deskripsi | 
| --- | --- | --- | 
| rotate | 2 | Jumlah file log yang diputar untuk disimpan | 
| size | 50 MB | Ukuran maksimum sebelum rotasi | 
| copytruncate | diaktifkan | Menyalin dan memotong file log asli | 
| compress | dinonaktifkan | Log yang diputar tidak dikompresi | 
| missingok | diaktifkan | Tidak ada kesalahan jika file log hilang | 
| notifempty | diaktifkan | Tidak memutar file kosong | 
| noolddir | diaktifkan | File yang diputar tetap berada di direktori yang sama | 

# Memasang Amazon FSx untuk Lustre dan Amazon FSx untuk OpenZFS ke sebuah cluster HyperPod
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-setup-with-fsx"></a>

Untuk memasang sistem file bersama Amazon FSx for Lustre ke HyperPod kluster Anda, siapkan yang berikut ini.

1. Gunakan Amazon VPC Anda. 

   1. Agar instance HyperPod klaster dapat berkomunikasi dalam VPC Anda, pastikan Anda melampirkan [Menyiapkan SageMaker HyperPod dengan VPC Amazon khusus](sagemaker-hyperpod-prerequisites.md#sagemaker-hyperpod-prerequisites-optional-vpc) ke peran IAM untuk. SageMaker HyperPod 

   1. Dalam`create_cluster.json`, sertakan informasi VPC berikut.

      ```
      "VpcConfig": { 
          "SecurityGroupIds": [ "string" ],
          "Subnets": [ "string" ]
      }
      ```

      Untuk tips selengkapnya tentang menyiapkan Amazon VPC, lihat. [Prasyarat untuk menggunakan SageMaker HyperPod](sagemaker-hyperpod-prerequisites.md)

1. Untuk menyelesaikan konfigurasi Slurm dengan Amazon FSx untuk Lustre, Anda dapat menggunakan salah satu pendekatan berikut. Anda dapat menemukan FSx informasi Amazon baik dari konsol Amazon FSx untuk Lustre di akun Anda atau dengan menjalankan AWS CLI perintah berikut,. `aws fsx describe-file-systems`

   **Opsi A: Konfigurasi Berbasis API (Disarankan)**

   Tentukan FSx konfigurasi Amazon secara langsung di payload CreateCluster API menggunakan `InstanceStorageConfigs` dalam setiap grup instans. Pendekatan ini mendukung baik FSx untuk Lustre dan FSx untuk OpenZFS, dan memungkinkan konfigurasi. per-instance-group FSx 

   ```
   "InstanceStorageConfigs": [
       {
           "FsxLustreConfig": {
               "DnsName": "fs-12345678a90b01cde.fsx.us-west-2.amazonaws.com",
               "MountPath": "/fsx",
               "MountName": "1abcdefg"
           }
       }
   ]
   ```

   Untuk FSx untuk OpenZFS, gunakan `FsxOpenZfsConfig` sebagai gantinya:

   ```
   "InstanceStorageConfigs": [
       {
           "FsxOpenZfsConfig": {
               "DnsName": "fs-12345678a90b01cde.fsx.us-west-2.amazonaws.com",
               "MountPath": "/fsx-openzfs"
           }
       }
   ]
   ```

   Untuk detail selengkapnya, lihat [Memulai SageMaker HyperPod menggunakan AWS CLI](sagemaker-hyperpod-quickstart.md).

   **Opsi B: Konfigurasi Warisan**

   Tentukan nama FSx DNS Amazon dan nama FSx mount Amazon `provisioning_parameters.json` seperti yang ditunjukkan pada gambar di [Skrip siklus hidup dasar yang disediakan oleh HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-base-config.md) bagian.

   ```
   "fsx_dns_name": "fs-12345678a90b01cde.fsx.us-west-2.amazonaws.com",
   "fsx_mountname": "1abcdefg"
   ```

# Memvalidasi file konfigurasi JSON sebelum membuat cluster Slurm HyperPod
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-validate-json-files"></a>

Untuk memvalidasi file konfigurasi JSON sebelum mengirimkan permintaan pembuatan cluster, gunakan skrip validasi konfigurasi. [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/validate-config.py](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/validate-config.py) Skrip ini mem-parsing dan membandingkan file JSON konfigurasi HyperPod cluster Anda dan file JSON konfigurasi Slurm, dan mengidentifikasi jika ada kesalahan konfigurasi sumber daya antara dua file dan juga di seluruh Amazon EC2, Amazon VPC, dan sumber daya Amazon. FSx Misalnya, untuk memvalidasi `provisioning_parameters.json` file `create_cluster.json` dan dari [Skrip siklus hidup dasar yang disediakan oleh HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-base-config.md) bagian, jalankan skrip validasi sebagai berikut.

```
python3 validate-config.py --cluster-config create_cluster.json --provisioning-parameters provisioning_parameters.json
```

Berikut ini adalah contoh output dari validasi yang berhasil.

```
✔️  Validated instance group name worker-group-1 is correct ...

✔️  Validated subnet subnet-012345abcdef67890 ...
✔️  Validated security group sg-012345abcdef67890 ingress rules ...
✔️  Validated security group sg-012345abcdef67890 egress rules ...
✔️  Validated FSx Lustre DNS name fs-012345abcdef67890.fsx.us-east-1.amazonaws.com
✔️  Validated FSx Lustre mount name abcdefgh
✅ Cluster Validation succeeded
```

# Memvalidasi runtime sebelum menjalankan beban kerja produksi pada cluster Slurm HyperPod
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-validate-runtime"></a>

Untuk memeriksa runtime sebelum menjalankan beban kerja produksi apa pun di cluster Slurm HyperPod, gunakan skrip validasi runtime. [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/hyperpod-precheck.py](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/hyperpod-precheck.py) Skrip ini memeriksa apakah cluster Slurm memiliki semua paket yang diinstal untuk menjalankan Docker, jika cluster telah dipasang dengan benar FSx untuk sistem file Lustre dan direktori pengguna yang berbagi sistem file, dan jika deamon Slurm berjalan di semua node komputasi.

Untuk menjalankan skrip pada beberapa node sekaligus, gunakan `srun` seperti yang ditunjukkan pada contoh perintah berikut menjalankan skrip pada cluster Slurm 8 node.

```
# The following command runs on 8 nodes
srun -N 8 python3 hyperpod-precheck.py
```

**catatan**  
*Untuk mempelajari lebih lanjut tentang skrip validasi seperti fungsi validasi runtime apa yang disediakan skrip dan pedoman untuk menyelesaikan masalah yang tidak lulus validasi, lihat [Validasi runtime sebelum menjalankan beban kerja di repositori Pelatihan](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod#35-runtime-validation-before-running-workloads) Terdistribusi Awsome. GitHub *

# Mengembangkan skrip siklus hidup secara interaktif pada node cluster HyperPod
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-develop-lifecycle-scripts"></a>

Bagian ini menjelaskan bagaimana Anda dapat mengembangkan skrip siklus hidup secara interaktif tanpa berulang kali membuat dan menghapus cluster. HyperPod 

1. Buat HyperPod cluster dengan skrip siklus hidup dasar.

1. Masuk ke node cluster.

1. Kembangkan script (`configure_xyz.sh`) dengan mengedit dan menjalankannya berulang kali pada node.

   1. HyperPod menjalankan skrip siklus hidup sebagai pengguna root, jadi kami sarankan Anda menjalankan `configure_xyz.sh` sebagai pengguna root saat mengembangkan untuk memastikan bahwa skrip diuji dalam kondisi yang sama saat dijalankan oleh. HyperPod

1. Integrasikan skrip ke dalam `lifecycle_script.py` dengan menambahkan baris kode yang mirip dengan yang berikut ini.

   ```
   ExecuteBashScript("./utils/configure_xyz.sh").run()
   ```

1. Unggah skrip siklus hidup yang diperbarui ke bucket S3 yang awalnya Anda gunakan untuk mengunggah skrip siklus hidup dasar.

1. Uji versi terintegrasi `lifecycle_script.py` dengan membuat HyperPod cluster baru. Anda juga dapat menggunakan penggantian instance manual untuk menguji skrip siklus hidup yang diperbarui dengan membuat instance baru. Untuk petunjuk terperinci, lihat [Mengganti node secara manual](https://docs.aws.amazon.com//sagemaker/latest/dg/sagemaker-hyperpod-resiliency-slurm-replace-faulty-instance.html#sagemaker-hyperpod-resiliency-slurm-replace-faulty-instance-replace). Perhatikan bahwa hanya node pekerja yang dapat diganti.