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