Menggunakan operator pelatihan untuk menjalankan pekerjaan - Amazon SageMaker AI

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

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
Hitungan 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.

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 simpul 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"

Pemantauan

Amazon SageMaker HyperPod terintegrasi dengan observabilitas dengan Grafana Terkelola Amazon dan Layanan Terkelola Amazon untuk Prometheus, 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 dipancarkan 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 telah dijalankan oleh 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 tugas 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

Konfigurasi docker

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

Deteksi Job Hang

Untuk mendeteksi pekerjaan hang, gunakan konfigurasi berikut. API 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 polaxxx training_loss_step xx. Ini menggunakan parametermetricEvaluationDataPoints, 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