

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

# SageMaker HyperPod governance delle attività
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance"></a>

SageMaker HyperPod la governance delle attività è un robusto sistema di gestione progettato per semplificare l'allocazione delle risorse e garantire un utilizzo efficiente delle risorse di elaborazione tra team e progetti per i cluster Amazon EKS. Questa funzionalità offre agli amministratori la possibilità di impostare:
+ Livelli di priorità per varie attività
+ Allocazione delle risorse di calcolo per ogni team
+ In che modo ogni team presta e prende in prestito risorse di calcolo inattive
+ Se un team rende prerilasciabili le proprie attività

HyperPod la governance delle attività fornisce anche l'osservabilità del cluster Amazon EKS, offrendo visibilità in tempo reale sulla capacità del cluster. Questo include la disponibilità e l’utilizzo delle risorse di calcolo, l’allocazione e l’utilizzo del team e le informazioni sull’esecuzione delle attività e sui tempi di attesa, per consentirti di prendere decisioni informate e gestire in modo proattivo le risorse. 

Le seguenti sezioni spiegano come configurare, comprendere i concetti chiave e utilizzare la governance delle HyperPod attività per i cluster Amazon EKS.

**Topics**
+ [Configurazione per la governance SageMaker HyperPod delle attività](sagemaker-hyperpod-eks-operate-console-ui-governance-setup.md)
+ [Pannello di controllo](sagemaker-hyperpod-eks-operate-console-ui-governance-metrics.md)
+ [Processi](sagemaker-hyperpod-eks-operate-console-ui-governance-tasks.md)
+ [Policy](sagemaker-hyperpod-eks-operate-console-ui-governance-policies.md)
+ [Esempi di comandi di governance delle HyperPod AWS CLI attività](sagemaker-hyperpod-eks-operate-console-ui-governance-cli.md)
+ [Risoluzione dei problemi](sagemaker-hyperpod-eks-operate-console-ui-governance-troubleshoot.md)
+ [Documento di attribuzione per la governance delle SageMaker HyperPod attività di Amazon](sagemaker-hyperpod-eks-operate-console-ui-governance-attributions.md)

# Configurazione per la governance SageMaker HyperPod delle attività
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-setup"></a>

La sezione seguente fornisce informazioni su come configurare Amazon CloudWatch Observability EKS e i componenti aggiuntivi per la governance delle SageMaker HyperPod attività.

Assicurati di disporre della politica di autorizzazione minima per gli amministratori dei HyperPod cluster con Amazon EKS, in[Utenti IAM per l’amministratore del cluster](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-admin). Ciò include le autorizzazioni per eseguire il SageMaker HyperPod core APIs e gestire i SageMaker HyperPod cluster all'interno di te Account AWS, eseguendo le attività in cui ti trovi. [Gestione dei SageMaker HyperPod cluster orchestrati da Amazon EKS](sagemaker-hyperpod-eks-operate.md) 

**Topics**
+ [Configurazione della dashboard](sagemaker-hyperpod-eks-operate-console-ui-governance-setup-dashboard.md)
+ [Configurazione della governance delle attività](sagemaker-hyperpod-eks-operate-console-ui-governance-setup-task-governance.md)

# Configurazione della dashboard
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-setup-dashboard"></a>

Utilizza le seguenti informazioni per configurare il componente aggiuntivo Amazon SageMaker HyperPod Amazon CloudWatch Observability EKS. Questo ti offre una dashboard visiva dettagliata che fornisce una panoramica delle metriche relative all’hardware del cluster EKS, all’allocazione dei team e alle attività.

In caso di problemi di configurazione, consulta [Risoluzione dei problemi](sagemaker-hyperpod-eks-operate-console-ui-governance-troubleshoot.md) per la risoluzione dei problemi noti.

**Topics**
+ [HyperPod Prerequisiti del componente aggiuntivo Amazon CloudWatch Observability EKS](#hp-eks-dashboard-prerequisites)
+ [HyperPod Configurazione del componente aggiuntivo Amazon CloudWatch Observability EKS](#hp-eks-dashboard-setup)

## HyperPod Prerequisiti del componente aggiuntivo Amazon CloudWatch Observability EKS
<a name="hp-eks-dashboard-prerequisites"></a>

La sezione seguente include i prerequisiti necessari per installare il componente aggiuntivo Amazon EKS Observability.
+ Assicurati di disporre della politica di autorizzazione minima per gli amministratori del HyperPod cluster, in. [Utenti IAM per l’amministratore del cluster](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-admin)
+ Collega una policy `CloudWatchAgentServerPolicy` IAM ai nodi worker. A questo scopo, immetti il comando seguente. Sostituisci `my-worker-node-role` con il ruolo IAM utilizzato dai nodi worker Kubernetes.

  ```
  aws iam attach-role-policy \
  --role-name my-worker-node-role \
  --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
  ```

## HyperPod Configurazione del componente aggiuntivo Amazon CloudWatch Observability EKS
<a name="hp-eks-dashboard-setup"></a>

Utilizza le seguenti opzioni per configurare il componente aggiuntivo Amazon SageMaker HyperPod Amazon CloudWatch Observability EKS.

------
#### [ Setup using the SageMaker AI console ]

Le seguenti autorizzazioni sono necessarie per configurare e visualizzare la dashboard di governance delle attività. HyperPod Questa sezione espande le autorizzazioni elencate in [Utenti IAM per l’amministratore del cluster](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-admin). 

Per gestire la governance delle attività, utilizza la policy di esempio:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:ListClusters",
                "sagemaker:DescribeCluster",
                "sagemaker:ListComputeQuotas",
                "sagemaker:CreateComputeQuota",
                "sagemaker:UpdateComputeQuota",
                "sagemaker:DescribeComputeQuota",
                "sagemaker:DeleteComputeQuota",
                "sagemaker:ListClusterSchedulerConfigs",
                "sagemaker:DescribeClusterSchedulerConfig",
                "sagemaker:CreateClusterSchedulerConfig",
                "sagemaker:UpdateClusterSchedulerConfig",
                "sagemaker:DeleteClusterSchedulerConfig",
                "eks:ListAddons",
                "eks:CreateAddon",
                "eks:DescribeAddon",
                "eks:DescribeCluster",
                "eks:DescribeAccessEntry",
                "eks:ListAssociatedAccessPolicies",
                "eks:AssociateAccessPolicy",
                "eks:DisassociateAccessPolicy"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Per concedere le autorizzazioni per gestire Amazon CloudWatch Observability Amazon EKS e visualizzare la dashboard del HyperPod cluster tramite la console SageMaker AI, utilizza la politica di esempio seguente:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:ListAddons",
                "eks:CreateAddon",
                "eks:UpdateAddon",
                "eks:DescribeAddon",
                "eks:DescribeAddonVersions",
                "sagemaker:DescribeCluster",
                "sagemaker:DescribeClusterNode",
                "sagemaker:ListClusterNodes",
                "sagemaker:ListClusters",
                "sagemaker:ListComputeQuotas",
                "sagemaker:DescribeComputeQuota",
                "sagemaker:ListClusterSchedulerConfigs",
                "sagemaker:DescribeClusterSchedulerConfig",
                "eks:DescribeCluster",
                "cloudwatch:GetMetricData",
                "eks:AccessKubernetesApi"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Passa alla scheda **Dashboard** nella SageMaker HyperPod console per installare Amazon CloudWatch Observability EKS. Per garantire che le metriche relative alla governance delle attività siano incluse nella **Dashboard**, abilita la casella di controllo delle metriche Kueue. L'abilitazione delle metriche Kueue abilita i costi di Metrics, una volta CloudWatch **raggiunto** il limite del livello gratuito. Per ulteriori informazioni, consulta **Metrics** in [Amazon CloudWatch Pricing](https://aws.amazon.com/cloudwatch/pricing/).

------
#### [ Setup using the EKS AWS CLI ]

Utilizza il seguente AWS CLI comando EKS per installare il componente aggiuntivo:

```
aws eks create-addon --cluster-name cluster-name 
--addon-name amazon-cloudwatch-observability 
--configuration-values "configuration json"
```

Di seguito è riportato un JSON di esempio con i valori di configurazione:

```
{
    "agent": {
        "config": {
            "logs": {
                "metrics_collected": {
                    "kubernetes": {
                        "kueue_container_insights": true,
                        "enhanced_container_insights": true
                    },
                    "application_signals": { }
                }
            },
            "traces": {
                "traces_collected": {
                    "application_signals": { }
                }
            }
        },
    },
}
```

------
#### [ Setup using the EKS Console UI ]

1. Passa alla [console EKS](https://console.aws.amazon.com/eks/home#/clusters).

1. Scegli il cluster.

1. Scegli **Componenti aggiuntivi**.

1. Trova il componente aggiuntivo **Amazon CloudWatch Observability** e installalo. Installa la versione 2.4.0 o superiore per il componente aggiuntivo. 

1. Includi i valori di configurazione JSON seguenti:

   ```
   {
       "agent": {
           "config": {
               "logs": {
                   "metrics_collected": {
                       "kubernetes": {
                           "kueue_container_insights": true,
                           "enhanced_container_insights": true
                       },
                       "application_signals": { }
                   },
               },
               "traces": {
                   "traces_collected": {
                       "application_signals": { }
                   }
               }
           },
       },
   }
   ```

------

**Una volta installato correttamente il componente aggiuntivo EKS Observability, puoi visualizzare le metriche del cluster EKS nella scheda Dashboard della console. HyperPod **

# Configurazione della governance delle attività
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-setup-task-governance"></a>

Questa sezione include informazioni su come configurare il componente aggiuntivo Amazon SageMaker HyperPod task governance EKS. Questo include la concessione di autorizzazioni che consentono di impostare l’assegnazione di priorità alle attività, l’allocazione di risorse di calcolo per i team, le modalità di condivisione delle risorse di calcolo inattive e la prelazione delle attività per i team.

In caso di problemi di configurazione, consulta [Risoluzione dei problemi](sagemaker-hyperpod-eks-operate-console-ui-governance-troubleshoot.md) per la risoluzione dei problemi noti.

**Topics**
+ [Impostazioni Kueue](#hp-eks-task-governance-kueue-settings)
+ [HyperPod Prerequisiti per la governance delle attività](#hp-eks-task-governance-prerequisites)
+ [HyperPod configurazione della governance delle attività](#hp-eks-task-governance-setup)

## Impostazioni Kueue
<a name="hp-eks-task-governance-kueue-settings"></a>

HyperPod Il componente aggiuntivo Task Governance EKS installa [Kueue](https://github.com/kubernetes-sigs/kueue/tree/main/apis/kueue) per i tuoi cluster EKS. HyperPod Kueue è un sistema nativo di Kubernetes che gestisce le quote e il loro consumo da parte dei processi. 


| Versione aggiuntiva EKS Task Governance HyperPod  | Versione di Kueue installata nell’ambito di questo componente aggiuntivo | 
| --- | --- | 
|  v1.1.3  |  v0.12.0  | 

**Nota**  
Kueue v.012.0 e versioni successive non sono inclusi nell' kueue-rbac-proxyinstallazione. Potrebbero essere state installate versioni precedenti. kueue-rbac-proxy Ad esempio, se utilizzi Kueue v0.8.1, potresti avere la v0.18.1. kueue-rbac-proxy

HyperPod la governance delle attività sfrutta la gestione delle code, della pianificazione e delle quote di lavoro native di Kueue per Kubernetes e viene installata con il componente aggiuntivo Task Governance EKS. HyperPod Una volta installato, HyperPod crea e modifica risorse Kubernetes gestite SageMaker dall'intelligenza artificiale come,,, e. `KueueManagerConfig` `ClusterQueues` `LocalQueues` `WorkloadPriorityClasses` `ResourceFlavors` `ValidatingAdmissionPolicies` Sebbene gli amministratori di Kubernetes abbiano la flessibilità necessaria per modificare lo stato di queste risorse, è possibile che qualsiasi modifica apportata a una risorsa gestita dall' SageMaker IA possa essere aggiornata e sovrascritta dal servizio.

Le seguenti informazioni descrivono le impostazioni di configurazione utilizzate dal componente aggiuntivo Task Governance per configurare Kueue. HyperPod 

```
  apiVersion: config.kueue.x-k8s.io/v1beta1
    kind: Configuration
    health:
      healthProbeBindAddress: :8081
    metrics:
      bindAddress: :8443
      enableClusterQueueResources: true
    webhook:
      port: 9443
    manageJobsWithoutQueueName: false
    leaderElection:
      leaderElect: true
      resourceName: c1f6bfd2.kueue.x-k8s.io
    controller:
      groupKindConcurrency:
        Job.batch: 5
        Pod: 5
        Workload.kueue.x-k8s.io: 5
        LocalQueue.kueue.x-k8s.io: 1
        ClusterQueue.kueue.x-k8s.io: 1
        ResourceFlavor.kueue.x-k8s.io: 1
    clientConnection:
      qps: 50
      burst: 100
    integrations:
      frameworks:
      - "batch/job"
      - "kubeflow.org/mpijob"
      - "ray.io/rayjob"
      - "ray.io/raycluster"
      - "jobset.x-k8s.io/jobset"
      - "kubeflow.org/mxjob"
      - "kubeflow.org/paddlejob"
      - "kubeflow.org/pytorchjob"
      - "kubeflow.org/tfjob"
      - "kubeflow.org/xgboostjob"
      - "pod"
      - "deployment"
      - "statefulset"
      - "leaderworkerset.x-k8s.io/leaderworkerset"
      podOptions:
        namespaceSelector:
          matchExpressions:
            - key: kubernetes.io/metadata.name
              operator: NotIn
              values: [ kube-system, kueue-system ]
    fairSharing:
      enable: true
      preemptionStrategies: [LessThanOrEqualToFinalShare, LessThanInitialShare]
    resources:
      excludeResourcePrefixes: []
```

Per ulteriori informazioni su ogni voce di configurazione, consulta [Configurazione](https://kueue.sigs.k8s.io/docs/reference/kueue-config.v1beta1/#Configuration) nella documentazione di Kueue.

## HyperPod Prerequisiti per la governance delle attività
<a name="hp-eks-task-governance-prerequisites"></a>
+ Assicurati di disporre della politica di autorizzazione minima per gli amministratori HyperPod del cluster, in. [Utenti IAM per l’amministratore del cluster](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-admin) Ciò include le autorizzazioni per eseguire il SageMaker HyperPod core APIs, gestire SageMaker HyperPod i cluster al suo interno ed eseguire Account AWS le attività in. [Gestione dei SageMaker HyperPod cluster orchestrati da Amazon EKS](sagemaker-hyperpod-eks-operate.md) 
+ La versione di Kubernetes dovrà essere >= 1.30. Per istruzioni, consulta [Update existing clusters to the new Kubernetes version](https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html).
+ Se hai già installato Kueue nei cluster, disinstalla Kueue prima di installare il componente aggiuntivo EKS.
+ Un HyperPod nodo deve già esistere nel cluster EKS prima di installare il componente aggiuntivo per la governance delle HyperPod attività. 

## HyperPod configurazione della governance delle attività
<a name="hp-eks-task-governance-setup"></a>

Di seguito vengono fornite informazioni su come impostare la governance delle HyperPod attività.

------
#### [ Setup using the SageMaker AI console ]

Di seguito vengono fornite informazioni su come configurare la governance delle HyperPod attività utilizzando la SageMaker HyperPod console.

Hai già tutte le seguenti autorizzazioni allegate se hai già concesso le autorizzazioni per gestire Amazon CloudWatch Observability EKS e visualizzare il dashboard del HyperPod cluster tramite la console SageMaker AI in. [HyperPod Configurazione del componente aggiuntivo Amazon CloudWatch Observability EKS](sagemaker-hyperpod-eks-operate-console-ui-governance-setup-dashboard.md#hp-eks-dashboard-setup) Se non l'hai configurata, utilizza la politica di esempio riportata di seguito per concedere le autorizzazioni per gestire il componente aggiuntivo HyperPod Task Governance e visualizzare la dashboard del HyperPod cluster tramite la console AI. SageMaker 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:ListAddons",
                "eks:CreateAddon",
                "eks:UpdateAddon",
                "eks:DescribeAddon",
                "eks:DescribeAddonVersions",
                "sagemaker:DescribeCluster",
                "sagemaker:DescribeClusterNode",
                "sagemaker:ListClusterNodes",
                "sagemaker:ListClusters",
                "eks:DescribeCluster",
                "eks:AccessKubernetesApi"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Vai alla scheda **Dashboard** nella SageMaker HyperPod console per installare il componente aggiuntivo Amazon SageMaker HyperPod Task Governance. 

------
#### [ Setup using the Amazon EKS AWS CLI ]

Utilizza il AWS CLI comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/eks/create-addon.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/eks/create-addon.html)EKS di esempio per configurare l'API Amazon EKS di HyperPod task governance e l'interfaccia utente della console utilizzando AWS CLI:

```
aws eks create-addon --region region --cluster-name cluster-name --addon-name amazon-sagemaker-hyperpod-taskgovernance
```

------

Puoi visualizzare la scheda **Policies** nella console HyperPod SageMaker AI se l'installazione è andata a buon fine. È inoltre possibile utilizzare il seguente AWS CLI comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/eks/describe-addon.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/eks/describe-addon.html)EKS di esempio per verificare lo stato. 

```
aws eks describe-addon --region region --cluster-name cluster-name --addon-name amazon-sagemaker-hyperpod-taskgovernance
```

# Pannello di controllo
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-metrics"></a>

Amazon SageMaker HyperPod Task Governance offre una panoramica completa dei parametri di utilizzo dei cluster Amazon EKS, inclusi i parametri relativi all'hardware, al team e alle attività. Di seguito vengono fornite informazioni sulla dashboard del cluster HyperPod EKS.

La dashboard offre una visione completa delle metriche di utilizzo del cluster, incluse le metriche relative all’hardware, al team e alle attività. È necessario installare il componente aggiuntivo EKS per visualizzare la dashboard. Per ulteriori informazioni, consulta [Configurazione della dashboard](sagemaker-hyperpod-eks-operate-console-ui-governance-setup-dashboard.md).

Nella [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/), in **HyperPod Clusters**, puoi accedere alla HyperPod console e visualizzare l'elenco dei HyperPod cluster nella tua regione. Scegli il cluster e vai alla scheda **Dashboard**. La dashboard contiene le seguenti metriche. Puoi scaricare i dati per una sezione scegliendo la voce **Esporta** corrispondente.

**Utilizzo**

Fornisce lo stato del cluster EKS point-in-time e metriche basate sulle tendenze per le risorse di elaborazione critiche. Per impostazione predefinita, vengono visualizzati **tutti i gruppi di istanze**. Utilizza il menu a discesa per filtrare i gruppi di istanze. Le metriche incluse in questa sezione sono:
+ Numero di istanze totali, in esecuzione e con ripristino in sospeso. Il numero di istanze con ripristino in sospeso si riferisce al numero di istanze attendono di essere sottoposte a ripristino.
+ GPUs, memoria GPU, memoria v e v. CPUs CPUs 
+ Utilizzo della GPU, utilizzo della memoria GPU, utilizzo della vCPU e utilizzo della memoria vCPU.
+ Un grafico interattivo dell’utilizzo di GPU e vCPU. 

**Team**

Fornisce informazioni sulla gestione delle risorse specifica del team. Questo include:
+ Allocazione di istanze e GPU.
+ Tassi di utilizzo della GPU.
+ Statistiche sulla GPU prese in prestito.
+ Stato dell’attività (in esecuzione o in sospeso).
+ Un grafico a barre che confronta l’utilizzo della GPU e l’allocazione delle risorse di calcolo tra i team.
+ Informazioni dettagliate su GPU e vCPU del team. Per impostazione predefinita, le informazioni visualizzate includono **Tutti i team**. Puoi filtrare per team e istanza scegliendo i menu a discesa. Nel grafico interattivo puoi filtrare per ora.

**Attività**

**Nota**  
Per visualizzare le attività del cluster HyperPod EKS nella dashboard:  
Configura Kubernetes Role-Based Access Control (RBAC) per gli utenti di data scientist nello spazio dei HyperPod nomi designato per autorizzare l'esecuzione delle attività su cluster orchestrati da Amazon EKS. I namespace adottano il formato `hyperpod-ns-team-name`. Per stabilire le autorizzazioni RBAC, consulta le [istruzioni per la creazione dei ruoli del team](https://github.com/aws/sagemaker-hyperpod-cli/tree/main/helm_chart#5-create-team-role).
Verifica che il tuo processo sia venga inviato con il namespace e le etichette delle classi di priorità appropriati. Per un esempio completo, consulta [Invia un lavoro alla coda e allo SageMaker spazio dei nomi gestiti dall'intelligenza artificiale](sagemaker-hyperpod-eks-operate-console-ui-governance-cli.md#hp-eks-cli-start-job).

Fornisce informazioni sulle metriche relative alle attività. Questo include il numero di attività in esecuzione, in sospeso e prerilasciate, oltre alle statistiche sui tempi di esecuzione e attesa. Per impostazione predefinita, le informazioni visualizzate includono **Tutti i team**. Puoi filtrare per team selezionando il menu a discesa. Nel grafico interattivo puoi filtrare per ora.

# Processi
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-tasks"></a>

Di seguito vengono fornite informazioni sulle attività del cluster Amazon SageMaker HyperPod EKS. Le attività sono operazioni o processi che vengono inviati al cluster. Queste possono essere operazioni di machine learning, come addestramento, esecuzione di esperimenti o inferenza. L’elenco dei dettagli delle attività visualizzabili include lo stato, la durata di esecuzione e la quantità di calcolo utilizzata per ogni attività. 

Nella [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/), in **HyperPod Clusters**, puoi accedere alla HyperPod console e visualizzare l'elenco dei HyperPod cluster nella tua regione. Scegli il tuo cluster e vai alla scheda **Attività**.

Per rendere visibile a tutti la scheda **Attività**, e non solo all’amministratore, l’amministratore deve [aggiungere una voce di accesso al cluster EKS per il ruolo IAM](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html). 

**Nota**  
Per visualizzare le attività del cluster HyperPod EKS nella dashboard:  
Configura Kubernetes Role-Based Access Control (RBAC) per gli utenti di data scientist nello spazio dei HyperPod nomi designato per autorizzare l'esecuzione delle attività su cluster orchestrati da Amazon EKS. I namespace adottano il formato `hyperpod-ns-team-name`. Per stabilire le autorizzazioni RBAC, consulta le [istruzioni per la creazione dei ruoli del team](https://github.com/aws/sagemaker-hyperpod-cli/tree/main/helm_chart#5-create-team-role).
Verifica che il tuo processo sia venga inviato con il namespace e le etichette delle classi di priorità appropriati. Per un esempio completo, consulta [Invia un lavoro alla coda e allo SageMaker spazio dei nomi gestiti dall'intelligenza artificiale](sagemaker-hyperpod-eks-operate-console-ui-governance-cli.md#hp-eks-cli-start-job).

Per i cluster EKS, TensorFlow vengono mostrate le attività kubeflow (PyTorch, MPI,). Per impostazione predefinita, PyTorch vengono visualizzate le attività. Puoi filtrare per PyTorch TensorFlow attività MPI scegliendo il menu a discesa o utilizzando il campo di ricerca. Le informazioni mostrate per ogni attività includono il nome dell’attività, lo stato, il namespace, la classe di priorità e l’ora di creazione. 

# Utilizzo della pianificazione basata sulla topologia nella governance delle attività di Amazon SageMaker HyperPod
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-tasks-scheduling"></a>

La pianificazione basata sulla topologia in SageMaker HyperPod Amazon Task Governance ottimizza l'efficienza di formazione dei carichi di lavoro di machine learning distribuiti posizionando pod basati sulla topologia di rete fisica delle istanze Amazon EC2. Considerando la struttura gerarchica dell' AWS infrastruttura, tra cui zone di disponibilità, blocchi di rete e rack fisici, la pianificazione basata sulla topologia garantisce che i pod che richiedono comunicazioni frequenti siano pianificati in prossimità per ridurre al minimo la latenza di rete. Questo posizionamento intelligente è particolarmente utile per i lavori di formazione sull'apprendimento automatico su larga scala che implicano una pod-to-pod comunicazione intensiva, con conseguente riduzione dei tempi di formazione e un utilizzo più efficiente delle risorse in tutto il cluster.

**Nota**  
Per utilizzare la pianificazione basata sulla topologia, assicurati che la tua versione di HyperPod task governance sia la v1.2.2-eksbuild.1 o successiva.

La pianificazione basata sulla topologia supporta i tipi di istanze seguenti:
+ ml.p3dn.24xlarge
+ ml.p4d.24xlarge
+ ml.p4de.24xlarge
+ ml.p5.48xlarge
+ ml.p5e.48xlarge
+ ml.p5en.48xlarge
+ ml.p6e-gb200.36xlarge
+ ml.trn1.2xlarge
+ ml.trn1.32xlarge
+ ml.trn1n.32xlarge
+ ml.trn2.48xlarge
+ ml.trn2u.48xlarge

La pianificazione basata sulla topologia si integra con i HyperPod flussi di lavoro esistenti fornendo al contempo preferenze di topologia flessibili tramite i file Kubectl YAML e la CLI. HyperPod HyperPod la governance delle attività configura automaticamente i nodi del cluster con etichette di topologia e funziona con le politiche di governance delle HyperPod attività e i meccanismi di prestito delle risorse, garantendo che la pianificazione basata sulla topologia non interrompa i processi operativi correnti. Grazie al supporto integrato per le specifiche di topologia preferite e richieste, puoi eseguire il fine-tuning del posizionamento dei carichi di lavoro in base a specifici requisiti delle prestazioni, mantenendo al contempo la flessibilità necessaria per tornare alla pianificazione standard se i vincoli della topologia non possono essere soddisfatti.

Sfruttando le etichette con riconoscimento della topologia HyperPod, è possibile potenziare i carichi di lavoro di machine learning di tali dispositivi mediante un posizionamento intelligente dei pod che tiene conto dell'infrastruttura fisica di rete. HyperPod la governance delle attività ottimizza automaticamente la pianificazione dei pod in base alla topologia gerarchica del data center, il che si traduce direttamente in una riduzione della latenza di rete e in migliori prestazioni di formazione per le attività di machine learning distribuite. La consapevolezza della topologia è particolarmente utile per carichi di lavoro di machine learning su larga scala, perché riduce al minimo il sovraccarico di comunicazione avvicinando strategicamente i pod correlati all’interno della gerarchia di rete. Il risultato è una latenza della rete di comunicazione ottimizzata tra i pod, un utilizzo più efficiente delle risorse e migliori prestazioni complessive per le AI/ML applicazioni a elaborazione intensiva, il tutto senza la necessità di gestire manualmente configurazioni di topologia di rete complesse.

Di seguito sono riportate le etichette per i livelli di rete topologici disponibili in cui Task Governance può pianificare i pod: HyperPod 
+ topology.k8s.aws/ -1 network-node-layer
+ network-node-layertopologia.k8s.aws/ -2
+ network-node-layertopologia.k8s.aws/ -3
+ topology.k8s.aws/ultraserver-id

Per utilizzare la pianificazione basata sulla topologia, includi le etichette seguenti nel tuo file YAML:
+ kueue.x-k8s.io/ podset-required-topology - indica che questo lavoro deve avere i pod richiesti e che tutti i pod nei nodi devono essere programmati all'interno dello stesso livello di topologia.
+ kueue.x-k8s.io/ podset-preferred-topology - indica che questo job deve avere i pod, ma che la pianificazione dei pod all'interno dello stesso livello di topologia è preferibile ma non obbligatoria. HyperPod task governance proverà a pianificare i pod all'interno di un livello prima di provare il livello di topologia successivo.

Se le risorse non condividono la stessa etichetta di topologia, il processo viene sospeso. Il processo viene inserito in lista d’attesa. Quando Kueue rileva una quantità di risorse sufficiente, accetta ed esegue processo.

L’esempio seguente illustra come utilizzare le etichette nei file YAML:

```
apiVersion: batch/v1
kind: Job
metadata:
  name: test-tas-job
  namespace: hyperpod-ns-team-name
  labels:
    kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue
    kueue.x-k8s.io/priority-class: PRIORITY_CLASS-priority
spec:
  parallelism: 10
  completions: 10
  suspend: true
  template:
    metadata:
      labels:
        kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue
      annotations:
        kueue.x-k8s.io/podset-required-topology: "topology.k8s.aws/network-node-layer-3"
        or
        kueue.x-k8s.io/podset-preferred-topology: "topology.k8s.aws/network-node-layer-3"
    spec:
      nodeSelector:
        topology.k8s.aws/network-node-layer-3: TOPOLOGY_LABEL_VALUE
      containers:
        - name: dummy-job
          image: gcr.io/k8s-staging-perf-tests/sleep:v0.1.0
          args: ["3600s"]
          resources:
            requests:
              cpu: "100"
      restartPolicy: Never
```

La tabella seguente spiega i nuovi parametri che puoi utilizzare nel file YAML kubectl.


| Parametro | Description | 
| --- | --- | 
| kueue.x-k8s.io/queue-name | Il nome della coda da utilizzare per eseguire il processo. Il formato di queue-name deve essere hyperpod-ns-team-name-localqueue. | 
| kueue.x-k8s.io/priority-class | Consente di specificare una priorità per la pianificazione dei pod. Questa specifica è facoltativa. | 
| annotations | Contiene l’annotazione della topologia collegata al processo. Le topologie disponibili sono kueue.x-k8s.io/ e podset-required-topologykueue.x-k8s.io/. podset-preferred-topology Puoi utilizzare un’annotazione o nodeSelector, ma non entrambi contemporaneamente. | 
| nodeSelector | Specifica il livello di rete che rappresenta il livello di posizionamento delle istanze Amazon EC2. Utilizza questo campo o un’annotazione, ma non entrambi contemporaneamente. Nel file YAML, puoi anche utilizzare il parametro nodeSelector per scegliere il livello esatto per i tuoi pod. Per ottenere il valore della tua etichetta, usa l'operazione API. [ DescribeInstanceTopology](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTopology.html) | 

Puoi anche utilizzare la HyperPod CLI per eseguire il tuo lavoro e utilizzare la pianificazione basata sulla topologia. Per ulteriori informazioni sulla HyperPod CLI, vedere. [SageMaker HyperPod Comandi CLI](sagemaker-hyperpod-eks-hyperpod-cli-reference.md)

```
hyp create hyp-pytorch-job \                                            
  --version 1.1 \
  --job-name sample-pytorch-job \
  --image 123456789012.dkr.ecr.us-west-2.amazonaws.com/ptjob:latest \
  --pull-policy "Always" \
  --tasks-per-node 1 \
  --max-retry 1 \
  --priority high-priority \
  --namespace hyperpod-ns-team-name \
  --queue-name hyperpod-ns-team-name-localqueue \
  --preferred-topology-label topology.k8s.aws/network-node-layer-1
```

Di seguito è riportato un esempio di file di configurazione che è possibile utilizzare per eseguire un file PytorchJob con etichette di topologia. Se desideri eseguire processi MPI e TensorFlow, il file è sostanzialmente uguale. Se invece desiderate eseguire questi lavori, ricordatevi di modificare il file di configurazione di conseguenza, ad esempio utilizzando l'immagine corretta anziché PyTorchJob. Se stai eseguendo un PyTorchJob, puoi assegnare topologie diverse ai nodi master e worker. PyTorchJob ha sempre un nodo master, quindi ti consigliamo di utilizzare invece la topologia per supportare i worker pod.

```
apiVersion: kubeflow.org/v1
kind: PyTorchJob
metadata:
  annotations: {}
  labels:
    kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue
  name: tas-test-pytorch-job
  namespace: hyperpod-ns-team-name
spec:
  pytorchReplicaSpecs:
    Master:
      replicas: 1
      restartPolicy: OnFailure
      template:
        metadata:
          labels:
            kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue
        spec:
          containers:
          - command:
            - python3
            - /opt/pytorch-mnist/mnist.py
            - --epochs=1
            image: docker.io/kubeflowkatib/pytorch-mnist:v1beta1-45c5727
            imagePullPolicy: Always
            name: pytorch
    Worker:
      replicas: 10
      restartPolicy: OnFailure
      template:
        metadata:
          # annotations:
            # kueue.x-k8s.io/podset-required-topology: "topology.k8s.aws/network-node-layer-3"
          labels:
            kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue
        spec:
          containers:
          - command:
            - python3
            - /opt/pytorch-mnist/mnist.py
            - --epochs=1
            image: docker.io/kubeflowkatib/pytorch-mnist:v1beta1-45c5727
            imagePullPolicy: Always
            name: pytorch
            resources:
              limits:
                cpu: 1
              requests:
                memory: 200Mi
                cpu: 1
          #nodeSelector:
          #  topology.k8s.aws/network-node-layer-3: xxxxxxxxxxx
```

Per visualizzare le topologie per il tuo cluster, utilizza l'[ DescribeInstanceTopology](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTopology.html)operazione API. Per impostazione predefinita, le topologie sono nascoste in Console di gestione AWS e Amazon SageMaker Studio. Segui questa procedura per visualizzarle nell’interfaccia che stai utilizzando.

**SageMaker Studio**

1. In SageMaker Studio, accedi al tuo cluster.

1. Nella visualizzazione Attività, scegli il menu delle opzioni nella colonna Nome, quindi scegli **Gestisci colonne**.

1. Seleziona **Topologia richiesta** e **Vincolo di topologia** per aggiungere le colonne per visualizzare le informazioni sulla topologia nell’elenco dei pod Kubernetes.

**Console di gestione AWS**

1. Apri la console Amazon SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. In **HyperPod Cluster**, scegli **Cluster management**.

1. Scegli la scheda **Attività**, quindi scegli l’icona a forma di ingranaggio.

1. Negli attributi dell’istanza, attiva **Topologia richiesta** e **Vincolo di topologia**.

1. Scegli **Conferma** per visualizzare le informazioni sulla topologia nella tabella.

# Policy
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies"></a>

La governance delle SageMaker HyperPod attività di Amazon semplifica l'allocazione delle risorse del cluster Amazon EKS e l'assegnazione delle priorità alle attività. Di seguito vengono fornite informazioni sulle HyperPod politiche dei cluster EKS. Per informazioni su come configurare la governance delle attività, consulta [Configurazione della governance delle attività](sagemaker-hyperpod-eks-operate-console-ui-governance-setup-task-governance.md).

Le policy sono suddivise in **Priorità delle risorse di calcolo** e **Allocazione delle risorse di calcolo** I concetti delle policy seguenti vengono organizzati nel contesto di tali policy.

La **priorità delle risorse di calcolo**, o policy del cluster, determina in che modo le risorse di calcolo inattive vengono presa in prestito e in che modo i team assegnano priorità alle attività.
+ **Allocazione delle risorse di calcolo inattive** definisce in che modo le risorse di calcolo inattive vengono allocate tra i team. In altre parole, definisce in che modo le risorse di calcolo inutilizzate possono essere prese in prestito dai team. Quando selezioni **Allocazione delle risorse di calcolo inattive**, puoi scegliere tra:
  + **Primo arrivato, primo servito**: se applicata, questa opzione non assegna priorità ai team e ogni attività in arrivo ha la stessa probabilità di ottenere risorse oltre la quota stabilita. Alle attività viene assegnata una priorità in base all’ordine di invio. Ciò significa che un utente potrebbe utilizzare il 100% delle risorse di calcolo inattive se le richiede per primo.
  + **Condivisione equa**: quando viene applicata, i team prendono in prestito risorse di calcolo inattive in base al **Peso di condivisione equa** loro assegnato. Questi pesi sono definiti in **Allocazione delle risorse di calcolo**. Per ulteriori informazioni su come utilizzare questa opzione, consulta [Esempi di condivisione di risorse di calcolo inattive](#hp-eks-task-governance-policies-examples).
+ La **prioritizzazione delle attività** definisce il modo in cui le attività vengono messe in coda non appena il calcolo diventa disponibile. Quando scegli una **prioritizzazione delle attività**, puoi scegliere tra:
  + **Primo arrivato, primo servito**: se viene applicata questa opzione, le attività vengono messe in coda nell’ordine in cui sono state richieste.
  + **Classificazione delle attività**: se viene applicata questa opzione, le attività vengono messe in coda nell’ordine definito dalla loro priorità. Se scegli questa opzione, devi aggiungere le classi di priorità e i pesi in base ai quali viene assegnata la priorità. Le attività della stessa classe di priorità vengono eseguite in base al principio “primo arrivato, primo servito”. Se l’opzione è abilitata in Allocazione delle risorse di calcolo, le attività con priorità più bassa vengono sostituite dalle attività con priorità più alta all’interno del team.

    Quando i Data Scientist inviano i processi al cluster, utilizzano il nome della classe di priorità nel file YAML. La classe di priorità è nel formato `priority-class-name-priority`. Per vedere un esempio, consulta [Invia un lavoro alla coda e allo SageMaker spazio dei nomi gestiti dall'intelligenza artificiale](sagemaker-hyperpod-eks-operate-console-ui-governance-cli.md#hp-eks-cli-start-job).
  + **Classi di priorità**: queste classi stabiliscono una priorità relativa per le attività quando prendono in prestito quote di capacità. Quando un’attività viene eseguita utilizzando una quota presa in prestito, può essere interrotta da un’altra attività con priorità più elevata, se la capacità disponibile per l’attività in entrata è terminata. Se **Prelazione** è abilitato in **Allocazione delle risorse di calcolo**, un’attività con priorità più elevata può anche interrompere altre attività all’interno del proprio team.
+ La **condivisione delle risorse non allocate** consente ai team di prendere in prestito risorse di elaborazione che non sono assegnate a nessun team tramite la quota di elaborazione. Se abilitata, la capacità del cluster non allocata diventa disponibile per i team che possono prenderla in prestito automaticamente. Per ulteriori informazioni, consulta [Come funziona la condivisione delle risorse non allocate](#sagemaker-hyperpod-eks-operate-console-ui-governance-policies-idle-resource-sharing-how-it-works).

L’**Allocazione delle risorse di calcolo**, o quota di calcolo, definisce l’allocazione delle risorse di calcolo di un team e il peso (o il livello di priorità) assegnato a un team per un’allocazione equa delle risorse di calcolo inattive. 
+ **Nome del team**: il nome del team. Viene creato un **Namespace** corrispondente, di tipo `hyperpod-ns-team-name`. 
+ **Membri**: i membri del namespace del team. Dovrai configurare un controllo degli accessi basato sui ruoli (RBAC) Kubernetes per gli utenti di data scientist che desideri far parte di questo team, per eseguire attività su cluster orchestrati con Amazon EKS. HyperPod Per configurare un RBAC Kubernetes, utilizza le istruzioni in [create team role](https://github.com/aws/sagemaker-hyperpod-cli/tree/main/helm_chart#5-create-team-role).
+ **Peso di condivisione equa**: si tratta del livello di priorità assegnato al team quando viene applicata la **Condivisione equa** per l’opzione **Allocazione delle risorse di calcolo inattive**. La priorità più alta ha un peso di 100, mentre quella più bassa è 0. Un peso maggiore consente a un team di accedere più rapidamente alle risorse inutilizzate all’interno della capacità condivisa. Un peso zero indica la priorità più bassa, che significa che il team sarà sempre in svantaggio rispetto agli altri team. 

  Il peso di condivisione equa offre un margine di vantaggio al team quando compete con altri team per le risorse disponibili. L’ammissione dà priorità alla pianificazione delle attività svolte dai team con i pesi più alti e il minor numero di risorse prese in prestito. Ad esempio, se il Team A ha un peso di 10 e il Team B ha un peso di 5, il Team A avrebbe un accesso prioritario alle risorse inutilizzate, perché ha processi pianificati prima del Team B.
+ **Prelazione delle attività**: le risorse di calcolo vengono prese da un’attività in base alla priorità. Per impostazione predefinita, il team che presta le risorse di calcolo inattive avrà la prelazione rispetto alle attività degli altri team. 
+ **Prestare e prendere in prestito**: definisce in che modo il team presta le risorse di calcolo inattive e specifica se il team può prendere in prestito risorse da altri team.
  + Limite di **prestito basato sulla percentuale: il limite** di elaborazione inattiva che un team può prendere in prestito, espresso come percentuale della quota garantita. Un team può prendere in prestito fino al 10.000% delle risorse di calcolo allocate. Il valore fornito qui viene interpretato come percentuale. Ad esempio, un valore pari a 500 verrà interpretato come 500%. Questa percentuale si applica in modo uniforme a tutti i tipi di risorse (CPU, GPU, memoria) e ai tipi di istanze inclusi nella quota del team.
  + **Limite assoluto di prestito**: il limite di elaborazione inattiva che un team può prendere in prestito, definito come valori assoluti delle risorse per tipo di istanza. Ciò fornisce un controllo granulare sul comportamento di prestito per tipi di istanze specifici. È necessario specificare i limiti assoluti utilizzando lo stesso schema di **Compute Quota, incluso il conteggio** delle istanze, gli acceleratori, la vCPU, la memoria o le partizioni di accelerazione. Puoi specificare limiti assoluti per uno o più tipi di istanze nella quota del tuo team.

Per informazioni su come vengono utilizzati i concetti come le classi di priorità e i namespace, consulta [Esempi di comandi di governance delle HyperPod AWS CLI attività](sagemaker-hyperpod-eks-operate-console-ui-governance-cli.md).

## Esempi di condivisione di risorse di calcolo inattive
<a name="hp-eks-task-governance-policies-examples"></a>

La quota totale riservata non deve superare la capacità disponibile del cluster per quella risorsa, al fine di garantire una corretta gestione delle quote. Ad esempio, se un cluster comprende 20 istanze `ml.c5.2xlarge`, la quota cumulativa assegnata ai team dovrebbe rimanere inferiore a 20. 

Se le policy **Allocazione delle risorse di calcolo** per i team consentono **Presta e prendi in prestito** o **Presta**, la capacità inattiva viene condivisa tra questi team. Ad esempio, il Team A e il Team B hanno abilitato **Presta e prendi in prestito**. Il Team A ha una quota pari a 6, ma utilizza solo 2 risorse per i processi, mentre il Team B ha una quota pari a 5 e utilizza 4 risorse. Un processo inviato al Team B richiede 4 risorse, quindi il Team B prenderà in prestito 3 risorse dal Team A. 

Se la policy **Allocazione delle risorse di calcolo** di un team è impostata su **Non prestare**, il team non potrà prendere in prestito alcuna capacità aggiuntiva oltre alle proprie allocazioni.

## Come funziona la condivisione delle risorse non allocate
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-idle-resource-sharing-how-it-works"></a>

La condivisione delle risorse non allocate gestisce automaticamente il pool di risorse che non sono allocate a nessuna quota di elaborazione nel cluster. Ciò significa che monitora HyperPod continuamente lo stato del cluster e si aggiorna automaticamente alla configurazione corretta nel tempo.

**Configurazione iniziale**
+ Quando l'impostazione è impostata su `Enabled` in your ClusterSchedulerConfig (`IdleResourceSharing`per impostazione predefinita`Disabled`), la governance delle HyperPod attività inizia a monitorare il cluster e calcola le risorse inattive disponibili sottraendo le quote del team dalla capacità totale dei nodi.
+ La condivisione non allocata delle risorse viene creata per rappresentare il pool di risorse che ClusterQueues possono essere prese in prestito.
+ Quando si abilita per la prima volta la condivisione di risorse non allocate, la configurazione dell'infrastruttura richiede diversi minuti. È possibile monitorare i progressi tramite policy `Status` e in. `DetailedStatus` ClusterSchedulerConfig

**Riconciliazione in corso**
+ HyperPod la governance delle attività monitora continuamente le modifiche, come l'aggiunta o la rimozione di nodi e gli aggiornamenti delle quote delle code dei cluster.
+  Quando si verificano modifiche, la condivisione delle risorse non allocate ricalcola la quota e gli aggiornamenti. ClusterQueues La riconciliazione viene in genere completata in pochi secondi. 

**Monitoraggio**

 Puoi verificare che la condivisione delle risorse non allocate sia completamente configurata controllando la condivisione delle risorse non allocate: ClusterQueues 

```
kubectl get clusterqueue | grep hyperpod-ns-idle-resource-sharing
```

Quando vedi ClusterQueues con nomi come`hyperpod-ns-idle-resource-sharing-cq-1`, la condivisione delle risorse non allocate è attiva. Tieni presente che ClusterQueues possono esistere più condivisioni di risorse non allocate a seconda del numero di tipi di risorse presenti nel cluster. 

## Idoneità dei nodi per la condivisione di risorse non allocate
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-idle-resource-sharing-node-eligibility"></a>

La condivisione delle risorse non allocate include solo i nodi che soddisfano i seguenti requisiti:

1. **Stato Node Ready**
   + I nodi devono essere in `Ready` stato per poter contribuire al pool di risorse non allocate.
   + I nodi in stato non pronto `NotReady` o in altri stati non pronti sono esclusi dai calcoli della capacità.
   + Quando un nodo diventa`Ready`, viene automaticamente incluso nel ciclo di riconciliazione successivo.

1. **Stato programmabile del nodo**
   + I nodi con `spec.unschedulable: true` sono esclusi dalla condivisione di risorse non allocate.
   + Quando un nodo torna a essere programmabile, viene automaticamente incluso nel ciclo di riconciliazione successivo.

1. **Configurazione MIG (solo nodi GPU)**
   + Per i nodi GPU con partizionamento MIG (Multi-Instance GPU), l'`nvidia.com/mig.config.state`etichetta deve indicare che il nodo contribuisce con i profili MIG alla condivisione `success` di risorse non allocate.
   + Questi nodi verranno riprovati automaticamente una volta completata correttamente la configurazione MIG.

1. **Tipi di istanze supportati**
   + L'istanza deve essere un tipo di SageMaker HyperPod istanza supportato.
   + Vedi l'elenco dei tipi di istanza supportati nel SageMaker HyperPod cluster.

**Topics**
+ [Esempi di condivisione di risorse di calcolo inattive](#hp-eks-task-governance-policies-examples)
+ [Come funziona la condivisione delle risorse non allocate](#sagemaker-hyperpod-eks-operate-console-ui-governance-policies-idle-resource-sharing-how-it-works)
+ [Idoneità dei nodi per la condivisione di risorse non allocate](#sagemaker-hyperpod-eks-operate-console-ui-governance-policies-idle-resource-sharing-node-eligibility)
+ [Creazione di policy](sagemaker-hyperpod-eks-operate-console-ui-governance-policies-create.md)
+ [Modifica delle policy](sagemaker-hyperpod-eks-operate-console-ui-governance-policies-edit.md)
+ [Eliminazione delle policy](sagemaker-hyperpod-eks-operate-console-ui-governance-policies-delete.md)
+ [Allocazione della quota di elaborazione nella governance delle attività di Amazon SageMaker HyperPod](sagemaker-hyperpod-eks-operate-console-ui-governance-policies-compute-allocation.md)

# Creazione di policy
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-create"></a>

Puoi creare le configurazioni **Policy del cluster** e **Allocazione delle risorse di calcolo** nella scheda **Policy**. Di seguito vengono fornite istruzioni su come creare le configurazioni seguenti.
+ Crea la tua **Policy del cluster** per aggiornare il modo in cui viene assegnata la priorità alle attività e vengono allocate le risorse di calcolo inattive.
+ Crea un’**Allocazione delle risorse di calcolo** per creare una nuova policy di allocazione delle risorse di calcolo per un team.
**Nota**  
Quando crei un'**allocazione Compute**, dovrai configurare un controllo degli accessi basato sui ruoli (RBAC) Kubernetes per gli utenti di data scientist nel namespace corrispondente per eseguire attività su cluster orchestrati con Amazon EKS. HyperPod I namespace adottano il formato `hyperpod-ns-team-name`. Per configurare un RBAC Kubernetes, utilizza le istruzioni in [create team role](https://github.com/aws/sagemaker-hyperpod-cli/tree/main/helm_chart#5-create-team-role).

Per informazioni sui concetti della [Policy](sagemaker-hyperpod-eks-operate-console-ui-governance-policies.md) politica dei cluster EKS per la governance dei task, consulta. HyperPod 

**Creare politiche di governance delle HyperPod attività**

Questa procedura presuppone che tu abbia già creato un cluster Amazon EKS configurato con HyperPod. Se non l’hai ancora fatto, consulta [Creazione di un SageMaker HyperPod cluster con l'orchestrazione di Amazon EKS](sagemaker-hyperpod-eks-operate-console-ui-create-cluster.md).

1. Passa alla [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione a sinistra, in **HyperPodClusters**, scegli **Cluster Management**.

1. Scegli il tuo cluster Amazon EKS elencato tra **SageMaker HyperPodi cluster.**

1. Scegliere la scheda **Policy**.

1. Per creare la **Policy del cluster**:

   1. Scegli **Modifica** per aggiornare il modo in cui viene assegnata la priorità alle attività e vengono allocate le risorse di calcolo inattive.

   1. Dopo avere apportato le modifiche, scegli **Invia**.

1. Per creare un’**Allocazione delle risorse di calcolo**:

1. 

   1. Scegli l’opzione **Crea** corrispondente. Viene visualizzata la pagina per creare un’allocazione delle risorse di calcolo.

   1. Dopo avere apportato le modifiche, scegli **Invia**.

# Modifica delle policy
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-edit"></a>

Puoi modificare le configurazioni **Policy del cluster** e **Allocazione delle risorse di calcolo** nella scheda **Policy**. Di seguito vengono fornite istruzioni su come modificare le configurazioni seguenti.
+ Modifica **Policy del cluster** per aggiornare il modo in cui viene assegnata la priorità alle attività e vengono allocate le risorse di calcolo inattive.
+ Modifica **Allocazione delle risorse di calcolo** per creare una nuova policy di allocazione delle risorse di calcolo per un team.
**Nota**  
Quando crei un'**allocazione Compute**, dovrai configurare un controllo degli accessi basato sui ruoli (RBAC) Kubernetes per gli utenti di data scientist nel namespace corrispondente per eseguire attività su cluster orchestrati con Amazon EKS. HyperPod I namespace adottano il formato `hyperpod-ns-team-name`. Per configurare un RBAC Kubernetes, utilizza le istruzioni in [create team role](https://github.com/aws/sagemaker-hyperpod-cli/tree/main/helm_chart#5-create-team-role).

Per ulteriori informazioni sui concetti della politica dei cluster EKS per la governance dei task, consulta. HyperPod [Policy](sagemaker-hyperpod-eks-operate-console-ui-governance-policies.md)

**Modifica le politiche di governance delle HyperPod attività**

Questa procedura presuppone che tu abbia già creato un cluster Amazon EKS configurato con HyperPod. Se non l’hai ancora fatto, consulta [Creazione di un SageMaker HyperPod cluster con l'orchestrazione di Amazon EKS](sagemaker-hyperpod-eks-operate-console-ui-create-cluster.md).

1. Passa alla [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione a sinistra, in **HyperPodClusters**, scegli **Cluster Management**.

1. Scegli il tuo cluster Amazon EKS elencato tra **SageMaker HyperPodi cluster.**

1. Scegliere la scheda **Policy**.

1. Per modificare la **Policy del cluster**:

   1. Scegli **Modifica** per aggiornare il modo in cui viene assegnata la priorità alle attività e vengono allocate le risorse di calcolo inattive.

   1. Dopo avere apportato le modifiche, scegli **Invia**.

1. Per modificare **Allocazione delle risorse di calcolo**:

1. 

   1. Scegli la configurazione da modificare in **Allocazione delle risorse di calcolo**. Si apre la pagina dei dettagli di configurazione.

   1. Se desideri modificare queste configurazioni, scegli **Modifica**.

   1. Dopo avere apportato le modifiche, scegli **Invia**.

# Eliminazione delle policy
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-delete"></a>

Puoi eliminare le configurazioni **della policy del cluster** e **dell'allocazione di Compute** utilizzando la console SageMaker AI o. AWS CLI La pagina seguente fornisce istruzioni su come eliminare le politiche e le configurazioni di governance delle SageMaker HyperPod attività.

Per ulteriori informazioni sui concetti della politica del cluster EKS sulla governance delle HyperPod attività, vedere[Policy](sagemaker-hyperpod-eks-operate-console-ui-governance-policies.md).

**Nota**  
In caso di problemi con la visualizzazione o l’eliminazione delle policy di governance delle attività, potrebbe essere necessario aggiornare il set minimo di autorizzazioni dell’amministratore del cluster. Consulta la scheda **Amazon EKS** nella sezione [Utenti IAM per l’amministratore del cluster](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-admin). Per ulteriori informazioni, consulta [Eliminazione dei cluster](sagemaker-hyperpod-eks-operate-console-ui-governance-troubleshoot.md#hp-eks-troubleshoot-delete-policies).

## Eliminare le politiche di governance delle HyperPod attività (console)
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-delete-console"></a>

Quanto segue utilizza la console SageMaker AI per eliminare le politiche di governance delle HyperPod attività.

**Nota**  
Non è possibile eliminare la **politica del cluster** (`ClusterSchedulerConfig`) utilizzando la console SageMaker AI. Per informazioni su come eseguire questa operazione utilizzando il AWS CLI, consulta[Elimina le politiche di governance delle HyperPod attività ()AWS CLI](#sagemaker-hyperpod-eks-operate-console-ui-governance-policies-delete-cli).

**Per eliminare le policy di governance delle attività (console)**

1. Passa alla [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione a sinistra, in **HyperPodClusters**, scegli **Cluster Management**.

1. Scegli il tuo cluster Amazon EKS elencato tra **SageMaker HyperPodi cluster.**

1. Scegliere la scheda **Policy**.

1. Per eliminare l’**allocazione delle risorse di calcolo** (`ComputeQuota`):

   1. Nella sezione **Allocazione delle risorse di calcolo**, seleziona la configurazione da eliminare.

   1. Dal menu a discesa **Azioni**, seleziona **Elimina**.

   1. Segui le istruzioni nell’interfaccia utente per completare l’attività.

## Elimina le politiche di governance delle HyperPod attività ()AWS CLI
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-delete-cli"></a>

Quanto segue utilizza AWS CLI per eliminare le politiche di governance delle HyperPod attività.

**Nota**  
In caso di problemi con l'utilizzo dei seguenti comandi, potrebbe essere necessario aggiornare il file AWS CLI. Per ulteriori informazioni, consulta [Installazione o aggiornamento alla versione più recente della AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

**Per eliminare le policy di governance delle attività (AWS CLI)**

Imposta innanzitutto le variabili per i AWS CLI comandi seguenti.

```
REGION=aws-region
```

1. Ottieni le *cluster-arn* informazioni associate alle politiche che desideri eliminare. Puoi usare il seguente AWS CLI comando per elencare i cluster presenti nel tuo Regione AWS.

   ```
   aws sagemaker list-clusters \
       --region ${REGION}
   ```

1. Per eliminare le allocazioni delle risorse di calcolo (`ComputeQuota`):

   1. Elenca tutte le quote di calcolo associate al cluster. HyperPod 

      ```
      aws sagemaker list-compute-quotas \
          --cluster-arn cluster-arn \
          --region ${REGION}
      ```

   1. Per ogni `compute-quota-id` che desideri eliminare, utilizza il comando seguente per eliminare la quota di calcolo.

      ```
      aws sagemaker delete-compute-quota \
          --compute-quota-id compute-quota-id \
          --region ${REGION}
      ```

1. Per eliminare le policy del cluster (`ClusterSchedulerConfig`):

   1. Elenca tutte le politiche del cluster associate al HyperPod cluster.

      ```
      aws sagemaker list-cluster-scheduler-configs \
          --cluster-arn cluster-arn \
          --region ${REGION}
      ```

   1. Per ogni `cluster-scheduler-config-id` che desideri eliminare, utilizza il comando seguente per eliminare la quota di calcolo.

      ```
      aws sagemaker delete-cluster-scheduler-config 
          --cluster-scheduler-config-id scheduler-config-id \
          --region ${REGION}
      ```

# Allocazione della quota di elaborazione nella governance delle attività di Amazon SageMaker HyperPod
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-compute-allocation"></a>

Gli amministratori del cluster possono decidere le modalità di utilizzo delle risorse di calcolo acquistate dall’organizzazione. In questo modo si riducono gli sprechi e le risorse inattive. Puoi allocare una quota di calcolo in modo tale che i team possano prendere in prestito le risorse inutilizzate gli uni dagli altri. L'allocazione delle quote di calcolo nella governance delle HyperPod attività consente agli amministratori di allocare le risorse a livello di istanza e a un livello di risorse più granulare. Questa funzionalità offre una gestione flessibile ed efficiente delle risorse per i team, consentendo un controllo granulare sulle singole risorse di calcolo, invece di richiedere l’allocazione di intere istanze. L’allocazione a livello granulare elimina le inefficienze della tradizionale allocazione a livello di istanza. Grazie a questo approccio, puoi ottimizzare l’utilizzo delle risorse e ridurre le risorse di calcolo inattive.

L’allocazione delle quote di calcolo supporta tre tipi di allocazione delle risorse: acceleratori, vCPU e memoria. Gli acceleratori sono componenti delle istanze a calcolo accelerato che eseguono funzioni, ad esempio calcoli di numeri in virgola mobile, elaborazione grafica o corrispondenza di modelli di dati. Gli acceleratori includono acceleratori Trainium e nuclei GPUs neuronali. Per la condivisione di GPU tra più team, team diversi possono ricevere allocazioni della GPU specifiche dallo stesso tipo di istanza, massimizzando l’utilizzo dell’hardware dell’acceleratore. Per i carichi di lavoro a uso intensivo di memoria che richiedono RAM aggiuntiva per la preelaborazione dei dati o gli scenari di memorizzazione nella cache dei modelli, è possibile allocare una quota di memoria superiore al rapporto predefinito. GPU-to-memory Per le attività di pre-elaborazione che richiedono ingenti risorse di CPU, oltre all’addestramento della GPU, puoi allocare risorse della CPU indipendenti.

Una volta fornito un valore, la governance delle HyperPod attività calcola il rapporto utilizzando la formula «**risorsa allocata» divisa per la quantità totale di risorse disponibili nell'istanza**. HyperPod la governance delle attività utilizza quindi questo rapporto per applicare le allocazioni predefinite ad altre risorse, ma è possibile sovrascrivere queste impostazioni predefinite e personalizzarle in base al caso d'uso. Di seguito sono riportati alcuni scenari di esempio di come la governance delle HyperPod attività alloca le risorse in base ai valori dell'utente:
+ **Specificato solo l'acceleratore**: la governance delle HyperPod attività applica il rapporto predefinito a vCPU e memoria in base ai valori dell'acceleratore.
+ È stata **specificata solo la vCPU**: la governance delle HyperPod attività calcola il rapporto e lo applica alla memoria. Gli acceleratori sono impostati su 0.
+ **Specificata solo la memoria**: la HyperPod task governance calcola il rapporto e lo applica alla vCPU perché l'elaborazione è necessaria per eseguire carichi di lavoro specificati dalla memoria. Gli acceleratori sono impostati su 0.

Per controllare a livello di codice l'allocazione delle quote, è possibile utilizzare l'oggetto e specificare le allocazioni in numeri interi. [ ComputeQuotaResourceConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ComputeQuotaResourceConfig.html)

```
{
    "ComputeQuotaConfig": {
        "ComputeQuotaResources": [{
            "InstanceType": "ml.g5.24xlarge",
            "Accelerators": "16",
            "vCpu": "200.0",
            "MemoryInGiB": "2.0"
        }]
    }
}
```

Per visualizzare tutte le allocazioni allocate, incluse quelle predefinite, utilizza l'operazione. [ DescribeComputeQuota](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeComputeQuota.html) Per aggiornare le allocazioni, utilizzare l'operazione. [ UpdateComputeQuota](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateComputeQuota.html)

Puoi anche utilizzare la HyperPod CLI per allocare quote di calcolo. Per ulteriori informazioni sulla HyperPod CLI, vedere. [Esecuzione di processi su SageMaker HyperPod cluster orchestrati da Amazon EKS](sagemaker-hyperpod-eks-run-jobs.md) L'esempio seguente dimostra come impostare le quote di calcolo utilizzando la CLI. HyperPod 

```
hyp create hyp-pytorch-job --version 1.1 --job-name sample-job \
--image 123456789012.dkr.ecr.us-west-2.amazonaws.com/ptjob:latest \
--pull-policy "Always" \
--tasks-per-node 1 \
--max-retry 1 \
--priority high-priority \
--namespace hyperpod-ns-team-name \
--queue-name hyperpod-ns-team-name-localqueue \
--instance-type sample-instance-type \
--accelerators 1 \
--vcpu 3 \
--memory 1 \
--accelerators-limit 1 \
--vcpu-limit 4 \
--memory-limit 2
```

Per allocare le quote utilizzando la console, segui questi passaggi. AWS 

1. Apri la console Amazon SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. In HyperPod Cluster, scegli **Cluster management**.

1. In **Allocazioni delle risorse di calcolo**, scegli **Crea**.

1. Se non sono ancora presenti istanze, scegli **Aggiungi allocazione** per aggiungere un’istanza.

1. In **Allocazioni**, scegli di allocare in base alle istanze o alle singole risorse. Se allochi per singole risorse, l' SageMaker IA assegna automaticamente le allocazioni ad altre risorse in base al rapporto che hai scelto. Per sostituire questa allocazione delle risorse di calcolo basata sul rapporto, utilizza l’interruttore corrispondente.

1. Ripeti le fasi 4 e 5 per configurare istanze aggiuntive.

Dopo aver assegnato la quota di elaborazione, puoi inviare lavori tramite la CLI o HyperPod . `kubectl` HyperPodpianifica in modo efficiente i carichi di lavoro in base alla quota disponibile. 

# Allocazione della quota di partizione GPU
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-compute-allocation-gpu-partitions"></a>

È possibile estendere l'allocazione delle quote di elaborazione per supportare il partizionamento della GPU, abilitando una condivisione dettagliata delle risorse a livello di partizione GPU. Quando il partizionamento GPU è abilitato su Support nel cluster, ogni GPU fisica può essere partizionata GPUs in più unità isolate con allocazioni multiprocessore definite di elaborazione, memoria e streaming. GPUs Per ulteriori informazioni sul partizionamento della GPU, vedere. [Utilizzo delle partizioni GPU in Amazon SageMaker HyperPod](sagemaker-hyperpod-eks-gpu-partitioning.md) Puoi assegnare partizioni GPU specifiche ai team, consentendo a più team di condividere una singola GPU mantenendo l'isolamento a livello di hardware e prestazioni prevedibili.

Ad esempio, un'istanza ml.p5.48xlarge con 8 H100 GPUs può essere partizionata in partizioni GPU ed è possibile allocare singole partizioni a team diversi in base ai requisiti delle rispettive attività. Quando si specificano le allocazioni delle partizioni GPU, la HyperPod task governance calcola le quote proporzionali di vCPU e memoria in base alla partizione GPU, in modo simile all'allocazione a livello di GPU. Questo approccio massimizza l'utilizzo della GPU eliminando la capacità inattiva e abilitando la condivisione delle risorse a costi contenuti tra più attività simultanee sulla stessa GPU fisica.

## Creazione di quote di calcolo
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-compute-allocation-gpu-partitions-creating"></a>

```
aws sagemaker create-compute-quota \
  --name "fractional-gpu-quota" \
  --compute-quota-config '{
    "ComputeQuotaResources": [
      {
        "InstanceType": "ml.p4d.24xlarge",
        "AcceleratorPartition": {
            "Count": 4,
            "Type": "mig-1g.5gb"
        }
      }
    ],
    "ResourceSharingConfig": { 
      "Strategy": "LendAndBorrow", 
      "BorrowLimit": 100 
    }
  }'
```

## Verifica delle risorse relative alle quote
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-compute-allocation-gpu-partitions-verifying"></a>

```
# Check ClusterQueue
kubectl get clusterqueues
kubectl describe clusterqueue QUEUE_NAME

# Check ResourceFlavors
kubectl get resourceflavor
kubectl describe resourceflavor FLAVOR_NAME
```

# Esempi di comandi di governance delle HyperPod AWS CLI attività
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-cli"></a>

È possibile utilizzare HyperPod con EKS tramite Kubectl o tramite CLI personalizzata HyperPod. È possibile utilizzare questi comandi tramite Studio o. AWS CLI Di seguito vengono forniti esempi di governance delle SageMaker HyperPod attività su come visualizzare i dettagli del cluster utilizzando i HyperPod AWS CLI comandi. Per ulteriori informazioni, incluse le modalità di installazione, consulta il repository [HyperPod Github della CLI](https://github.com/aws/sagemaker-hyperpod-cli).

**Topics**
+ [Informazioni sulla quota del dispositivo dell’acceleratore del cluster](#hp-eks-cli-get-clusters)
+ [Invia un lavoro alla coda e allo SageMaker spazio dei nomi gestiti dall'intelligenza artificiale](#hp-eks-cli-start-job)
+ [Elenco dei processi](#hp-eks-cli-list-jobs)
+ [Informazioni dettagliate su un processo](#hp-eks-cli-get-job)
+ [Sospensione e ripresa dei processi](#hp-eks-cli-patch-job)
+ [Debug dei processi](#hp-eks-cli-other)

## Informazioni sulla quota del dispositivo dell’acceleratore del cluster
<a name="hp-eks-cli-get-clusters"></a>

Il comando di esempio seguente recupera le informazioni sulla quota del dispositivo dell’acceleratore del cluster.

```
hyperpod get-clusters -n hyperpod-ns-test-team
```

Il namespace in questo esempio, `hyperpod-ns-test-team`, viene creato in Kubernetes in base al nome del team, `test-team`, fornito durante l’allocazione delle risorse di calcolo Per ulteriori informazioni, consulta [Modifica delle policy](sagemaker-hyperpod-eks-operate-console-ui-governance-policies-edit.md).

Risposta di esempio:

```
[
    {
        "Cluster": "hyperpod-eks-test-cluster-id",
        "InstanceType": "ml.g5.xlarge",
        "TotalNodes": 2,
        "AcceleratorDevicesAvailable": 1,
        "NodeHealthStatus=Schedulable": 2,
        "DeepHealthCheckStatus=Passed": "N/A",
        "Namespaces": {
            "hyperpod-ns-test-team": {
                "TotalAcceleratorDevices": 1,
                "AvailableAcceleratorDevices": 1
            }
        }
    }
]
```

## Invia un lavoro alla coda e allo SageMaker spazio dei nomi gestiti dall'intelligenza artificiale
<a name="hp-eks-cli-start-job"></a>

Il comando di esempio seguente invia un lavoro al cluster. HyperPod Se hai accesso a un solo team, in questo caso ti HyperPod AWS CLI assegnerà automaticamente la coda. Se invece vengono rilevate più code, verranno visualizzate tutte le possibili opzioni selezionabili.

```
hyperpod start-job --job-name hyperpod-cli-test --job-kind kubeflow/PyTorchJob --image docker.io/kubeflowkatib/pytorch-mnist-cpu:v1beta1-bc09cfd --entry-script /opt/pytorch-mnist/mnist.py --pull-policy IfNotPresent --instance-type ml.g5.xlarge --node-count 1 --tasks-per-node 1 --results-dir ./result --priority training-priority
```

Le classi di priorità sono definite in **Policy del cluster**, che specifica il modo in cui viene assegnata la priorità alle attività e vengono allocate le risorse di calcolo inattive. Quando un Data Scientist invia un processo, utilizza uno dei nomi delle classi di priorità con il formato `priority-class-name-priority`. In questo esempio, `training-priority` si riferisce alla classe di priorità denominata “addestramento”. Per ulteriori informazioni sui concetti della policy, consulta [Policy](sagemaker-hyperpod-eks-operate-console-ui-governance-policies.md).

Se non viene specificata una classe di priorità, il processo viene considerato a bassa priorità, con un valore di classificazione delle attività pari a 0. 

Se viene specificata una classe di priorità, che però non corrisponde a una delle classi di priorità definite in **Policy del cluster**, l’invio non riesce e viene visualizzato un messaggio di errore che riporta il set definito di classi di priorità.

Puoi inviare il processo anche tramite un file di configurazione YAML con il comando seguente: 

```
hyperpod start-job --config-file ./yaml-configuration-file-name.yaml
```

Di seguito è riportato un esempio di file di configurazione YAML che equivale all’operazione di invio di un processo, come discusso in precedenza.

```
defaults:
  - override hydra/job_logging: stdout
hydra:
  run:
    dir: .
  output_subdir: null
training_cfg:
  entry_script: /opt/pytorch-mnist/mnist.py
  script_args: []
  run:
    name: hyperpod-cli-test
    nodes: 1
    ntasks_per_node: 1
cluster:
  cluster_type: k8s
  instance_type: ml.g5.xlarge
  custom_labels:
    kueue.x-k8s.io/priority-class: training-priority
  cluster_config:
    label_selector:
      required:
        sagemaker.amazonaws.com/node-health-status:
          - Schedulable
      preferred:
        sagemaker.amazonaws.com/deep-health-check-status:
          - Passed
      weights:
        - 100
    pullPolicy: IfNotPresent
base_results_dir: ./result
container: docker.io/kubeflowkatib/pytorch-mnist-cpu:v1beta1-bc09cfd
env_vars:
  NCCL_DEBUG: INFO
```

In alternativa, puoi inviare un processo con `kubectl` per garantire che l’attività venga visualizzata nella scheda **Dashboard**. Il seguente è un comando kubectl di esempio.

```
kubectl apply -f ./yaml-configuration-file-name.yaml
```

Quando invii il processo, includi il nome della coda e le etichette della classe di priorità. Ad esempio, con il nome della coda `hyperpod-ns-team-name-localqueue` e la classe di priorità `priority-class-name-priority`, devi includere le seguenti etichette:
+ `kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue` 
+ `kueue.x-k8s.io/priority-class: priority-class-name-priority`

Il frammento di configurazione YAML seguente mostra come aggiungere etichette al file di configurazione originale per garantire che l’attività venga visualizzata nella scheda **Dashboard**:

```
metadata:
    name: job-name
    namespace: hyperpod-ns-team-name
    labels:
        kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue
        kueue.x-k8s.io/priority-class: priority-class-name-priority
```

## Elenco dei processi
<a name="hp-eks-cli-list-jobs"></a>

Il comando seguente elenca i processi e i relativi dettagli.

```
hyperpod list-jobs
```

Risposta di esempio:

```
{
    "jobs": [
        {
            "Name": "hyperpod-cli-test",
            "Namespace": "hyperpod-ns-test-team",
            "CreationTime": "2024-11-18T21:21:15Z",
            "Priority": "training",
            "State": "Succeeded"
        }
    ]
}
```

## Informazioni dettagliate su un processo
<a name="hp-eks-cli-get-job"></a>

Il comando seguente fornisce i dettagli di un processo. Se non viene specificato alcun namespace, HyperPod AWS CLI recupererà uno spazio dei nomi gestito dall' SageMaker IA a cui hai accesso.

```
hyperpod get-job --job-name hyperpod-cli-test
```

Risposta di esempio:

```
{
    "Name": "hyperpod-cli-test",
    "Namespace": "hyperpod-ns-test-team",
    "Label": {
        "app": "hyperpod-cli-test",
        "app.kubernetes.io/managed-by": "Helm",
        "kueue.x-k8s.io/priority-class": "training"
    },
    "CreationTimestamp": "2024-11-18T21:21:15Z",
    "Status": {
        "completionTime": "2024-11-18T21:25:24Z",
        "conditions": [
            {
                "lastTransitionTime": "2024-11-18T21:21:15Z",
                "lastUpdateTime": "2024-11-18T21:21:15Z",
                "message": "PyTorchJob hyperpod-cli-test is created.",
                "reason": "PyTorchJobCreated",
                "status": "True",
                "type": "Created"
            },
            {
                "lastTransitionTime": "2024-11-18T21:21:17Z",
                "lastUpdateTime": "2024-11-18T21:21:17Z",
                "message": "PyTorchJob hyperpod-ns-test-team/hyperpod-cli-test is running.",
                "reason": "PyTorchJobRunning",
                "status": "False",
                "type": "Running"
            },
            {
                "lastTransitionTime": "2024-11-18T21:25:24Z",
                "lastUpdateTime": "2024-11-18T21:25:24Z",
                "message": "PyTorchJob hyperpod-ns-test-team/hyperpod-cli-test successfully completed.",
                "reason": "PyTorchJobSucceeded",
                "status": "True",
                "type": "Succeeded"
            }
        ],
            "replicaStatuses": {
                "Worker": {
                    "selector": "training.kubeflow.org/job-name=hyperpod-cli-test,training.kubeflow.org/operator-name=pytorchjob-controller,training.kubeflow.org/replica-type=worker",
                    "succeeded": 1
                }
            },
        "startTime": "2024-11-18T21:21:15Z"
    },
    "ConsoleURL": "https://us-west-2.console.aws.amazon.com/sagemaker/home?region=us-west-2#/cluster-management/hyperpod-eks-test-cluster-id“
}
```

## Sospensione e ripresa dei processi
<a name="hp-eks-cli-patch-job"></a>

Se si desidera rimuovere alcuni lavori inviati dallo scheduler, HyperPod AWS CLI fornisce il `suspend` comando per rimuovere temporaneamente il lavoro dall'orchestrazione. Il processo sospeso non sarà più pianificato a meno che non venga ripreso manualmente con il comando `unsuspend`.

Per sospendere temporaneamente un processo:

```
hyperpod patch-job suspend --job-name hyperpod-cli-test
```

Per aggiungere nuovamente un processo alla coda:

```
hyperpod patch-job unsuspend --job-name hyperpod-cli-test
```

## Debug dei processi
<a name="hp-eks-cli-other"></a>

Fornisce HyperPod AWS CLI anche altri comandi per il debug dei problemi di invio dei lavori. Ad esempio `list-pods` e `get-logs` nel repository HyperPod AWS CLI Github.

# Risoluzione dei problemi
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-troubleshoot"></a>

La pagina seguente contiene soluzioni note per la risoluzione dei problemi dei cluster EKS. HyperPod

**Topics**
+ [Scheda Pannello di controllo](#hp-eks-troubleshoot-dashboard)
+ [Scheda Attività](#hp-eks-troubleshoot-tasks)
+ [Policy](#hp-eks-troubleshoot-policies)
+ [Eliminazione dei cluster](#hp-eks-troubleshoot-delete-policies)
+ [Condivisione di risorse non allocate](#hp-eks-troubleshoot-unallocated-resource-sharing)

## Scheda Pannello di controllo
<a name="hp-eks-troubleshoot-dashboard"></a>

**Installazione non riuscita del componente aggiuntivo EKS**

Per installare correttamente il componente aggiuntivo EKS, è necessaria una versione di Kubernets >= 1.30. Per l’aggiornamento, consulta [Update Kubernetes version](https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html).

Per installare correttamente il componente aggiuntivo EKS, tutti i nodi devono essere in stato **Pronto** e tutti i pod devono essere in stato **In esecuzione**. 

Per verificare lo stato dei nodi, utilizza il [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/list-cluster-nodes.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/list-cluster-nodes.html) AWS CLI comando o accedi al cluster EKS nella [console EKS](https://console.aws.amazon.com/eks/home#/clusters) e visualizza lo stato dei nodi. Risolvi il problema per ogni nodo o contatta il tuo amministratore. Se lo stato del nodo è **Sconosciuto**, elimina il nodo. Una volta che tutti gli stati dei nodi sono **pronti**, riprova a installare il componente aggiuntivo EKS HyperPod dalla console [Amazon SageMaker ](https://console.aws.amazon.com/sagemaker/) AI.

Per controllare lo stato dei pod, utilizza il comando della [CLI di Kubernetes](https://kubernetes.io/docs/reference/kubectl/) `kubectl get pods -n cloudwatch-agent` o accedi al cluster EKS nella [console EKS](https://console.aws.amazon.com/eks/home#/clusters) e visualizza lo stato dei pod con il namespace `cloudwatch-agent`. Risolvi il problema dei pod o contatta il tuo amministratore. Una volta che tutti gli stati del pod sono **in esecuzione**, riprova a installare il componente aggiuntivo EKS HyperPod dalla console [Amazon SageMaker ](https://console.aws.amazon.com/sagemaker/) AI.

Per ulteriori informazioni sulla risoluzione dei problemi, consulta [Risoluzione dei problemi del componente aggiuntivo Amazon CloudWatch Observability EKS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Observability-EKS-addon.html#Container-Insights-setup-EKS-addon-troubleshoot).

## Scheda Attività
<a name="hp-eks-troubleshoot-tasks"></a>

Se viene visualizzato il messaggio di errore relativo alla **mancata configurazione della Definizione di risorse personalizzate (CRD) nel cluster**, assegna le policy `EKSAdminViewPolicy` e `ClusterAccessRole` al ruolo di esecuzione del dominio. 
+ Per informazioni su come ottenere il ruolo di esecuzione, consulta [Acquisizione del ruolo di esecuzione](sagemaker-roles.md#sagemaker-roles-get-execution-role).
+ Per informazioni su come collegare le policy a un utente o a un gruppo IAM, consulta [Adding and removing IAM identity permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html).

## Policy
<a name="hp-eks-troubleshoot-policies"></a>

Di seguito sono elencate le soluzioni agli errori relativi alle politiche che utilizzano la console HyperPod APIs or.
+ Se la policy è in stato `CreateFailed` o `CreateRollbackFailed`, devi eliminare la policy non riuscita e crearne una nuova.
+ Se la policy è in stato `UpdateFailed`, prova a eseguire di nuovo l’aggiornamento con lo stesso ARN della policy.
+ Se la policy è in stato `UpdateRollbackFailed`, devi eliminare la policy non riuscita e crearne una nuova.
+ Se la policy è in stato `DeleteFailed` o `DeleteRollbackFailed`, prova a eliminarla di nuovo con lo stesso ARN della policy.
  + Se hai riscontrato un errore durante il tentativo di eliminare la **prioritizzazione di Compute**, o la policy del cluster, utilizzando la HyperPod console, prova a eliminarlo `cluster-scheduler-config` utilizzando l'API. Per verificare lo stato della risorsa, vai alla pagina dei dettagli di un’allocazione delle risorse di calcolo.

Per visualizzare maggiori dettagli sull’errore, utilizza l’API describe.

## Eliminazione dei cluster
<a name="hp-eks-troubleshoot-delete-policies"></a>

Di seguito sono elencate le soluzioni note per gli errori relativi all’eliminazione dei cluster.
+ Se l'eliminazione del cluster fallisce a causa delle politiche di governance delle SageMaker HyperPod attività allegate, dovrai farlo. [Eliminazione delle policy](sagemaker-hyperpod-eks-operate-console-ui-governance-policies-delete.md)
+ Se l’eliminazione del cluster non riesce perché mancano le autorizzazioni seguenti, devi aggiornare il set minimo di autorizzazioni dell’amministratore del cluster. Consulta la scheda **Amazon EKS** nella sezione [Utenti IAM per l’amministratore del cluster](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-admin).
  + `sagemaker:ListComputeQuotas`
  + `sagemaker:ListClusterSchedulerConfig`
  + `sagemaker:DeleteComputeQuota`
  + `sagemaker:DeleteClusterSchedulerConfig`

## Condivisione di risorse non allocate
<a name="hp-eks-troubleshoot-unallocated-resource-sharing"></a>

Se la capacità del pool di risorse non allocate è inferiore al previsto:

1. **Verifica lo stato di disponibilità del nodo**

   ```
   kubectl get nodes
   ```

   Verifica che tutti i nodi mostrino `Ready` lo stato nella colonna STATUS.

1. **Controlla lo stato di pianificazione del nodo**

   ```
   kubectl get nodes -o custom-columns=NAME:.metadata.name,UNSCHEDULABLE:.spec.unschedulable
   ```

   Verifica che i nodi mostrino `<none>` o `false` (no`true`).

1. **Elenca la condivisione di risorse non allocate: ClusterQueues**

   ```
   kubectl get clusterqueue | grep hyperpod-ns-idle-resource-sharing
   ```

   Questo mostra tutte le condivisioni di risorse non allocate. ClusterQueues Se non ClusterQueues vengono visualizzati, controlla la ClusterSchedulerConfig politica `FailureReason` sottostante per vedere se ci sono messaggi di errore per continuare il debug.

1. **Verifica la quota di condivisione delle risorse non allocate:**

   ```
   kubectl describe clusterqueue hyperpod-ns-idle-resource-sharing-<index>
   ```

   Controlla la `spec.resourceGroups[].flavors[].resources` sezione per vedere la quota assegnata per ogni tipo di risorsa.

    ClusterQueues Può esistere una condivisione multipla di risorse non allocate a seconda del numero di tipologie di risorse presenti nel cluster. 

1. **Verifica lo stato della configurazione MIG (nodi GPU):**

   ```
   kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels.nvidia\.com/mig\.config\.state}{"\n"}{end}'
   ```

   Verifica che i nodi abilitati a MIG mostrino lo stato. `success`

# Documento di attribuzione per la governance delle SageMaker HyperPod attività di Amazon
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-attributions"></a>

Di seguito puoi scoprire le attribuzioni e le licenze di terze parti per il materiale utilizzato nella SageMaker HyperPod task governance di Amazon.

**Topics**
+ [[base-files](https://packages.debian.org/bookworm/base-files)](#hp-eks-task-governance-attributions-base-files)
+ [[netbase](https://packages.debian.org/source/stable/netbase)](#hp-eks-task-governance-attributions-netbase)
+ [[golang-lru](https://github.com/hashicorp/golang-lru)](#hp-eks-task-governance-attributions-golang-lru)

## [base-files](https://packages.debian.org/bookworm/base-files)
<a name="hp-eks-task-governance-attributions-base-files"></a>

```
This is the Debian prepackaged version of the Debian Base System
Miscellaneous files. These files were written by Ian Murdock
<imurdock@debian.org> and Bruce Perens <bruce@pixar.com>.

This package was first put together by Bruce Perens <Bruce@Pixar.com>,
from his own sources.

The GNU Public Licenses in /usr/share/common-licenses were taken from
ftp.gnu.org and are copyrighted by the Free Software Foundation, Inc.

The Artistic License in /usr/share/common-licenses is the one coming
from Perl and its SPDX name is "Artistic License 1.0 (Perl)".


Copyright © 1995-2011 Software in the Public Interest.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.
```

## [netbase](https://packages.debian.org/source/stable/netbase)
<a name="hp-eks-task-governance-attributions-netbase"></a>

```
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Comment:
 This package was created by Peter Tobias tobias@et-inf.fho-emden.de on
 Wed, 24 Aug 1994 21:33:28 +0200 and maintained by Anthony Towns
 <ajt@debian.org> until 2001.
 It is currently maintained by Marco d'Itri <md@linux.it>.

Files: *
Copyright:
 Copyright © 1994-1998 Peter Tobias
 Copyright © 1998-2001 Anthony Towns
 Copyright © 2002-2022 Marco d'Itri
License: GPL-2
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License, version 2, as
 published by the Free Software Foundation.
 .
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 .
 You should have received a copy of the GNU General Public License along
 with this program; if not, write to the Free Software Foundation,
 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 .
 On Debian systems, the complete text of the GNU General Public License
 version 2 can be found in '/usr/share/common-licenses/GPL-2'.
```

## [golang-lru](https://github.com/hashicorp/golang-lru)
<a name="hp-eks-task-governance-attributions-golang-lru"></a>

```
Copyright © 2014 HashiCorp, Inc.

Mozilla Public License, version 2.0

1. Definitions

1.1. "Contributor"

     means each individual or legal entity that creates, contributes to the
     creation of, or owns Covered Software.

1.2. "Contributor Version"

     means the combination of the Contributions of others (if any) used by a
     Contributor and that particular Contributor's Contribution.

1.3. "Contribution"

     means Covered Software of a particular Contributor.

1.4. "Covered Software"

     means Source Code Form to which the initial Contributor has attached the
     notice in Exhibit A, the Executable Form of such Source Code Form, and
     Modifications of such Source Code Form, in each case including portions
     thereof.

1.5. "Incompatible With Secondary Licenses"
     means

     a. that the initial Contributor has attached the notice described in
        Exhibit B to the Covered Software; or

     b. that the Covered Software was made available under the terms of
        version 1.1 or earlier of the License, but not also under the terms of
        a Secondary License.

1.6. "Executable Form"

     means any form of the work other than Source Code Form.

1.7. "Larger Work"

     means a work that combines Covered Software with other material, in a
     separate file or files, that is not Covered Software.

1.8. "License"

     means this document.

1.9. "Licensable"

     means having the right to grant, to the maximum extent possible, whether
     at the time of the initial grant or subsequently, any and all of the
     rights conveyed by this License.

1.10. "Modifications"

     means any of the following:

     a. any file in Source Code Form that results from an addition to,
        deletion from, or modification of the contents of Covered Software; or

     b. any new file in Source Code Form that contains any Covered Software.

1.11. "Patent Claims" of a Contributor

      means any patent claim(s), including without limitation, method,
      process, and apparatus claims, in any patent Licensable by such
      Contributor that would be infringed, but for the grant of the License,
      by the making, using, selling, offering for sale, having made, import,
      or transfer of either its Contributions or its Contributor Version.

1.12. "Secondary License"

      means either the GNU General Public License, Version 2.0, the GNU Lesser
      General Public License, Version 2.1, the GNU Affero General Public
      License, Version 3.0, or any later versions of those licenses.

1.13. "Source Code Form"

      means the form of the work preferred for making modifications.

1.14. "You" (or "Your")

      means an individual or a legal entity exercising rights under this
      License. For legal entities, "You" includes any entity that controls, is
      controlled by, or is under common control with You. For purposes of this
      definition, "control" means (a) the power, direct or indirect, to cause
      the direction or management of such entity, whether by contract or
      otherwise, or (b) ownership of more than fifty percent (50%) of the
      outstanding shares or beneficial ownership of such entity.


2. License Grants and Conditions

2.1. Grants

     Each Contributor hereby grants You a world-wide, royalty-free,
     non-exclusive license:

     a. under intellectual property rights (other than patent or trademark)
        Licensable by such Contributor to use, reproduce, make available,
        modify, display, perform, distribute, and otherwise exploit its
        Contributions, either on an unmodified basis, with Modifications, or
        as part of a Larger Work; and

     b. under Patent Claims of such Contributor to make, use, sell, offer for
        sale, have made, import, and otherwise transfer either its
        Contributions or its Contributor Version.

2.2. Effective Date

     The licenses granted in Section 2.1 with respect to any Contribution
     become effective for each Contribution on the date the Contributor first
     distributes such Contribution.

2.3. Limitations on Grant Scope

     The licenses granted in this Section 2 are the only rights granted under
     this License. No additional rights or licenses will be implied from the
     distribution or licensing of Covered Software under this License.
     Notwithstanding Section 2.1(b) above, no patent license is granted by a
     Contributor:

     a. for any code that a Contributor has removed from Covered Software; or

     b. for infringements caused by: (i) Your and any other third party's
        modifications of Covered Software, or (ii) the combination of its
        Contributions with other software (except as part of its Contributor
        Version); or

     c. under Patent Claims infringed by Covered Software in the absence of
        its Contributions.

     This License does not grant any rights in the trademarks, service marks,
     or logos of any Contributor (except as may be necessary to comply with
     the notice requirements in Section 3.4).

2.4. Subsequent Licenses

     No Contributor makes additional grants as a result of Your choice to
     distribute the Covered Software under a subsequent version of this
     License (see Section 10.2) or under the terms of a Secondary License (if
     permitted under the terms of Section 3.3).

2.5. Representation

     Each Contributor represents that the Contributor believes its
     Contributions are its original creation(s) or it has sufficient rights to
     grant the rights to its Contributions conveyed by this License.

2.6. Fair Use

     This License is not intended to limit any rights You have under
     applicable copyright doctrines of fair use, fair dealing, or other
     equivalents.

2.7. Conditions

     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
     Section 2.1.


3. Responsibilities

3.1. Distribution of Source Form

     All distribution of Covered Software in Source Code Form, including any
     Modifications that You create or to which You contribute, must be under
     the terms of this License. You must inform recipients that the Source
     Code Form of the Covered Software is governed by the terms of this
     License, and how they can obtain a copy of this License. You may not
     attempt to alter or restrict the recipients' rights in the Source Code
     Form.

3.2. Distribution of Executable Form

     If You distribute Covered Software in Executable Form then:

     a. such Covered Software must also be made available in Source Code Form,
        as described in Section 3.1, and You must inform recipients of the
        Executable Form how they can obtain a copy of such Source Code Form by
        reasonable means in a timely manner, at a charge no more than the cost
        of distribution to the recipient; and

     b. You may distribute such Executable Form under the terms of this
        License, or sublicense it under different terms, provided that the
        license for the Executable Form does not attempt to limit or alter the
        recipients' rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

     You may create and distribute a Larger Work under terms of Your choice,
     provided that You also comply with the requirements of this License for
     the Covered Software. If the Larger Work is a combination of Covered
     Software with a work governed by one or more Secondary Licenses, and the
     Covered Software is not Incompatible With Secondary Licenses, this
     License permits You to additionally distribute such Covered Software
     under the terms of such Secondary License(s), so that the recipient of
     the Larger Work may, at their option, further distribute the Covered
     Software under the terms of either this License or such Secondary
     License(s).

3.4. Notices

     You may not remove or alter the substance of any license notices
     (including copyright notices, patent notices, disclaimers of warranty, or
     limitations of liability) contained within the Source Code Form of the
     Covered Software, except that You may alter any license notices to the
     extent required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

     You may choose to offer, and to charge a fee for, warranty, support,
     indemnity or liability obligations to one or more recipients of Covered
     Software. However, You may do so only on Your own behalf, and not on
     behalf of any Contributor. You must make it absolutely clear that any
     such warranty, support, indemnity, or liability obligation is offered by
     You alone, and You hereby agree to indemnify every Contributor for any
     liability incurred by such Contributor as a result of warranty, support,
     indemnity or liability terms You offer. You may include additional
     disclaimers of warranty and limitations of liability specific to any
     jurisdiction.

4. Inability to Comply Due to Statute or Regulation

   If it is impossible for You to comply with any of the terms of this License
   with respect to some or all of the Covered Software due to statute,
   judicial order, or regulation then You must: (a) comply with the terms of
   this License to the maximum extent possible; and (b) describe the
   limitations and the code they affect. Such description must be placed in a
   text file included with all distributions of the Covered Software under
   this License. Except to the extent prohibited by statute or regulation,
   such description must be sufficiently detailed for a recipient of ordinary
   skill to be able to understand it.

5. Termination

5.1. The rights granted under this License will terminate automatically if You
     fail to comply with any of its terms. However, if You become compliant,
     then the rights granted under this License from a particular Contributor
     are reinstated (a) provisionally, unless and until such Contributor
     explicitly and finally terminates Your grants, and (b) on an ongoing
     basis, if such Contributor fails to notify You of the non-compliance by
     some reasonable means prior to 60 days after You have come back into
     compliance. Moreover, Your grants from a particular Contributor are
     reinstated on an ongoing basis if such Contributor notifies You of the
     non-compliance by some reasonable means, this is the first time You have
     received notice of non-compliance with this License from such
     Contributor, and You become compliant prior to 30 days after Your receipt
     of the notice.

5.2. If You initiate litigation against any entity by asserting a patent
     infringement claim (excluding declaratory judgment actions,
     counter-claims, and cross-claims) alleging that a Contributor Version
     directly or indirectly infringes any patent, then the rights granted to
     You by any and all Contributors for the Covered Software under Section
     2.1 of this License shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
     license agreements (excluding distributors and resellers) which have been
     validly granted by You or Your distributors under this License prior to
     termination shall survive termination.

6. Disclaimer of Warranty

   Covered Software is provided under this License on an "as is" basis,
   without warranty of any kind, either expressed, implied, or statutory,
   including, without limitation, warranties that the Covered Software is free
   of defects, merchantable, fit for a particular purpose or non-infringing.
   The entire risk as to the quality and performance of the Covered Software
   is with You. Should any Covered Software prove defective in any respect,
   You (not any Contributor) assume the cost of any necessary servicing,
   repair, or correction. This disclaimer of warranty constitutes an essential
   part of this License. No use of  any Covered Software is authorized under
   this License except under this disclaimer.

7. Limitation of Liability

   Under no circumstances and under no legal theory, whether tort (including
   negligence), contract, or otherwise, shall any Contributor, or anyone who
   distributes Covered Software as permitted above, be liable to You for any
   direct, indirect, special, incidental, or consequential damages of any
   character including, without limitation, damages for lost profits, loss of
   goodwill, work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses, even if such party shall have been
   informed of the possibility of such damages. This limitation of liability
   shall not apply to liability for death or personal injury resulting from
   such party's negligence to the extent applicable law prohibits such
   limitation. Some jurisdictions do not allow the exclusion or limitation of
   incidental or consequential damages, so this exclusion and limitation may
   not apply to You.

8. Litigation

   Any litigation relating to this License may be brought only in the courts
   of a jurisdiction where the defendant maintains its principal place of
   business and such litigation shall be governed by laws of that
   jurisdiction, without reference to its conflict-of-law provisions. Nothing
   in this Section shall prevent a party's ability to bring cross-claims or
   counter-claims.

9. Miscellaneous

   This License represents the complete agreement concerning the subject
   matter hereof. If any provision of this License is held to be
   unenforceable, such provision shall be reformed only to the extent
   necessary to make it enforceable. Any law or regulation which provides that
   the language of a contract shall be construed against the drafter shall not
   be used to construe this License against a Contributor.


10. Versions of the License

10.1. New Versions

      Mozilla Foundation is the license steward. Except as provided in Section
      10.3, no one other than the license steward has the right to modify or
      publish new versions of this License. Each version will be given a
      distinguishing version number.

10.2. Effect of New Versions

      You may distribute the Covered Software under the terms of the version
      of the License under which You originally received the Covered Software,
      or under the terms of any subsequent version published by the license
      steward.

10.3. Modified Versions

      If you create software not governed by this License, and you want to
      create a new license for such software, you may create and use a
      modified version of this License if you rename the license and remove
      any references to the name of the license steward (except to note that
      such modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary
      Licenses If You choose to distribute Source Code Form that is
      Incompatible With Secondary Licenses under the terms of this version of
      the License, the notice described in Exhibit B of this License must be
      attached.

Exhibit A - Source Code Form License Notice

      This Source Code Form is subject to the
      terms of the Mozilla Public License, v.
      2.0. If a copy of the MPL was not
      distributed with this file, You can
      obtain one at
      http://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular file,
then You may include the notice in a location (such as a LICENSE file in a
relevant directory) where a recipient would be likely to look for such a
notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - "Incompatible With Secondary Licenses" Notice

      This Source Code Form is "Incompatible
      With Secondary Licenses", as defined by
      the Mozilla Public License, v. 2.0.
```