Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Skrip siklus hidup dasar yang disediakan oleh HyperPod
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
git clone https://github.com/aws-samples/awsome-distributed-training/
Skrip siklus hidup dasar untuk menyiapkan cluster Slurm tersedia di. SageMaker HyperPod 1.architectures/5.sagemaker_hyperpods/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.
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 ke” atau “diserahkan ke”. on_create.shdiperlukan 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.jsonberisi 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 selengkapnya, lihat prosedur berikut.
Panduan prosedural berikut menjelaskan apa yang terjadi selama pembuatan HyperPod klaster dan bagaimana skrip siklus hidup dasar dirancang.
-
create_cluster.json— Untuk mengirimkan permintaan pembuatan HyperPod cluster, Anda menyiapkan fileCreateClusterpermintaan dalam format JSON. Dalam contoh praktik terbaik ini, kami berasumsi bahwa file permintaan diberi namacreate_cluster.json. Menuliscreate_cluster.jsonuntuk menyediakan HyperPod cluster dengan grup instance. Praktik terbaik adalah menambahkan jumlah grup instance 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 harus menentukan jalur bucket S3 untuk menyimpan seluruh rangkaian file konfigurasi dan skrip siklus hidup Anda ke nama bidang
InstanceGroups.LifeCycleConfig.SourceS3Uridalam formulirCreateClusterpermintaan, dan menentukan nama file skrip shell titik masuk (asumsikan bahwa itu dinamai).on_create.shInstanceGroups.LifeCycleConfig.OnCreatecatatan
Jika Anda menggunakan formulir Create a cluster submission di UI HyperPod konsol, konsol mengelola pengisian dan pengiriman
CreateClusterpermintaan atas nama Anda, dan menjalankanCreateClusterAPI di backend. Dalam hal ini, Anda tidak perlu membuatcreate_cluster.json; sebagai gantinya, pastikan Anda menentukan informasi konfigurasi cluster yang benar ke formulir Create a cluster submission. -
on_create.sh— Untuk setiap grup instance, Anda perlu menyediakan skrip shell entrypoint,, untuk menjalankan perintahon_create.sh, menjalankan skrip untuk menginstal paket perangkat lunak, dan mengatur lingkungan HyperPod cluster dengan Slurm. Dua hal yang perlu Anda persiapkan adalahprovisioning_parameters.jsondiperlukan 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 dion_create.sh. catatan
Pastikan Anda mengunggah seluruh rangkaian skrip siklus hidup ke lokasi S3 yang Anda tentukan.
create_cluster.jsonAnda juga harus menempatkan Andaprovisioning_parameters.jsondi lokasi yang sama.-
provisioning_parameters.json- Ini adalahFormulir konfigurasi untuk penyediaan node Slurm pada HyperPod.on_create.shSkrip 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. Diprovisioning_parameters.json, pastikan bahwa Anda menetapkan grup instance HyperPod cluster menggunakan nama yang Anda tentukancreate_cluster.jsonke node Slurm dengan tepat berdasarkan bagaimana Anda berencana untuk mengaturnya.Diagram berikut menunjukkan contoh bagaimana dua file konfigurasi JSON
create_cluster.jsondanprovisioning_parameters.jsonharus 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,.
validate-config.pyUntuk mempelajari selengkapnya, lihat Memvalidasi file konfigurasi JSON sebelum membuat cluster Slurm HyperPod.
Gambar: Perbandingan langsung antara
create_cluster.jsonuntuk pembuatan HyperPod cluster danprovisiong_params.jsonuntuk konfigurasi Slurm. Jumlah grup instancecreate_cluster.jsonharus 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. -
resource_config.json— Selama pembuatan cluster,lifecycle_script.pyskrip ditulis untuk mengharapkanresource_config.jsonfile dari HyperPod. File ini berisi informasi tentang cluster, seperti jenis instance dan alamat IP.Saat Anda menjalankan
CreateClusterAPI, HyperPod buat file konfigurasi sumber daya/opt/ml/config/resource_config.jsonberdasarkancreate_cluster.jsonfile. Path file disimpan ke variabel lingkungan bernamaSAGEMAKER_RESOURCE_CONFIG_PATH.penting
resource_config.jsonFile ini dibuat secara otomatis oleh HyperPod platform, dan Anda TIDAK perlu membuatnya. Kode berikut adalah untuk menunjukkan contohresource_config.jsonyang akan dibuat dari pembuatan cluster berdasarkancreate_cluster.jsonpada langkah sebelumnya, dan untuk membantu Anda memahami apa yang terjadi di backend dan bagaimana tampilan yang dihasilkan secara otomatisresource_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" } ] } ] } -
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 dalamprovisioning_parameters.jsondanresource_config.jsondari jalur yang ditentukan atau diidentifikasion_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.
lifecycle_script.pySkrip sampel disiapkan untuk menjalankan skrip siklus hidup dasar lainnya di repositori, seperti meluncurkan Slurm deamons (), memasang Amazon untuk FSx Lustre () start_slurm.shmount_fsx.sh, dan menyiapkan akuntansi MariaDB () dan akuntansi RDS (). setup_mariadb_accounting.shsetup_rds_accounting.shAnda juga dapat menambahkan lebih banyak skrip, mengemasnya di bawah direktori yang sama, dan menambahkan baris kode lifecycle_script.pyuntuk membiarkan HyperPod menjalankan skrip. Untuk informasi selengkapnya tentang skrip siklus hidup dasar, lihat juga 3.1 Skrip Siklus Hidup di repositori Pelatihan Terdistribusi Awsome. GitHub catatan
HyperPod berjalan SageMaker HyperPod DLAMI 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.
utilslifecycle_script.pyFile sudah disiapkan untuk menyertakan baris kode untuk menjalankan skrip instalasi, jadi lihat item berikut untuk mencari baris tersebut dan hapus komentar untuk mengaktifkannya.-
Baris kode berikut adalah untuk menginstal Docker
, Enroot , dan Pyxis. Paket-paket ini diperlukan untuk menjalankan kontainer Docker pada cluster Slurm. Untuk mengaktifkan langkah instalasi ini, atur
enable_docker_enroot_pyxisparameter keTruedalamconfig.pyfile. # 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) -
Anda dapat mengintegrasikan HyperPod klaster Anda dengan Amazon Managed Service untuk Prometheus dan Grafana Terkelola Amazon untuk mengekspor metrik tentang node cluster dan cluster ke dasbor Grafana HyperPod Terkelola Amazon. Untuk mengekspor metrik dan menggunakan dasbor Slurm, dasbor
Eksportir NVIDIA DCGM, dan dasbor Metrik EFA di Grafana Terkelola Amazon, Anda perlu menginstal eksportir Slurm untuk Prometheus, eksportir NVIDIA DCGM, dan eksportir simpul EFA. 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 Untuk mengaktifkan langkah instalasi ini, atur
enable_observabilityparameter keTruedalamconfig.pyfile. # 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()
-
-
-
Pastikan Anda mengunggah semua file konfigurasi dan skrip pengaturan dari Langkah 2 ke bucket S3 yang Anda berikan dalam
CreateClusterpermintaan di Langkah 1. Sebagai contoh, misalkan Anda mengharapkan hal berikut:"LifeCycleConfig": { "SourceS3URI": "s3://sagemaker-hyperpod-lifecycle/src", "OnCreate": "on_create.sh" }Kemudian, Anda
"s3://sagemaker-hyperpod-lifecycle/src"harus berision_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.pyUntuk mengunggah file, gunakan perintah S3 sebagai berikut.
aws s3 cp --recursive./lifecycle_scriptss3://sagemaker-hyperpod-lifecycle/src