

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Bagikan GPU di Amazon ECS
<a name="ecs-gpu-sharing"></a>

Banyak beban kerja GPU, seperti inferensi dan penyajian model kecil, hanya menggunakan sebagian kecil dari komputasi dan memori GPU. Tanpa berbagi, sisa kapasitas itu tidak digunakan. Dengan Amazon ECS, Anda dapat berbagi satu fisik NVIDIA GPU di beberapa wadah sehingga Anda dapat mengemas lebih banyak beban kerja ke perangkat keras yang sama dan mengurangi limbah GPU.

Dengan Amazon ECS, Anda dapat menggunakan NVIDIA Multi-Process Layanan (MPS) untuk berbagi GPU. MPS adalah NVIDIA CUDA fitur yang menjalankan beberapa proses secara bersamaan pada GPU yang sama, yang meningkatkan pemanfaatan GPU dan mengurangi overhead pengalihan konteks. MPS menyediakan partisi memori dan komputasi, sehingga setiap wadah mendapat batas memori yang dapat dikonfigurasi dan plafon komputasi opsional.

Amazon ECS mengelola MPS untuk Anda. Ini memulai MPS daemon pada instans GPU, menempatkan wadah ke GPU berdasarkan memori yang tersedia, dan memberlakukan batas per kontainer.

MPS menyediakan berbagi tingkat perangkat lunak daripada partisi tingkat perangkat keras. Untuk informasi lebih lanjut tentang MPS, lihat [Multi-Process Pelayanan](https://docs.nvidia.com/deploy/mps/index.html) di NVIDIA dokumentasi.

Amazon ECS mendukung berbagi GPU dengan MPS pada Instans Terkelola Amazon ECS dan Amazon ECS di Amazon EC2.

## Kapan menggunakan berbagi GPU
<a name="ecs-gpu-sharing-when"></a>

Berbagi GPU dengan MPS sangat cocok untuk:
+ Beban kerja inferensi, pembuatan embedding, dan penyajian model kecil yang tidak sepenuhnya memanfaatkan GPU
+ Multi-model melayani di mana beberapa model dapat berbagi satu GPU
+ Lingkungan pengembangan dan pengujian
+ Menjalankan beberapa beban kerja GPU ringan pada perangkat keras yang sama untuk mengurangi biaya

Berbagi GPU tidak disarankan untuk:
+ Pelatihan model besar yang membutuhkan memori GPU penuh
+ Beban kerja yang sensitif terhadap kesalahan GPU dari wadah tetangga, karena MPS adalah berbagi tingkat perangkat lunak dan semua wadah pada GPU berbagi yang sama CUDA konteks
+ Beban kerja yang memerlukan isolasi tingkat perangkat keras antar proses

## Cara kerja berbagi GPU
<a name="ecs-gpu-sharing-how"></a>

Anda mengonfigurasi berbagi GPU dalam definisi wadah dari definisi tugas. Dalam setiap wadah `resourceRequirements`, Anda memberikan `sharingStrategy` dengan nilai memori GPU alih-alih menentukan bilangan bulat di `value` untuk GPU khusus.

Ketika Amazon ECS menempatkan tugas yang menggunakan berbagi GPU, ia menambahkan memori GPU yang diminta oleh semua wadah GPU dalam tugas dan mencari GPU dengan memori bebas yang cukup. Semua wadah GPU dalam satu tugas ditempatkan pada GPU fisik yang sama. Jika tugas meminta 4.000 MiB di dua wadah, Amazon ECS menemukan satu GPU dengan setidaknya 4.000 MiB memori yang tersisa dan menempatkan kedua wadah di sana.

Beberapa tugas juga dapat berbagi GPU fisik yang sama. Selama GPU memiliki memori yang cukup tersisa, Amazon ECS dapat menempatkan tugas tambahan di atasnya, bahkan jika tugas-tugas tersebut berasal dari layanan yang berbeda. Tugas yang berbagi GPU dan tugas yang menggunakan GPU khusus dapat berjalan pada instance yang sama, pada GPU yang berbeda.

Pada Instans Terkelola Amazon ECS, Amazon ECS memantau kesehatan GPU dan MPS daemon pada setiap instance. Jika Amazon ECS mendeteksi kegagalan perangkat keras GPU atau MPS kegagalan daemon, itu menguras instance dan menggantikannya. Untuk informasi selengkapnya tentang perbaikan otomatis GPU, lihat [Perbaikan otomatis GPU untuk instans terkelola Amazon ECS](managed-instances-gpu-auto-repair.md).

## Konfigurasikan berbagi GPU
<a name="ecs-gpu-sharing-configure"></a>

Untuk berbagi GPU, tambahkan `sharingStrategy` objek untuk `resourceRequirements` dari setiap wadah GPU dalam definisi tugas Anda. `sharingStrategy` Objek berisi `nvidiaMps` objek dengan bidang berikut. Untuk informasi selengkapnya tentang `resourceRequirements`, lihat [Persyaratan sumber daya](task_definition_parameters-managed-instances.md#container_definition_resourcerequirements-managed-instances).

`memory`  
Wajib: Ya  
Batas memori GPU untuk wadah, di MiB. Nilai ini adalah plafon keras pada memori GPU yang dapat digunakan wadah. Nilai harus lebih besar dari `0`.  
Untuk menemukan total memori GPU yang tersedia pada suatu instance, gunakan `DescribeContainerInstances` API ( `totalMemoryInMiB` bidang) atau periksa spesifikasi GPU untuk jenis instans Anda.

`maxComputePercent`  
Wajib: Tidak  
Persentase maksimum komputasi GPU yang dapat digunakan wadah, sebagai bilangan bulat dari `1` kepada `100`. Ini menetapkan batas pada penggunaan komputasi GPU kontainer, bukan reservasi. Saat wadah tidak digunakan, komputasi yang tidak terpakai tersedia untuk wadah lain pada GPU yang sama, hingga masing-masing wadah itu sendiri `maxComputePercent` nilai-nilai. Jika Anda tidak menentukan parameter ini, wadah dapat menggunakan hingga `100` persen.

Amazon ECS menempatkan tugas berdasarkan memori GPU saja, sehingga tidak memperhitungkan komputasi saat membuat keputusan penempatan.

Anda dapat mengatur strategi berbagi di editor definisi tugas konsol Amazon ECS, atau dengan JSON, AWS CLI, atau API.

Amazon ECS menetapkan variabel lingkungan cadangan berikut di setiap wadah yang berbagi GPU. Jangan mengatur variabel-variabel ini dalam definisi wadah Anda.
+ `CUDA_MPS_PINNED_DEVICE_MEM_LIMIT` untuk batas memori
+ `CUDA_MPS_ACTIVE_THREAD_PERCENTAGE` untuk plafon komputasi

Contoh definisi tugas berikut menjalankan dua wadah inferensi yang berbagi satu GPU dengan MPS, bersama dengan satu wadah sidecar non-GPU. Setiap wadah GPU meminta jumlah memori GPU dan komputasi yang berbeda.

Dalam contoh berikut, ganti {{account-id}} dengan milikmu AWS ID akun.

```
{
  "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"
}
```

## Aturan validasi
<a name="ecs-gpu-sharing-validation"></a>

Amazon ECS menerapkan aturan berikut untuk konfigurasi berbagi GPU:
+ Persyaratan sumber daya GPU menggunakan keduanya `value` (GPU khusus) atau `sharingStrategy` (GPU bersama), tetapi tidak keduanya. Saat Anda menentukan `sharingStrategy`, Anda harus menghilangkan `value`.
+ Semua wadah GPU dalam tugas harus menggunakan strategi berbagi yang sama. Jika ada wadah yang digunakan `sharingStrategy`, tidak ada wadah lain dalam tugas itu yang dapat meminta GPU khusus dengan `value`.
+  `memory` nilai diperlukan dan harus lebih besar dari `0`.
+ Nilai `maxComputePercent` bersifat opsional. Jika Anda menentukannya, nilainya harus bilangan bulat dari `1` kepada `100`.
+ Untuk Instans Terkelola Amazon ECS, tugasnya `requiresCompatibilities` harus mencakup `MANAGED_INSTANCES`. Untuk Amazon ECS di Amazon EC2, gunakan `EC2` jenis peluncuran.
+ Berbagi GPU tidak didukung untuk definisi tugas yang memerlukan `EXTERNAL` kompatibilitas (Amazon ECS Anywhere).
+ Anda tidak dapat menentukan `sharingStrategy` dalam penggantian wadah. Penggantian kontainer di `RunTask` dan `StartTask` permintaan tidak mendukung konfigurasi berbagi GPU, jadi tentukan `sharingStrategy` dalam definisi tugas sebagai gantinya. Layanan menjalankan definisi tugas sebagai terdaftar dan tidak terpengaruh.

## Siapkan berbagi GPU berdasarkan jenis peluncuran
<a name="ecs-gpu-sharing-setup"></a>

Dengan Instans Terkelola Amazon ECS, Amazon ECS memilih dan mengelola instans GPU untuk Anda. Anda tidak memerlukan pengaturan apa pun di luar definisi tugas.

Dengan Amazon ECS di Amazon EC2, luncurkan yang didukung NVIDIA Instans GPU dengan Amazon ECS AL2023 GPU-optimized TEMAN. Berbagi GPU dengan MPS di Amazon ECS di Amazon EC2 memerlukan versi agen kontainer Amazon ECS `1.107.0` atau kemudian dan Amazon ECS AL2023 GPU-optimized Versi AMI `20261019` atau nanti. Setelah instans mendaftar dengan cluster Anda, konfigurasi definisi tugas sama dengan Instans Terkelola Amazon ECS.

## Pertimbangan-pertimbangan
<a name="ecs-gpu-sharing-considerations"></a>
+ Berbagi GPU dengan MPS didukung pada G4dn, G5, G6, G6e, G7, G7e, P3, P4d, P5, P5e, P5en, dan P6-B200 keluarga contoh. Berbagi GPU tidak didukung pada AWS Fargate, Amazon ECS Express Mode, atau tugas daemon yang dikelola Amazon ECS.
+ Berbagi GPU dengan MPS di Amazon ECS di Amazon EC2 memerlukan versi agen kontainer Amazon ECS `1.107.0` atau kemudian dan Amazon ECS AL2023 GPU-optimized Versi AMI `20261019` atau nanti.
+ Jalankan satu proses GPU per wadah saat Anda menggunakan NVIDIA MPS untuk berbagi GPU. Untuk aplikasi yang memerlukan beberapa proses GPU, konfigurasikan persyaratan memori GPU berdasarkan penggunaan memori puncak gabungan dari semua proses. Gunakan kontrol tingkat aplikasi untuk menjaga konsumsi total dalam nilai yang dikonfigurasi. Amazon ECS menggunakan nilai ini untuk menentukan penempatan wadah pada GPU bersama. Akibatnya, aplikasi multi-proses dapat mengkonsumsi lebih banyak memori GPU daripada yang dikonfigurasi, yang dapat menyebabkan perselisihan memori.
+ Jika satu wadah memicu kesalahan GPU yang fatal, seperti akses memori ilegal dari kernel GPU yang rusak, wadah yang berbagi GPU fisik itu dapat terpengaruh. Kontainer pada GPU lain pada instans yang sama tidak terpengaruh.
+  `maxComputePercent` nilai adalah plafon, bukan reservasi yang dijamin. Saat wadah tidak digunakan, komputasi yang tidak terpakai tersedia untuk wadah lain pada GPU yang sama, hingga masing-masing wadah itu sendiri `maxComputePercent` nilai-nilai.
+ Berbagi GPU tidak didukung untuk definisi tugas yang memerlukan `EXTERNAL` kompatibilitas (Amazon ECS Anywhere).
+ Tugas dari berbagai layanan yang menggunakan penyedia kapasitas yang sama dapat ditempatkan pada GPU yang sama. Untuk mencegah tugas dari berbagai layanan berbagi GPU, gunakan penyedia kapasitas terpisah atau cluster terpisah untuk layanan tersebut.
+ Untuk GPU yang dibagikan dengan MPS, Amazon ECS tidak memancarkan metrik GPU per tugas dan per kontainer berikut:
  +  `TaskGPUUtilization` dan `ContainerGPUUtilization` metrik.
  + Yang `TaskGPUMemoryUtilization` dan `ContainerGPUMemoryUtilization` metrik.
  + Yang `TaskGPUMemoryTotal` dan `ContainerGPUMemoryTotal` metrik.
  + Yang `TaskGPUMemoryUsed` dan `ContainerGPUMemoryUsed` metrik.
+ Metrik GPU per tugas dan per kontainer berikut tetap tersedia untuk GPU yang dibagikan dengan MPS:
  +  `TaskGPUPowerDraw` dan `ContainerGPUPowerDraw` metrik.
  + Yang `TaskGPUTemperature` dan `ContainerGPUTemperature` metrik.
  + Yang `TaskGPURestartAppXidCount` dan `ContainerGPURestartAppXidCount` metrik.
+ Instance-level Metrik GPU tetap tersedia, termasuk `InstanceGPUUsageTotal` dan `InstanceGPULimit`.

## Memantau berbagi GPU
<a name="ecs-gpu-sharing-monitoring"></a>

Anda dapat mengonfirmasi bahwa GPU dibagikan dan melacak penggunaan GPU dengan Amazon ECS API dan Amazon CloudWatch metrik.

### Konfirmasikan GPU dibagikan
<a name="ecs-gpu-sharing-monitoring-confirm"></a>

Untuk mengonfirmasi bahwa GPU dibagikan, panggil `DescribeContainerInstances` API. Jawabannya meliputi `gpuDevices` bidang dengan mode berbagi, jumlah kontainer, dan memori yang tersisa untuk setiap GPU. Berikut ini adalah contoh respons.

```
{
  "containerInstances": [
    {
      "ec2InstanceId": "i-0c74b75400ab4228d",
      "runningTasksCount": 1,
      "gpuDevices": [
        {
          "gpuId": "GPU-70d3bdaf-8635-81e0-8e44-446248a92c83",
          "sharingMode": "NVIDIA_MPS",
          "totalMemoryInMiB": 22587,
          "remainingMemoryInMiB": 16587,
          "containerCount": 2
        }
      ]
    }
  ]
}
```

### Lihat konfigurasi per tugas
<a name="ecs-gpu-sharing-monitoring-view"></a>

Untuk melihat konfigurasi berbagi untuk setiap tugas, panggil `DescribeTasks` API. Setiap kontainer `gpuSharingStrategy` menunjukkan memori dan batas komputasi, dan wadah yang berbagi daftar GPU dengan nilai yang sama di `gpuIds`. Berikut ini adalah contoh respons.

```
{
  "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 } }
        }
      ]
    }
  ]
}
```

### Lacak penggunaan GPU
<a name="ecs-gpu-sharing-monitoring-track"></a>
+ **Kepadatan tugas yang lebih tinggi**: Dengan berbagi GPU, lebih banyak tugas berjalan pada instance yang sama. Gunakan `RunningTaskCount` metrik untuk membandingkan jumlah tugas per layanan sebelum dan sesudah Anda mengaktifkan berbagi. Untuk kepadatan tugas per instans, gunakan `instance_number_of_running_tasks` metrik, yang CloudWatch Container Insights mengumpulkan untuk setiap instans EC2 saat Anda menerapkan CloudWatch agen untuk mengumpulkan metrik tingkat instance EC2.
+ **Lebih sedikit GPU untuk beban kerja yang sama**: `InstanceGPUUsageTotal` metrik dalam CloudWatch Container Insights menunjukkan berapa banyak GPU fisik yang digunakan. Dengan MPS, beban kerja yang sama menggunakan lebih sedikit GPU.
+ **Ruang kepala GPU instans**: Bandingkan `InstanceGPUUsageTotal` bersama `InstanceGPULimit` untuk melihat seberapa penuh sebuah instance. Dengan MPS, lebih banyak tugas cocok sebelum instance kehabisan GPU.