View a markdown version of this page

Bagikan GPU di Amazon ECS - Amazon Elastic Container Service

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

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

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

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.

Konfigurasikan berbagi GPU

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.

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

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

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

  • 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

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

Konfirmasikan GPU dibagikan

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

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

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