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à.
Condividi le GPU su Amazon ECS
Molti carichi di lavoro delle GPU, come l'inferenza e il servizio di piccoli modelli, utilizzano solo una frazione dell'elaborazione e della memoria di una GPU. Senza condivisione, il resto di tale capacità rimane inattivo. Con Amazon ECS, puoi condividere un singolo dispositivo fisico NVIDIA GPU su più contenitori in modo da poter raggruppare più carichi di lavoro sullo stesso hardware e ridurre gli sprechi di GPU.
Con Amazon ECS, puoi usare NVIDIA Multi-Process Servizio (MPS) per la condivisione della GPU. MPS è un NVIDIA CUDA funzionalità che esegue più processi contemporaneamente sulla stessa GPU, migliorando l'utilizzo della GPU e riducendo il sovraccarico dovuto al passaggio dal contesto. MPS fornisce il partizionamento della memoria e dell'elaborazione, quindi ogni contenitore ha un limite di memoria configurabile e un limite di elaborazione opzionale.
Amazon ECS gestisce MPS per te. Inizia il MPS daemon sulle istanze GPU, posiziona i contenitori nelle GPU in base alla memoria disponibile e applica i limiti per contenitore.
MPS fornisce la condivisione a livello di software anziché il partizionamento a livello di hardware. Per ulteriori informazioni su MPS, vedi Multi-Process Servizio
Amazon ECS supporta la condivisione di GPU con MPS su istanze gestite Amazon ECS e Amazon ECS su Amazon EC2.
Quando usare la condivisione tramite GPU
Condivisione GPU con MPS è adatto per:
-
Carichi di lavoro di inferenza, generazione di incorporamenti e server di piccoli modelli che non utilizzano completamente una GPU
-
Multi-model serve laddove più modelli possono condividere una singola GPU
-
Ambienti di sviluppo e test
-
Esecuzione di più carichi di lavoro leggeri su GPU sullo stesso hardware per ridurre i costi
La condivisione della GPU non è consigliata per:
-
Addestramento di modelli di grandi dimensioni che richiede l'intera memoria della GPU
-
Carichi di lavoro sensibili ai guasti della GPU provenienti da contenitori adiacenti, perché MPS è una condivisione a livello di software e tutti i contenitori su una GPU sono uguali CUDA contesto
-
Carichi di lavoro che richiedono l'isolamento a livello di hardware tra i processi
Come funziona la condivisione delle GPU
La condivisione della GPU viene configurata nella definizione del contenitore di una definizione di attività. In ogni contenitore resourceRequirements, fornisci un sharingStrategy con un valore di memoria GPU invece di specificare un numero intero in value per una GPU dedicata.
Quando Amazon ECS inserisce un'attività che utilizza la condivisione GPU, somma la memoria GPU richiesta da tutti i contenitori GPU presenti nell'attività e cerca una GPU con sufficiente memoria libera. Tutti i contenitori GPU all'interno di una singola attività vengono collocati sulla stessa GPU fisica. Se l'attività richiede 4.000 MiB su due contenitori, Amazon ECS trova una singola GPU con almeno 4.000 MiB di memoria residua e vi colloca entrambi i contenitori.
Più attività possono anche condividere la stessa GPU fisica. Se una GPU dispone di memoria residua sufficiente, Amazon ECS può inserire attività aggiuntive, anche se tali attività provengono da servizi diversi. Un'attività che condivide una GPU e un'attività che utilizza una GPU dedicata possono essere eseguite sulla stessa istanza, su GPU diverse.
Nelle istanze gestite di Amazon ECS, Amazon ECS monitora lo stato delle GPU e MPS demone su ogni istanza. Se Amazon ECS rileva un guasto hardware della GPU o un MPS un daemon failure, scarica l'istanza e la sostituisce. Per ulteriori informazioni sulla riparazione automatica della GPU, vedi Riparazione automatica della GPU per le istanze gestite da Amazon ECS.
Configurare la condivisione della GPU
Per condividere una GPU, aggiungi un sharingStrategy oggetto al resourceRequirements di ogni contenitore GPU nella definizione dell'attività. Il sharingStrategy oggetto contiene un nvidiaMps oggetto con i seguenti campi. Per ulteriori informazioni su resourceRequirements, consultare Requisiti per le risorse.
memory-
Obbligatorio: sì
Il limite di memoria della GPU per il contenitore, in MiB. Questo valore è un limite massimo di memoria GPU utilizzabile dal contenitore. Il valore deve essere maggiore di
0.Per trovare la memoria GPU totale disponibile su un'istanza, usa
DescribeContainerInstancesAPI (iltotalMemoryInMiBcampo) o controlla le specifiche della GPU per il tuo tipo di istanza. maxComputePercent-
Obbligatorio: no
La percentuale massima di elaborazione GPU che il contenitore può utilizzare, come numero intero da
1a100. Questo stabilisce un limite massimo all'utilizzo della GPU del contenitore, non una prenotazione. Quando un contenitore è inattivo, l'elaborazione inutilizzata è disponibile per gli altri contenitori sulla stessa GPU, fino a ciascuno dei proprimaxComputePercentvalori. Se non si specifica questo parametro, il contenitore può utilizzare fino a100percentuale.
Amazon ECS colloca le attività in base solo alla memoria GPU, quindi non tiene conto del calcolo quando prende decisioni di posizionamento.
Puoi impostare la strategia di condivisione nell'editor di definizioni delle attività della console Amazon ECS o con JSON, il AWS CLI o l'API.
Amazon ECS imposta le seguenti variabili di ambiente riservate in ogni contenitore che condivide una GPU. Non impostare queste variabili nella definizione del contenitore.
-
CUDA_MPS_PINNED_DEVICE_MEM_LIMITper il limite di memoria -
CUDA_MPS_ACTIVE_THREAD_PERCENTAGEper il soffitto di calcolo
Il seguente esempio di definizione delle attività esegue due contenitori di inferenza che condividono una GPU con MPS, insieme a un contenitore sidecar non GPU. Ogni contenitore GPU richiede una quantità diversa di memoria e calcolo della GPU.
Nel seguente esempio, sostituisci account-id con il tuo AWS ID dell'account.
{ "family": "mps-inference", "networkMode": "awsvpc", "executionRoleArn": "arn:aws:iam::account-id:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "model-a", "image": "nvidia/cuda:12.0.0-base-ubuntu22.04", "essential": true, "resourceRequirements": [ { "type": "GPU", "sharingStrategy": { "nvidiaMps": { "memory": 12288, "maxComputePercent": 50 } } } ] }, { "name": "model-b", "image": "nvidia/cuda:12.0.0-base-ubuntu22.04", "essential": true, "resourceRequirements": [ { "type": "GPU", "sharingStrategy": { "nvidiaMps": { "memory": 8192, "maxComputePercent": 25 } } } ] }, { "name": "log-router", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable", "essential": false } ], "requiresCompatibilities": [ "MANAGED_INSTANCES" ], "cpu": "4096", "memory": "8192" }
Regole di convalida
Amazon ECS applica le seguenti regole alle configurazioni di condivisione delle GPU:
-
Un requisito di risorse GPU utilizza:
value(una GPU dedicata) osharingStrategy(una GPU condivisa), ma non entrambe. Quando si specificasharingStrategy, devi ometterevalue. -
Tutti i contenitori GPU in un'attività devono utilizzare la stessa strategia di condivisione. Se un contenitore utilizza
sharingStrategy, nessun altro contenitore in quell'attività può richiedere una GPU dedicata convalue. -
Il
memoryil valore è obbligatorio e deve essere maggiore di0. -
Il valore
maxComputePercentè facoltativo. Se lo specifichi, il valore deve essere un numero intero compreso tra1a100. -
Per le istanze gestite di Amazon ECS, l'attività
requiresCompatibilitiesdeve includereMANAGED_INSTANCES. Per Amazon ECS su Amazon EC2, usaEC2tipo di lancio. -
La condivisione tramite GPU non è supportata per le definizioni di attività che richiedono
EXTERNALcompatibilità (Amazon ECS Anywhere). -
Non puoi specificare
sharingStrategyin un contenitore override. Il contenitore ha la precedenza inRunTaskeStartTaskle richieste non supportano la configurazione di condivisione della GPU, quindi definiscisharingStrategynella definizione dell'attività invece. I servizi eseguono la definizione dell'attività come registrata e non sono interessati.
Configura la condivisione della GPU per tipo di avvio
Con Amazon ECS Managed Instances, Amazon ECS seleziona e gestisce le istanze GPU per te. Non è necessaria alcuna configurazione oltre alla definizione delle attività.
Con Amazon ECS su Amazon EC2, avvia un programma supportato NVIDIA Istanza GPU con Amazon ECS AL2023 GPU-optimized SCOPO. Condivisione della GPU con MPS su Amazon ECS su Amazon EC2 richiede la versione dell'agente contenitore Amazon ECS 1.107.0 o versione successiva e Amazon ECS AL2023 GPU-optimized versione AMI 20261019 o successivo. Dopo la registrazione dell'istanza nel cluster, la configurazione della definizione delle attività è la stessa delle istanze gestite di Amazon ECS.
Considerazioni
-
Condivisione GPU con MPS è supportato su G4dn, G5, G6, G6e, G7, G7e, P3, P4d, P5, P5e, P5en e P6-B200 famiglie di istanze. La condivisione della GPU non è supportata su AWS Attività daemon gestite da Fargate, Amazon ECS Express Mode o Amazon ECS.
-
Condivisione GPU con MPS su Amazon ECS su Amazon EC2 richiede la versione dell'agente contenitore Amazon ECS
1.107.0o versione successiva e Amazon ECS AL2023 GPU-optimized versione AMI20261019o successivo. -
Esegui un singolo processo GPU per contenitore quando usi NVIDIA MPS per la condivisione della GPU. Per le applicazioni che richiedono più processi GPU, configura i requisiti di memoria della GPU in base al picco combinato di utilizzo di memoria di tutti i processi. Utilizza i controlli a livello di applicazione per mantenere il consumo totale entro il valore configurato. Amazon ECS utilizza questo valore per determinare il posizionamento dei container su GPU condivise. Di conseguenza, le applicazioni multiprocesso possono consumare più memoria GPU di quella configurata, il che può causare problemi di memoria.
-
Se un container genera un errore irreversibile della GPU, ad esempio un accesso illegale alla memoria da un kernel GPU difettoso, i contenitori che condividono quella GPU fisica potrebbero risentirne. I contenitori su altre GPU sulla stessa istanza non sono interessati.
-
I
maxComputePercentil valore è un massimale, non una prenotazione garantita. Quando un contenitore è inattivo, il calcolo inutilizzato è disponibile per gli altri contenitori sulla stessa GPU, fino a ciascuno dei proprimaxComputePercentvalori. -
La condivisione tramite GPU non è supportata per le definizioni di attività che richiedono
EXTERNALcompatibilità (Amazon ECS Anywhere). -
Le attività di servizi diversi che utilizzano lo stesso fornitore di capacità possono essere collocate sulla stessa GPU. Per evitare che le attività di servizi diversi condividano una GPU, utilizza provider di capacità o cluster separati per tali servizi.
-
Per le GPU condivise con MPS, Amazon ECS non emette le seguenti metriche GPU per attività e per contenitore:
Il
TaskGPUUtilizationeContainerGPUUtilizationmetriche.Le
TaskGPUMemoryUtilizationeContainerGPUMemoryUtilizationmetriche.Le
TaskGPUMemoryTotaleContainerGPUMemoryTotalmetriche.Le
TaskGPUMemoryUsedeContainerGPUMemoryUsedmetriche.
-
Le seguenti metriche GPU per attività e per contenitore rimangono disponibili per le GPU condivise con MPS:
Il
TaskGPUPowerDraweContainerGPUPowerDrawmetriche.Le
TaskGPUTemperatureeContainerGPUTemperaturemetriche.Le
TaskGPURestartAppXidCounteContainerGPURestartAppXidCountmetriche.
-
Instance-level Le metriche della GPU rimangono disponibili, tra cui
InstanceGPUUsageTotaleInstanceGPULimit.
Monitora la condivisione della GPU
Puoi confermare che una GPU è condivisa e monitorarne l'utilizzo con l'API Amazon ECS e Amazon CloudWatch metriche.
Conferma che una GPU è condivisa
Per confermare che una GPU è condivisa, chiama DescribeContainerInstances API. La risposta include gpuDevices campo con la modalità di condivisione, il numero di contenitori e la memoria residua per ciascuna GPU. Di seguito è riportata una risposta di esempio.
{ "containerInstances": [ { "ec2InstanceId": "i-0c74b75400ab4228d", "runningTasksCount": 1, "gpuDevices": [ { "gpuId": "GPU-70d3bdaf-8635-81e0-8e44-446248a92c83", "sharingMode": "NVIDIA_MPS", "totalMemoryInMiB": 22587, "remainingMemoryInMiB": 16587, "containerCount": 2 } ] } ] }
Visualizza la configurazione per attività
Per visualizzare la configurazione di condivisione per ogni attività, chiama DescribeTasks API. Di ogni contenitore gpuSharingStrategy mostra i limiti di memoria e di elaborazione e i contenitori che condividono una GPU elencano lo stesso valore in gpuIds. Di seguito è riportata una risposta di esempio.
{ "tasks": [ { "lastStatus": "RUNNING", "launchType": "MANAGED_INSTANCES", "containers": [ { "name": "mps-a", "gpuIds": ["GPU-70d3bdaf-8635-81e0-8e44-446248a92c83"], "gpuSharingStrategy": { "nvidiaMps": { "memory": 4000, "maxComputePercent": 50 } } }, { "name": "mps-b", "gpuIds": ["GPU-70d3bdaf-8635-81e0-8e44-446248a92c83"], "gpuSharingStrategy": { "nvidiaMps": { "memory": 2000, "maxComputePercent": 50 } } } ] } ] }
Tieni traccia dell'utilizzo della GPU
-
Maggiore densità di attività: con la condivisione della GPU, vengono eseguite più attività sulla stessa istanza. Usa il
RunningTaskCountmetrica per confrontare il numero di attività per servizio prima e dopo l'attivazione della condivisione. Per la densità delle attività per istanza, usainstance_number_of_running_tasksmetrica, quale CloudWatch Container Insights raccoglie per ogni istanza EC2 quando si distribuisce il CloudWatch agente per raccogliere le metriche a livello di istanza EC2. -
Meno GPU per lo stesso carico di lavoro: Il
InstanceGPUUsageTotalmetrica in CloudWatch Container Insights mostra quante GPU fisiche sono in uso. Con MPS, lo stesso carico di lavoro utilizza meno GPU. -
Esempio: margine di manovra della GPU: Confronta
InstanceGPUUsageTotalconInstanceGPULimitper vedere quanto è piena un'istanza. Con MPS, si adattano più attività prima che un'istanza esaurisca le GPU.