

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

# Menggunakan operator pelatihan untuk menjalankan pekerjaan
<a name="sagemaker-eks-operator-usage"></a>

 Untuk menggunakan kubectl untuk menjalankan pekerjaan, Anda harus membuat job.yaml untuk menentukan spesifikasi pekerjaan dan menjalankan untuk mengirimkan pekerjaan. `kubectl apply -f job.yaml` Dalam file YAMM ini, Anda dapat menentukan konfigurasi kustom dalam `logMonitoringConfiguration` argumen untuk menentukan aturan pemantauan otomatis yang menganalisis keluaran log dari tugas pelatihan terdistribusi untuk mendeteksi masalah dan memulihkan. 

```
apiVersion: sagemaker.amazonaws.com/v1
kind: HyperPodPyTorchJob
metadata:
  labels:
    app.kubernetes.io/name: HyperPod
    app.kubernetes.io/managed-by: kustomize
  name: &jobname xxx
  annotations:
    XXX: XXX
    ......
spec:
  nprocPerNode: "X"
  replicaSpecs:
    - name: 'XXX'
      replicas: 16
      template:
        spec:
          nodeSelector:
            beta.kubernetes.io/instance-type: ml.p5.48xlarge
          containers:
            - name: XXX
              image: XXX
              imagePullPolicy: Always
              ports:
                - containerPort: 8080 # This is the port that HyperPodElasticAgent listens to
              resources:
                limits:
                  nvidia.com/gpu: 8
                  hugepages-2Mi: 5120Mi
                requests:
                  nvidia.com/gpu: 8
                  hugepages-2Mi: 5120Mi
                  memory: 32000Mi
          ......        
  runPolicy:
    jobMaxRetryCount: 50
    restartPolicy:
      numRestartBeforeFullJobRestart: 3 
      evalPeriodSeconds: 21600 
      maxFullJobRestarts: 1
    cleanPodPolicy: "All"
    logMonitoringConfiguration: 
      - name: "JobStart"
        logPattern: ".*Experiment configuration.*" # This is the start of the training script
        expectedStartCutOffInSeconds: 120 # Expected match in the first 2 minutes
      - name: "JobHangingDetection"
        logPattern: ".*\\[Epoch 0 Batch \\d+.*'training_loss_step': (\\d+(\\.\\d+)?).*"
        expectedRecurringFrequencyInSeconds: 300 # If next batch is not printed within 5 minute, consider it hangs. Or if loss is not decimal (e.g. nan) for 2 minutes, mark it hang as well.
        expectedStartCutOffInSeconds: 600 # Allow 10 minutes of job startup time
      - name: "NoS3CheckpointingDetection"
        logPattern: ".*The checkpoint is finalized. All shards is written.*"
        expectedRecurringFrequencyInSeconds: 600 # If next checkpoint s3 upload doesn't happen within 10 mins, mark it hang.
        expectedStartCutOffInSeconds: 1800 # Allow 30 minutes for first checkpoint upload
      - name: "LowThroughputDetection"
        logPattern: ".*\\[Epoch 0 Batch \\d+.*'samples\\/sec': (\\d+(\\.\\d+)?).*"
        metricThreshold: 80 # 80 samples/sec
        operator: "lteq"
        metricEvaluationDataPoints: 25 # if throughput lower than threshold for 25 datapoints, kill the job
```

Jika Anda ingin menggunakan opsi pemantauan log, pastikan Anda memancarkan log pelatihan. `sys.stdout` HyperPod agen elastis memantau log pelatihan di sys.stdout, yang disimpan di. `/tmp/hyperpod/` Anda dapat menggunakan perintah berikut untuk memancarkan log pelatihan.

```
logging.basicConfig(format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", level=logging.INFO, stream=sys.stdout)
```

 Tabel berikut menjelaskan semua konfigurasi pemantauan log yang mungkin: 


| Parameter | Penggunaan | 
| --- | --- | 
| jobMaxRetryHitung | Jumlah maksimum restart pada tingkat proses. | 
| RestartPolicy: numRestartBefore FullJobRestart | Jumlah maksimum restart pada tingkat proses sebelum operator memulai ulang di tingkat pekerjaan. | 
| RestartPolicy: evalPeriodSeconds | Periode mengevaluasi batas restart dalam hitungan detik | 
| RestartPolicy: Mulai ulang maxFullJob | Jumlah maksimum pekerjaan penuh dimulai ulang sebelum pekerjaan gagal. | 
| cleanPodPolicy | Menentukan pod yang harus dibersihkan oleh operator. Nilai yang diterima adalahAll,OnlyComplete, danNone. | 
| logMonitoringConfiguration | Aturan pemantauan log untuk deteksi pekerjaan lambat dan menggantung | 
| expectedRecurringFrequencyInSeconds | Interval waktu antara dua LogPattern pertandingan berturut-turut setelah itu aturan dievaluasi ke HANGING. Jika tidak ditentukan, tidak ada batasan waktu antara kecocokan berurutan LogPattern . | 
| expectedStartCutOffInSeconds | Saatnya untuk LogPattern pertandingan pertama setelah itu aturan dievaluasi ke HANGING. Jika tidak ditentukan, tidak ada batasan waktu untuk pertandingan pertama LogPattern . | 
| LogPattern | Ekspresi reguler yang mengidentifikasi baris log yang diterapkan aturan saat aturan aktif | 
| metricEvaluationDataPoin | Jumlah kali berturut-turut aturan harus mengevaluasi untuk LAMBAT sebelum menandai pekerjaan sebagai LAMBAT. Jika tidak ditentukan, default-nya adalah 1. | 
| MetricThreshold | Ambang batas untuk nilai yang diekstraksi LogPattern dengan grup penangkap. Jika tidak ditentukan, evaluasi metrik tidak dilakukan. | 
| operator | Ketidaksetaraan untuk diterapkan pada konfigurasi pemantauan. Nilai yang diterima adalahgt,gteq,lt,lteq, daneq. | 
| StopPattern | Ekspedisi reguler untuk mengidentifikasi baris log untuk menonaktifkan aturan. Jika tidak ditentukan, aturan akan selalu aktif. | 
| faultOnMatch | Menunjukkan apakah kecocokan LogPattern harus segera memicu kesalahan pekerjaan. Ketika benar, pekerjaan akan ditandai sebagai kesalahan segera setelah LogPattern dicocokkan, terlepas dari parameter aturan lainnya. Ketika salah atau tidak ditentukan, aturan akan mengevaluasi ke SLOW atau HANGING berdasarkan parameter lain. | 

 Untuk ketahanan pelatihan lebih lanjut, tentukan detail konfigurasi simpul cadangan. Jika pekerjaan Anda gagal, operator bekerja dengan Kueue untuk menggunakan node yang dicadangkan sebelumnya untuk terus menjalankan pekerjaan. Konfigurasi node cadangan memerlukan Kueue, jadi jika Anda mencoba mengirimkan pekerjaan dengan node cadangan tetapi tidak menginstal Kueue, pekerjaan akan gagal. Contoh berikut adalah `job.yaml` file sampel yang berisi konfigurasi node cadangan.

```
apiVersion: sagemaker.amazonaws.com/v1
kind: HyperPodPyTorchJob
metadata:
  labels:
    kueue.x-k8s.io/queue-name: user-queue # Specify the queue to run the job.
  name: hyperpodpytorchjob-sample
spec:
  nprocPerNode: "1"
  runPolicy:
    cleanPodPolicy: "None"
  replicaSpecs: 
    - name: pods
      replicas: 1
      spares: 1 # Specify how many spare nodes to reserve.
      template:
        spec:
          containers:
            - name: XXX
              image: XXX
              
              imagePullPolicy: Always
              ports:
                - containerPort: 8080
              resources:
                requests:
                  nvidia.com/gpu: "0"
                limits:
                  nvidia.com/gpu: "0"
```

## Memantau
<a name="sagemaker-eks-operator-usage-monitoring"></a>

Amazon SageMaker HyperPod terintegrasi dengan [observabilitas dengan Grafana Terkelola Amazon dan Layanan Terkelola Amazon untuk Prometheus](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-observability-addon.html), sehingga Anda dapat mengatur pemantauan untuk mengumpulkan dan memasukkan metrik ke dalam alat observabilitas ini.

Atau, Anda dapat mengikis metrik melalui Amazon Managed Service untuk Prometheus tanpa observabilitas terkelola. Untuk melakukannya, sertakan metrik yang ingin Anda pantau ke dalam `job.yaml` file saat menjalankan pekerjaan. `kubectl`

```
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: hyperpod-training-operator
  namespace: aws-hyperpod
spec:
  ......
  endpoints:
    - port: 8081
      path: /metrics
      interval: 15s
```

Berikut ini adalah peristiwa yang dikeluarkan operator pelatihan yang dapat Anda masukkan ke Amazon Managed Service untuk Prometheus untuk memantau pekerjaan pelatihan Anda.


| Peristiwa | Deskripsi | 
| --- | --- | 
| hyperpod\_training\_operator\_jobs\_created\_total | Jumlah total pekerjaan yang dijalankan operator pelatihan | 
| hyperpod\_training\_operator\_jobs\_restart\_latency | Latensi restart pekerjaan saat ini | 
| hyperpod\_training\_operator\_jobs\_fault\_detection\_latency | Latensi deteksi kesalahan | 
| hyperpod\_training\_operator\_jobs\_deleted\_total | Jumlah total pekerjaan yang dihapus | 
| hyperpod\_training\_operator\_jobs\_successful\_total | Jumlah total pekerjaan yang diselesaikan | 
| hyperpod\_training\_operator\_jobs\_failed\_total | Jumlah total pekerjaan yang gagal | 
| hyperpod\_training\_operator\_jobs\_restarted\_total | Jumlah total pekerjaan yang dimulai ulang secara otomatis | 

## Contoh konfigurasi docker
<a name="sagemaker-eks-operator-usage-docker"></a>

Berikut ini adalah contoh file docker yang dapat Anda jalankan dengan perintah. `hyperpod run`

```
export AGENT_CMD="--backend=nccl"
exec hyperpodrun --server-host=${AGENT_HOST} --server-port=${AGENT_PORT} \
    --tee=3 --log_dir=/tmp/hyperpod \
    --nnodes=${NNODES} --nproc-per-node=${NPROC_PER_NODE} \
    --pre-train-script=/workspace/echo.sh --pre-train-args='Pre-training script' \
    --post-train-script=/workspace/echo.sh --post-train-args='Post-training script' \
    /workspace/mnist.py --epochs=1000 ${AGENT_CMD}
```

## Contoh konfigurasi pemantauan log
<a name="sagemaker-eks-operator-usage-log-monitoring"></a>

**Deteksi Job Hang**

Untuk mendeteksi pekerjaan hang, gunakan konfigurasi berikut. Ini menggunakan parameter berikut:
+ expectedStartCutOffInSeconds — berapa lama monitor harus menunggu sebelum mengharapkan log pertama
+ expectedRecurringFrequencyInSeconds — interval waktu untuk menunggu batch log berikutnya

Dengan pengaturan ini, monitor log mengharapkan untuk melihat garis log yang cocok dengan pola regex `.*Train Epoch.*` dalam waktu 60 detik setelah pekerjaan pelatihan dimulai. Setelah penampilan pertama, monitor mengharapkan untuk melihat garis log yang cocok setiap 10 detik. Jika log pertama tidak muncul dalam 60 detik atau log berikutnya tidak muncul setiap 10 detik, agen HyperPod elastis memperlakukan wadah sebagai macet dan berkoordinasi dengan operator pelatihan untuk memulai kembali pekerjaan.

```
runPolicy:
    jobMaxRetryCount: 10
    cleanPodPolicy: "None"
    logMonitoringConfiguration:
      - name: "JobStartGracePeriod"
        # Sample log line: [default0]:2025-06-17 05:51:29,300 [INFO] __main__: Train Epoch: 5 [0/60000 (0%)]       loss=0.8470
        logPattern: ".*Train Epoch.*"  
        expectedStartCutOffInSeconds: 60 
      - name: "JobHangingDetection"
        logPattern: ".*Train Epoch.*"
        expectedRecurringFrequencyInSeconds: 10 # if the next batch is not printed within 10 seconds
```

**Lonjakan kerugian pelatihan**

Konfigurasi pemantauan berikut memancarkan log pelatihan dengan pola`xxx training_loss_step xx`. Ini menggunakan parameter`metricEvaluationDataPoints`, yang memungkinkan Anda menentukan ambang titik data sebelum operator memulai ulang pekerjaan. Jika nilai kehilangan pelatihan lebih dari 2.0, operator memulai kembali pekerjaan.

```
runPolicy:
  jobMaxRetryCount: 10
  cleanPodPolicy: "None"
  logMonitoringConfiguration:
    - name: "LossSpikeDetection"
      logPattern: ".*training_loss_step (\\d+(?:\\.\\d+)?).*"   # training_loss_step 5.0
      metricThreshold: 2.0
      operator: "gt"
      metricEvaluationDataPoints: 5 # if loss higher than threshold for 5 data points, restart the job
```

** TFLOPs Deteksi rendah**

Konfigurasi pemantauan berikut memancarkan log pelatihan dengan pola `xx TFLOPs xx` setiap lima detik. Jika TFLOPs kurang dari 100 untuk 5 titik data, operator memulai kembali pekerjaan pelatihan.

```
runPolicy:
  jobMaxRetryCount: 10
  cleanPodPolicy: "None"
  logMonitoringConfiguration:
    - name: "TFLOPs"
      logPattern: ".* (.+)TFLOPs.*"    # Training model, speed: X TFLOPs...
      expectedRecurringFrequencyInSeconds: 5        
      metricThreshold: 100       # if Tflops is less than 100 for 5 data points, restart the job       
      operator: "lt"
      metricEvaluationDataPoints: 5
```

**Deteksi log kesalahan skrip pelatihan**

Konfigurasi pemantauan berikut mendeteksi jika pola yang ditentukan `logPattern` ada di log pelatihan. Segera setelah operator pelatihan menemukan pola kesalahan, operator pelatihan memperlakukannya sebagai kesalahan dan memulai kembali pekerjaan.

```
runPolicy:
  jobMaxRetryCount: 10
  cleanPodPolicy: "None"
  logMonitoringConfiguration:
    - name: "GPU Error"
      logPattern: ".*RuntimeError.*out of memory.*"
      faultOnMatch: true
```