

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Script del ciclo di vita di base forniti da HyperPod
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-base-config"></a>

Questa sezione illustra ogni componente del flusso di base di configurazione di Slurm on HyperPod con un approccio ***dall'alto*** verso il basso. Inizia dalla preparazione di una richiesta di creazione HyperPod del cluster per eseguire l'`CreateCluster`API e approfondisce la struttura gerarchica fino agli script del ciclo di vita. [Utilizza gli script di esempio relativi al ciclo di vita forniti nell'archivio Awsome Distributed Training. GitHub ](https://github.com/aws-samples/awsome-distributed-training/) Clona il repository con il comando seguente.

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

Gli script del ciclo di vita di base per la configurazione di un cluster Slurm sono disponibili all'indirizzo. 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
```

Il diagramma di flusso seguente mostra una panoramica dettagliata di come progettare gli script del ciclo di vita di base. Le descrizioni sotto il diagramma e la guida procedurale spiegano come funzionano durante la chiamata API. HyperPod `CreateCluster`

![Un diagramma di flusso dettagliato della creazione dei HyperPod cluster e della struttura degli script del ciclo di vita.](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/hyperpod-lifecycle-structure.png)


***Figura:** Un diagramma di flusso dettagliato della creazione dei HyperPod cluster e della struttura degli script del ciclo di vita. (1) Le frecce tratteggiate indicano il punto in cui vengono “richiamate” le caselle e mostrano il flusso dei file di configurazione e la preparazione degli script del ciclo di vita. Il processo inizia dalla preparazione del file `provisioning_parameters.json` e degli script del ciclo di vita. Questi vengono quindi codificati in `lifecycle_script.py` per essere eseguiti in ordine collettivamente. E l'esecuzione dello `lifecycle_script.py` script viene eseguita dallo script di `on_create.sh` shell, che deve essere eseguito nel terminale dell' HyperPodistanza. (2) Le frecce piene mostrano il flusso principale di creazione del HyperPod cluster e il modo in cui le caselle vengono «richiamate» o «inviate a». `on_create.sh`è necessario per la richiesta di creazione del cluster, nel modulo Crea una richiesta di cluster `create_cluster.json` o nel modulo **Crea una richiesta di cluster** nell'interfaccia utente della console. Dopo aver inviato la richiesta, HyperPod esegue l'`CreateCluster`API in base alle informazioni di configurazione fornite dalla richiesta e dagli script del ciclo di vita. (3) La freccia punteggiata indica che la HyperPod piattaforma crea istanze `resource_config.json` nel cluster durante il provisioning delle risorse del cluster. `resource_config.json`contiene informazioni sulle risorse del HyperPod cluster come l'ARN del cluster, i tipi di istanza e gli indirizzi IP. È importante notare che gli script del ciclo di vita vanno preparati in modo che prevedano il file `resource_config.json` durante la creazione del cluster. Per ulteriori informazioni, consulta la guida con le procedure di seguito.*

La seguente guida procedurale spiega cosa succede durante la creazione del HyperPod cluster e come sono progettati gli script del ciclo di vita di base.

1. `create_cluster.json`— Per inviare una richiesta di creazione di un HyperPod cluster, si prepara un file di `CreateCluster` richiesta in formato JSON. In questo esempio di best practice, supponiamo che il file di richiesta si chiami `create_cluster.json`. Scrivi `create_cluster.json` per fornire gruppi di istanze a un HyperPod cluster. La best practice consiste nell'aggiungere lo stesso numero di gruppi di istanze del numero di nodi Slurm che intendi configurare sul HyperPod cluster. Assicurati di assegnare nomi distintivi ai gruppi di istanze che assegnerai ai nodi Slurm che intendi configurare.

   Inoltre, devi specificare un percorso al bucket S3 per archiviare l’intero set di file di configurazione e script del ciclo di vita nel campo `InstanceGroups.LifeCycleConfig.SourceS3Uri` del modulo di richiesta `CreateCluster`. Inoltre, devi specificare il nome del file di uno script shell del punto di ingresso (chiamato, supponiamo, `on_create.sh`) in `InstanceGroups.LifeCycleConfig.OnCreate`.
**Nota**  
Se utilizzi il modulo di invio **Crea un cluster** nell'interfaccia utente della console, la HyperPod console gestisce la compilazione e l'invio della `CreateCluster` richiesta per tuo conto ed esegue l'`CreateCluster`API nel backend. In questo caso, non è necessario creare`create_cluster.json`, ma assicurati di specificare le informazioni corrette sulla configurazione del cluster nel modulo di invio **Crea un cluster**.

1. `on_create.sh`— Per ogni gruppo di istanze, è necessario fornire uno script di shell entrypoint per eseguire comandi`on_create.sh`, eseguire script per installare pacchetti software e configurare l'ambiente cluster con Slurm. HyperPod Le due cose da preparare sono una `provisioning_parameters.json` necessaria per configurare Slurm e un set di script del ciclo di vita HyperPod per l'installazione dei pacchetti software. Questo script deve essere scritto per trovare ed eseguire i file seguenti, come mostrato nello script di esempio in [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).
**Nota**  
Assicurati di caricare l’intero set di script del ciclo di vita nella posizione S3 specificata in `create_cluster.json`. Anche il file `provisioning_parameters.json` deve trovarsi nella stessa posizione.

   1. `provisioning_parameters.json`: questo è un [Modulo di configurazione per provisioning\_parameters.json](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-provisioning-forms-slurm). Lo script `on_create.sh` trova questo file JSON e definisce la variabile di ambiente per identificarne il percorso. Tramite questo file JSON, puoi configurare nodi Slurm e opzioni di archiviazione come Amazon FSx per Lustre con cui Slurm può comunicare. Inoltre`provisioning_parameters.json`, assicurati di assegnare i gruppi di istanze del HyperPod cluster utilizzando i nomi specificati ai nodi Slurm in modo appropriato in base `create_cluster.json` a come intendi configurarli.

      Il diagramma seguente mostra un esempio di come i due file di configurazione JSON `provisioning_parameters.json` devono essere scritti per HyperPod assegnare i gruppi di `create_cluster.json` istanze ai nodi Slurm. In questo esempio, supponiamo di dover configurare tre nodi Slurm: il nodo controller (gestione), il nodo login (facoltativo) e il nodo di calcolo (worker).
**Suggerimento**  
Per aiutarti a convalidare questi due file JSON, il team di HyperPod assistenza fornisce uno script di convalida,. [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) Per ulteriori informazioni, consulta [Convalida dei file di configurazione JSON prima di creare un cluster Slurm su HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-validate-json-files.md).  
![Confronto diretto tra file .json.](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/hyperpod-lifecycle-slurm-config.png)

      ***Figura:** Confronto diretto tra la configurazione per la creazione di HyperPod cluster e quella `create_cluster.json` per `provisiong_params.json` Slurm. Il numero di gruppi di istanze in `create_cluster.json` deve corrispondere al numero di nodi che intendi configurare come nodi Slurm. Nel caso dell'esempio in figura, tre nodi Slurm verranno configurati su un HyperPod cluster di tre gruppi di istanze. È necessario assegnare i gruppi di istanze del HyperPod cluster ai nodi Slurm specificando di conseguenza i nomi dei gruppi di istanze.*

   1. `resource_config.json`— Durante la creazione del cluster, lo `lifecycle_script.py` script viene scritto in modo da aspettarsi un file da. `resource_config.json` HyperPod Questo file contiene informazioni sul cluster, ad esempio i tipi di istanze e gli indirizzi IP.

      Quando esegui l'`CreateCluster`API, HyperPod crea un file di configurazione delle risorse in `/opt/ml/config/resource_config.json` base al `create_cluster.json` file. Il percorso del file viene salvato nella variabile di ambiente denominata `SAGEMAKER_RESOURCE_CONFIG_PATH`. 
**Importante**  
Il `resource_config.json` file viene generato automaticamente dalla HyperPod piattaforma e NON è necessario crearlo. Il codice seguente, che mostra un esempio del file `resource_config.json` generato dalla creazione del cluster in base al file `create_cluster.json` della fase precedente, ti aiuta a capire cosa succede nel backend e come è fatto un file `resource_config.json` generato automaticamente.

      ```
      {
      
          "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`— Questo è lo script Python principale che esegue collettivamente gli script del ciclo di vita configurando Slurm sul cluster durante il provisioning. HyperPod Questo script legge `provisioning_parameters.json` e `resource_config.json` nei percorsi specificati o identificati in `on_create.sh`, passa le informazioni pertinenti a ogni script del ciclo di vita e quindi esegue in ordine gli script del ciclo di vita.

      Gli script del ciclo di vita sono un set di script che offre la massima flessibilità di personalizzazione e consente di installare pacchetti software e impostare le configurazioni necessarie o personalizzate durante la creazione di cluster, ad esempio la configurazione di Slurm, la creazione di utenti e l’installazione di Conda o Docker. Lo script [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) di esempio è pronto per eseguire altri script del ciclo di vita di base nel repository, ad esempio per l’avvio di deamons Slurm ([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)), il montaggio di Amazon FSx per Lustre ([https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/mount_fsx.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/mount_fsx.sh)) e la configurazione dell’accounting MariaDB ([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)) e RDS ([https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/setup_rds_accounting.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/setup_rds_accounting.sh)). Puoi anche aggiungere altri script, impacchettarli nella stessa directory e aggiungere righe di codice per consentire l'esecuzione degli script. `lifecycle_script.py` HyperPod *Per ulteriori informazioni sugli script del ciclo di vita di base, consulta anche gli script del ciclo di [vita 3.1 nell'archivio Awsome Distributed Training](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod#31-lifecycle-scripts). GitHub *
**Nota**  
HyperPod viene eseguito [SageMaker HyperPod DLAMI](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-hyperpod-ami) su ogni istanza di un cluster e l'AMI dispone di pacchetti software preinstallati che rispettano le compatibilità tra essi e le funzionalità. HyperPod Tieni presente che se reinstalli uno qualsiasi dei pacchetti preinstallati, sei responsabile dell'installazione dei pacchetti compatibili e tieni presente che alcune HyperPod funzionalità potrebbero non funzionare come previsto.

      Oltre alle configurazioni predefinite, nella cartella [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) sono disponibili altri script per l’installazione dei software seguenti. Il file `lifecycle_script.py` è già pronto per includere righe di codice per l’esecuzione degli script di installazione, quindi consulta le indicazioni seguenti per cercare tali righe e rimuovi i commenti per attivarle.

      1. Le righe di codice seguenti servono per l’installazione di [Docker](https://www.docker.com/), [Enroot](https://github.com/NVIDIA/enroot) e [Pyxis](https://github.com/NVIDIA/pyxis). Questi pacchetti sono necessari per eseguire i container Docker su un cluster Slurm. 

         Per abilitare questa fase di installazione, imposta il parametro `enable_docker_enroot_pyxis` su `True` nel file [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).

         ```
         # 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. Puoi integrare il tuo HyperPod cluster con [Amazon Managed Service for Prometheus](https://docs.aws.amazon.com/prometheus/latest/userguide/what-is-Amazon-Managed-Service-Prometheus.html) e [Amazon Managed](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html) Grafana per esportare i parametri relativi al cluster e ai nodi HyperPod del cluster nelle dashboard di Amazon Managed Grafana. Per esportare le metriche e utilizzare la [dashboard Slurm](https://grafana.com/grafana/dashboards/4323-slurm-dashboard/), la [dashboard NVIDIA DCGM Exporter](https://grafana.com/grafana/dashboards/12239-nvidia-dcgm-exporter-dashboard/) e la [dashboard delle metriche EFA](https://grafana.com/grafana/dashboards/20579-efa-metrics-dev/) su Grafana gestito da Amazon, devi installare lo [strumento di esportazione Slurm per Prometheus](https://github.com/vpenso/prometheus-slurm-exporter), lo [strumento di esportazione NVIDIA DCGM](https://github.com/NVIDIA/dcgm-exporter) e lo [strumento di esportazione di nodi EFA](https://github.com/aws-samples/awsome-distributed-training/blob/main/4.validation_and_observability/3.efa-node-exporter/README.md). Per ulteriori informazioni sull’installazione dei pacchetti di esportazione e sull’utilizzo delle dashboard Grafana in uno spazio di lavoro Grafana gestito da Amazon, consulta [SageMaker HyperPod monitoraggio delle risorse del cluster](sagemaker-hyperpod-cluster-observability-slurm.md). 

         Per abilitare questa fase di installazione, imposta il parametro `enable_observability` su `True` nel file [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).

         ```
         # 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. Assicurati di caricare tutti i file e gli script di configurazione della **Fase 2** nel bucket S3 fornito nella richiesta `CreateCluster` della **Fase 1**. Ad esempio, presupponi che `create_cluster.json` contenga quanto segue:

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

   Di conseguenza, `"s3://sagemaker-hyperpod-lifecycle/src"` dovrebbe contenere `on_create.sh`, `lifecycle_script.py`, `provisioning_parameters.json` e tutti gli altri script di configurazione. Supponi di aver preparato i file in una cartella locale come segue.

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

   Per caricare i file, utilizza il comando S3 come segue.

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