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
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
DescribeContainerInstancesAPI (totalMemoryInMiBbidang) atau periksa spesifikasi GPU untuk jenis instans Anda. maxComputePercent-
Wajib: Tidak
Persentase maksimum komputasi GPU yang dapat digunakan wadah, sebagai bilangan bulat dari
1kepada100. 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 sendirimaxComputePercentnilai-nilai. Jika Anda tidak menentukan parameter ini, wadah dapat menggunakan hingga100persen.
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_LIMITuntuk batas memori -
CUDA_MPS_ACTIVE_THREAD_PERCENTAGEuntuk 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) atausharingStrategy(GPU bersama), tetapi tidak keduanya. Saat Anda menentukansharingStrategy, Anda harus menghilangkanvalue. -
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 denganvalue. -
memorynilai diperlukan dan harus lebih besar dari0. -
Nilai
maxComputePercentbersifat opsional. Jika Anda menentukannya, nilainya harus bilangan bulat dari1kepada100. -
Untuk Instans Terkelola Amazon ECS, tugasnya
requiresCompatibilitiesharus mencakupMANAGED_INSTANCES. Untuk Amazon ECS di Amazon EC2, gunakanEC2jenis peluncuran. -
Berbagi GPU tidak didukung untuk definisi tugas yang memerlukan
EXTERNALkompatibilitas (Amazon ECS Anywhere). -
Anda tidak dapat menentukan
sharingStrategydalam penggantian wadah. Penggantian kontainer diRunTaskdanStartTaskpermintaan tidak mendukung konfigurasi berbagi GPU, jadi tentukansharingStrategydalam 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.0atau kemudian dan Amazon ECS AL2023 GPU-optimized Versi AMI20261019atau 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.
-
maxComputePercentnilai 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 sendirimaxComputePercentnilai-nilai. -
Berbagi GPU tidak didukung untuk definisi tugas yang memerlukan
EXTERNALkompatibilitas (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:
TaskGPUUtilizationdanContainerGPUUtilizationmetrik.Yang
TaskGPUMemoryUtilizationdanContainerGPUMemoryUtilizationmetrik.Yang
TaskGPUMemoryTotaldanContainerGPUMemoryTotalmetrik.Yang
TaskGPUMemoryUseddanContainerGPUMemoryUsedmetrik.
-
Metrik GPU per tugas dan per kontainer berikut tetap tersedia untuk GPU yang dibagikan dengan MPS:
TaskGPUPowerDrawdanContainerGPUPowerDrawmetrik.Yang
TaskGPUTemperaturedanContainerGPUTemperaturemetrik.Yang
TaskGPURestartAppXidCountdanContainerGPURestartAppXidCountmetrik.
-
Instance-level Metrik GPU tetap tersedia, termasuk
InstanceGPUUsageTotaldanInstanceGPULimit.
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
RunningTaskCountmetrik untuk membandingkan jumlah tugas per layanan sebelum dan sesudah Anda mengaktifkan berbagi. Untuk kepadatan tugas per instans, gunakaninstance_number_of_running_tasksmetrik, 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:
InstanceGPUUsageTotalmetrik 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
InstanceGPUUsageTotalbersamaInstanceGPULimituntuk melihat seberapa penuh sebuah instance. Dengan MPS, lebih banyak tugas cocok sebelum instance kehabisan GPU.