全部产品
Search
文档中心

Elastic GPU Service:Gunakan cGPU dengan menjalankan baris perintah Docker

更新时间:Jun 29, 2025

Anda dapat menggunakan cGPU untuk mengisolasi sumber daya GPU. Ini memungkinkan beberapa kontainer berbagi satu GPU. cGPU menyediakan layanan eksternal sebagai komponen dari Container Service for Kubernetes (ACK) dan berlaku untuk skenario yang memerlukan kemampuan komputasi kinerja tinggi (HPC), seperti pembelajaran mesin, pembelajaran mendalam, dan skenario komputasi ilmiah. Anda dapat menggunakan cGPU untuk memanfaatkan sumber daya GPU secara efisien dan mempercepat tugas komputasi. Topik ini menjelaskan cara menginstal dan menggunakan cGPU.

Catatan

Jika Anda menggunakan cGPU untuk mengisolasi sumber daya GPU, Anda tidak dapat meminta memori GPU melalui Unified Virtual Memory (UVM). Oleh karena itu, Anda tidak dapat memanggil cudaMallocManaged() dari Compute Unified Device Architecture (CUDA) API. Sebagai alternatif, Anda dapat menggunakan metode lain, seperti memanggil cudaMalloc(). Untuk informasi lebih lanjut, lihat Unified Memory for CUDA Beginners.

Prasyarat

Sebelum memulai operasi, pastikan instans yang dipercepat GPU Anda memenuhi persyaratan berikut:

  • Instans termasuk dalam salah satu keluarga instans berikut: gn7i, gn6i, gn6v, gn6e, gn5i, gn5, ebmgn7i, ebmgn6i, ebmgn7e, dan ebmgn6e.

  • Sistem operasi yang dijalankan oleh instans adalah CentOS, Ubuntu, atau Alibaba Cloud Linux (Alinux).

  • Driver Tesla versi 418.87.01 atau lebih baru telah diinstal pada instans.

  • Docker versi 19.03.5 atau lebih baru telah diinstal pada instans.

Instal cGPU

Kami merekomendasikan penggunaan lingkungan runtime Docker ACK untuk menginstal dan menggunakan cGPU, baik untuk pengguna perusahaan maupun individu.

Penting

Jika Anda menginstal cGPU versi 1.5.7, driver kernel cGPU mungkin terkunci karena proses paralel saling mengganggu, menyebabkan masalah Linux Kernel Panic. Untuk mencegah masalah kernel pada bisnis baru Anda, kami merekomendasikan agar Anda menginstal cGPU versi 1.5.8 atau lebih baru, atau memperbarui cGPU ke versi tersebut.

  1. Buat kluster.

    Untuk informasi lebih lanjut, lihat Buat Kluster ACK yang Dikelola.

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel navigasi di sebelah kiri, pilih Applications > Cloud-native AI Suite.

  3. Di halaman Cloud-native AI Suite, klik Deploy.

  4. Di bagian Basic Capabilities, pilih opsi Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling).

  5. Di bagian bawah halaman, klik Deploy Cloud-native AI Suite.

    Setelah cGPU diinstal, Anda dapat melihat bahwa komponen ack-ai-installer berada dalam status Deployed di halaman Cloud-native AI Suite.

Gunakan cGPU

Bagian ini memberikan contoh cara menggunakan cGPU untuk memungkinkan dua kontainer berbagi satu GPU. Contoh ini menggunakan instans ecs.gn6i-c4g1.xlarge.

Variabel Lingkungan yang Memengaruhi cGPU

Saat membuat kontainer, Anda dapat menentukan nilai variabel lingkungan untuk mengontrol daya komputasi yang digunakan kontainer untuk mendapatkan cGPU.

Nama variabel lingkungan

Tipe nilai

Deskripsi

Contoh

CGPU_DISABLE

Boolean

Menentukan apakah akan menonaktifkan cGPU. Nilai valid:

  • false: mengaktifkan cGPU.

  • true: menonaktifkan cGPU dan menggunakan layanan kontainer NVIDIA default.

Nilai default: false.

true.

ALIYUN_COM_GPU_MEM_DEV

Integer

Total memori setiap GPU pada instans yang dipercepat GPU.

Nilai variabel ini bervariasi berdasarkan jenis instans, dan harus berupa bilangan bulat. Unit: GiB.

Jika Anda menggunakan instans ecs.gn6i-c4g1.xlarge yang dikonfigurasi dengan GPU NVIDIA Tesla T4, Anda dapat menjalankan perintah nvidia-smi pada instans untuk mendapatkan total memori GPU.

15 GiB. Contoh output perintah menunjukkan bahwa total memori GPU adalah 15.109 MiB, yang dibulatkan menjadi 15 GiB.

ALIYUN_COM_GPU_MEM_CONTAINER

Integer

Memori GPU yang dialokasikan ke kontainer. Variabel ini digunakan bersama dengan ALIYUN_COM_GPU_MEM_DEV.

Untuk GPU dengan total memori 15 GiB, jika Anda menyetel ALIYUN_COM_GPU_MEM_DEV ke 15 dan ALIYUN_COM_GPU_MEM_CONTAINER ke 1, kontainer dialokasikan 1 GiB memori GPU.

Catatan

Jika variabel ini dibiarkan kosong atau disetel ke 0, layanan kontainer NVIDIA default digunakan alih-alih cGPU.

1 GiB.

ALIYUN_COM_GPU_VISIBLE_DEVICES

Integer atau UUID

GPU yang dialokasikan ke kontainer.

Jika Anda menjalankan perintah nvidia-smi -L pada instans yang dipercepat GPU yang dikonfigurasi dengan empat GPU untuk mendapatkan nomor perangkat dan UUID GPU, output perintah berikut dikembalikan:

GPU 0: Tesla T4 (UUID: GPU-b084ae33-e244-0959-cd97-83****)
GPU 1: Tesla T4 (UUID: GPU-3eb465ad-407c-4a23-0c5f-bb****)
GPU 2: Tesla T4 (UUID: GPU-2fce61ea-2424-27ec-a2f1-8b****)
GPU 3: Tesla T4 (UUID: GPU-22401369-db12-c6ce-fc48-d7****)

Kemudian, Anda dapat menyetel ALIYUN_COM_GPU_VISIBLE_DEVICES ke salah satu nilai berikut:

  • Jika Anda menyetel ALIYUN_COM_GPU_VISIBLE_DEVICES ke 0,1, GPU pertama dan kedua dialokasikan ke kontainer.

  • Jika Anda menyetel ALIYUN_COM_GPU_VISIBLE_DEVICES ke GPU-b084ae33-e244-0959-cd97-83****,GPU-3eb465ad-407c-4a23-0c5f-bb****,GPU-2fce61ea-2424-27ec-a2f1-8b****, tiga GPU dengan UUID tertentu dialokasikan ke kontainer.

0,1.

ALIYUN_COM_GPU_SCHD_WEIGHT

Integer

Bobot berdasarkan mana kontainer memperoleh daya komputasi. Nilai valid: 1 hingga max_inst.

Tidak ada.

ALIYUN_COM_GPU_HIGH_PRIO

Integer

Menentukan apakah mengonfigurasi prioritas tinggi untuk kontainer. Nilai valid:

  • 0: mengonfigurasi prioritas reguler untuk kontainer.

  • 1: mengonfigurasi prioritas tinggi untuk kontainer.

Nilai default: 0.

Catatan

Kami merekomendasikan agar Anda mengonfigurasi setidaknya satu kontainer prioritas tinggi untuk setiap GPU. Daya komputasi GPU dialokasikan ke beberapa kontainer prioritas tinggi berdasarkan kebijakan penjadwalan yang ditentukan oleh parameter policy.

  • Jika tugas GPU berjalan di kontainer prioritas tinggi, kontainer tersebut tidak dibatasi oleh kebijakan penjadwalan dan dapat mempreempt daya komputasi GPU.

  • Jika tidak ada tugas GPU yang berjalan di kontainer prioritas tinggi, kontainer tersebut tidak terlibat dalam proses penjadwalan dan tidak dapat dialokasikan daya komputasi GPU.

0.

Jalankan cGPU

  1. Jalankan perintah berikut untuk membuat kontainer dan tentukan memori GPU yang dialokasikan ke kontainer.

    Dalam contoh ini, ALIYUN_COM_GPU_MEM_CONTAINER menentukan memori GPU yang dialokasikan ke kontainer, dan ALIYUN_COM_GPU_MEM_DEV menentukan total memori GPU yang dikonfigurasi. Kontainer berikut dibuat:

    • gpu_test1: Kontainer ini dialokasikan 6 GiB memori GPU.

      sudo docker run -d -t --gpus all --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --name gpu_test1 -v /mnt:/mnt -e ALIYUN_COM_GPU_MEM_CONTAINER=6 -e ALIYUN_COM_GPU_MEM_DEV=15 nvcr.io/nvidia/tensorflow:19.10-py3
    • gpu_test2: Kontainer ini dialokasikan 8 GiB memori GPU.

      sudo docker run -d -t --gpus all --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --name gpu_test2 -v /mnt:/mnt -e ALIYUN_COM_GPU_MEM_CONTAINER=8 -e ALIYUN_COM_GPU_MEM_DEV=15 nvcr.io/nvidia/tensorflow:19.10-py3
    Catatan

    Dalam perintah di atas, gambar TensorFlow nvcr.io/nvidia/tensorflow:19.10-py3 digunakan. Ganti gambar dengan gambar kontainer Anda sesuai kebutuhan bisnis. Untuk informasi lebih lanjut tentang cara menggunakan gambar TensorFlow untuk membangun kerangka kerja pembelajaran mendalam TensorFlow, lihat Deploy Lingkungan NGC untuk Pengembangan Pembelajaran Mendalam.

  2. Jalankan perintah berikut untuk melihat informasi GPU tentang kontainer, seperti memori GPU:

    sudo docker exec -i gpu_test1 nvidia-smi

    Dalam contoh ini, kontainer gpu_test1 digunakan. Gambar berikut menunjukkan bahwa memori GPU kontainer adalah 6.043 MiB.gpu_test1

Lihat cGPU menggunakan node procfs

Runtime cGPU menghasilkan beberapa node sistem file proc (procfs) di direktori /proc/cgpu_km dan mengelola node secara otomatis. Anda dapat melihat informasi cGPU dan mengonfigurasi pengaturan cGPU menggunakan node procfs.

  1. Jalankan perintah berikut untuk melihat informasi tentang node procfs:

    ls /proc/cgpu_km/

    Gambar berikut menunjukkan output perintah.

    Dingtalk_20240911164737.jpg

    Node

    Node

    Tipe Baca/Tulis

    Deskripsi

    0

    Baca dan tulis

    Direktori GPU. cGPU menghasilkan direktori untuk setiap GPU pada instans yang dipercepat GPU, dan menggunakan angka seperti 0, 1, dan 2 sebagai nama direktori.

    Dalam contoh ini, satu GPU digunakan dan nama direktori GPU adalah 0.

    default_memsize

    Baca dan tulis

    Memori default yang dialokasikan ke kontainer yang dibuat jika ALIYUN_COM_GPU_MEM_CONTAINER dibiarkan kosong.

    inst_ctl

    Baca dan tulis

    Node kontrol.

    upgrade

    Baca dan tulis

    Mengontrol pembaruan panas cGPU.

    version

    Hanya baca

    Versi cGPU.

  2. Jalankan perintah berikut untuk melihat parameter di direktori GPU.

    Dalam contoh ini, direktori GPU 0 digunakan.

    ls /proc/cgpu_km/0

    Gambar berikut menunjukkan output perintah.

    Dingtalk_20240911170725.jpg

    Parameter di Direktori GPU

    Parameter

    Tipe Baca/Tulis

    Deskripsi

    012b2edccd7a atau 0852a381c0cf

    Baca dan tulis

    Direktori kontainer.

    cGPU menghasilkan direktori untuk setiap kontainer yang berjalan pada instans yang dipercepat GPU, dan menggunakan ID kontainer sebagai nama direktori.

    Catatan

    Anda dapat menjalankan perintah docker ps untuk melihat kontainer yang dibuat.

    free_weight

    Hanya baca

    Bobot GPU. Anda dapat menggunakan parameter ini untuk menanyakan dan mengubah bobot tersedia GPU.

    Jika free_weight disetel ke 0, bobot kontainer baru adalah 0. Dalam hal ini, kontainer tidak dapat memperoleh daya komputasi GPU dan tidak dapat digunakan untuk menjalankan aplikasi yang memerlukan daya komputasi GPU.

    major

    Hanya baca

    Nomor perangkat utama cGPU. Nilainya menunjukkan jenis perangkat yang berbeda.

    max_inst

    Baca dan tulis

    Jumlah maksimum kontainer. Nilai valid: 1 hingga 25.

    policy

    Baca dan tulis

    Kebijakan penjadwalan untuk daya komputasi. cGPU mendukung kebijakan penjadwalan berikut:

    • 0: penjadwalan fair-share. Setiap kontainer menempati irisan waktu tetap. Persentase irisan waktu adalah 1/max_inst.

    • 1: penjadwalan preemptive. Setiap kontainer menempati sebanyak mungkin irisan waktu. Persentase irisan waktu adalah 1/Jumlah kontainer.

    • 2: penjadwalan preemptive berbasis bobot. Saat ALIYUN_COM_GPU_SCHD_WEIGHT disetel ke nilai lebih besar dari 1, penjadwalan preemptive berbasis bobot digunakan.

    • 3: penjadwalan tetap. Daya komputasi dijadwalkan pada persentase tetap.

    • 4: penjadwalan lunak. Dibandingkan dengan penjadwalan preemptive, penjadwalan lunak mengisolasi sumber daya GPU dengan cara yang lebih lembut.

    • 5: penjadwalan native. Kebijakan penjadwalan bawaan untuk driver GPU.

    Anda dapat mengubah nilai parameter policy untuk menyesuaikan kebijakan penjadwalan. Untuk informasi lebih lanjut tentang kebijakan penjadwalan, lihat Contoh penggunaan cGPU.

    prio_ratio

    Baca dan tulis

    Daya komputasi maksimum yang dapat dimiliki kontainer prioritas tinggi dalam kolokasi beban kerja multi-jenis. Nilai valid: 20 hingga 99.

  3. Jalankan perintah berikut untuk melihat parameter di direktori kontainer.

    Dalam contoh ini, direktori kontainer 012b2edccd7a digunakan.

    ls /proc/cgpu_km/0/012b2edccd7a

    Gambar berikut menunjukkan output perintah.

    Dingtalk_20240911171620.jpg

    Parameter di Direktori Kontainer

    Parameter

    Tipe Baca/Tulis

    Deskripsi

    highprio

    Baca dan tulis

    Prioritas tinggi kontainer. Nilai default: 0.

    Jika ALIYUN_COM_GPU_HIGH_PRIO disetel ke 1 dan highprio ditentukan, kontainer dapat mempreempt daya komputasi maksimum yang ditentukan oleh prio_ratio.

    Catatan

    Parameter ini digunakan dalam kolokasi beban kerja multi-jenis.

    id

    Hanya baca

    ID kontainer.

    memsize

    Baca dan tulis

    Memori GPU kontainer. cGPU menghasilkan nilai untuk parameter ini berdasarkan nilai ALIYUN_COM_GPU_MEM_DEV.

    meminfo

    Hanya baca

    Informasi tentang memori GPU, termasuk sisa memori GPU di kontainer, ID proses yang menggunakan GPU, dan penggunaan memori GPU proses tersebut. Contoh output:

    Free: 6730809344
    PID: 19772 Mem: 200278016

    weight

    Baca dan tulis

    Bobot berdasarkan mana kontainer memperoleh daya komputasi GPU maksimum. Nilai default: 1. Jumlah bobot semua kontainer yang sedang berjalan tidak boleh melebihi nilai max_inst.

  4. (Opsional) Jalankan perintah berikut untuk mengonfigurasi cGPU:

    Setelah Anda terbiasa dengan node procfs, Anda dapat menjalankan perintah pada instans yang dipercepat GPU untuk melakukan operasi, seperti mengubah kebijakan penjadwalan dan bobot. Tabel berikut menjelaskan contoh perintah.

    Perintah

    Efek

    echo 2 > /proc/cgpu_km/0/policy

    Mengubah kebijakan penjadwalan menjadi penjadwalan preemptive berbasis bobot.

    cat /proc/cgpu_km/0/free_weight

    Menanyakan bobot tersedia pada GPU. Jika free_weight disetel ke 0, bobot kontainer baru adalah 0. Dalam hal ini, kontainer tidak dapat memperoleh daya komputasi GPU dan tidak dapat digunakan untuk menjalankan aplikasi yang memerlukan daya komputasi GPU.

    cat /proc/cgpu_km/0/$dockerid/weight

    Menanyakan bobot kontainer tertentu.

    echo 4 > /proc/cgpu_km/0/$dockerid/weight

    Mengubah bobot berdasarkan mana kontainer memperoleh daya komputasi GPU.

Lihat kontainer cGPU menggunakan cgpu-smi

Anda dapat menggunakan cgpu-smi untuk melihat informasi tentang kontainer yang menggunakan cGPU, termasuk ID kontainer, pemanfaatan GPU, batas daya komputasi, penggunaan memori GPU, dan total memori yang dialokasikan.

Catatan

cgpu-smi menyediakan informasi pemantauan sampel tentang cGPU. Saat menerapkan aplikasi Kubernetes, Anda dapat merujuk atau menggunakan informasi pemantauan sampel untuk pengembangan kustom dan integrasi.

Gambar berikut menunjukkan informasi pemantauan sampel yang disediakan oleh cgpu-smi.

cgpu-smi

Perbarui atau uninstall cGPU

Perbarui cGPU

cGPU mendukung pembaruan dingin dan panas.

  • Cold update

    Jika cGPU tidak digunakan untuk Docker, Anda dapat melakukan pembaruan dingin pada cGPU. Lakukan langkah-langkah berikut:

    1. Jalankan perintah berikut untuk menghentikan semua kontainer yang sedang berjalan:

      sudo docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2) 
    2. Jalankan perintah berikut untuk memperbarui cGPU ke versi terbaru:

      sudo sh upgrade.sh
  • Hot update

    Jika cGPU digunakan untuk Docker, Anda dapat melakukan pembaruan panas pada driver kernel cGPU. Batasan tertentu diberlakukan pada versi yang dapat diperbarui. Jika Anda memerlukan bantuan, hubungi insinyur purna jual Alibaba Cloud.

Uninstall cGPU

Untuk informasi lebih lanjut tentang cara menguninstall cGPU versi sebelumnya dari sebuah node, lihat Perbarui Versi cGPU pada Sebuah Node.

Contoh penggunaan cGPU

Gunakan cGPU untuk menjadwalkan daya komputasi

Saat cGPU memuat modul cgpu_km, cGPU menetapkan irisan waktu (X ms) untuk setiap GPU berdasarkan jumlah maksimum kontainer (max_inst) untuk mengalokasikan daya komputasi GPU ke kontainer. Dalam contoh berikut, irisan waktu Slice 1, Slice 2, dan Slice N digunakan. Contoh berikut menunjukkan cara daya komputasi GPU dialokasikan menggunakan kebijakan penjadwalan yang berbeda.

  • Penjadwalan Fair-share (policy = 0)

    Saat membuat kontainer, cGPU mengalokasikan irisan waktu ke kontainer. cGPU mulai menjadwalkan dari Slice 1. Tugas penjadwalan dikirimkan ke GPU fisik dan dieksekusi dalam kontainer dalam irisan waktu (X ms). Kemudian, cGPU beralih ke irisan waktu berikutnya. Setiap kontainer memperoleh daya komputasi yang sama, yaitu 1/max_inst. Gambar berikut menunjukkan detailnya.

  • Penjadwalan Preemptive (policy = 1)

    Saat membuat kontainer, cGPU mengalokasikan irisan waktu ke kontainer. cGPU mulai menjadwalkan dari Slice 1. Namun, jika tidak ada kontainer yang digunakan dalam Slice 1 atau jika perangkat GPU tidak dimulai oleh proses di kontainer, cGPU melewati penjadwalan dalam Slice 1 dan beralih ke irisan waktu berikutnya.

    Contoh:

    1. Anda hanya membuat kontainer bernama Docker 1, dan mengalokasikan Slice 1 serta menjalankan dua proses TensorFlow di kontainer. Dalam hal ini, Docker 1 dapat memperoleh daya komputasi seluruh GPU fisik.

    2. Kemudian, Anda membuat kontainer bernama Docker 2 dan mengalokasikan Slice 2 ke kontainer. Jika perangkat GPU tidak dimulai oleh proses di Docker 2, cGPU melewati penjadwalan untuk Docker 2 dalam Slice 2.

    3. Jika perangkat GPU dimulai oleh proses di Docker 2, cGPU melakukan penjadwalan dalam Slice 1 dan Slice 2. Docker 1 dan Docker 2 dapat memperoleh hingga setengah dari daya komputasi GPU fisik. Gambar berikut menunjukkan detailnya.

  • Penjadwalan Preemptive Berbasis Bobot (policy = 2)

    Jika ALIYUN_COM_GPU_SCHD_WEIGHT disetel ke nilai lebih besar dari 1 saat membuat kontainer, penjadwalan preemptive berbasis bobot digunakan. cGPU membagi daya komputasi GPU fisik menjadi max_inst bagian berdasarkan jumlah kontainer (max_inst). Jika ALIYUN_COM_GPU_SCHD_WEIGHT disetel ke nilai lebih besar dari 1, cGPU menggabungkan beberapa irisan waktu menjadi irisan waktu yang lebih besar dan mengalokasikan irisan waktu tersebut ke kontainer.

    Konfigurasi Sampel:

    • Docker 1: ALIYUN_COM_GPU_SCHD_WEIGHT = m

    • Docker 2: ALIYUN_COM_GPU_SCHD_WEIGHT = n

    Hasil Penjadwalan:

    • Jika hanya Docker 1 yang berjalan, Docker 1 mempreempt daya komputasi seluruh GPU fisik.

    • Jika Docker 1 dan Docker 2 berjalan, Docker 1 dan Docker 2 memperoleh daya komputasi pada rasio teoretis m:n. Dibandingkan dengan penjadwalan preemptive, Docker 2 mengonsumsi n irisan waktu meskipun perangkat GPU tidak dimulai oleh proses di Docker 2.

      Catatan

      Kinerja kontainer berbeda saat m:n disetel ke 2:1 dan 8:4. Jumlah irisan waktu dalam 1 detik saat m:n disetel ke 2:1 adalah empat kali jumlah irisan waktu dalam 1 detik saat m:n disetel ke 8:4.

    Penjadwalan preemptive berbasis bobot membatasi daya komputasi GPU maksimum teoretis yang dapat diperoleh kontainer. Namun, untuk GPU yang menyediakan daya komputasi kuat seperti GPU NVIDIA V100, tugas komputasi dapat diselesaikan hanya dalam satu irisan waktu jika memori GPU kecil digunakan. Dalam hal ini, jika m:n disetel ke 8:4, daya komputasi GPU menjadi idle selama sisa irisan waktu dan batas pada daya komputasi GPU maksimum teoretis menjadi tidak valid.

  • Penjadwalan Tetap (policy = 3)

    Anda dapat menggunakan ALIYUN_COM_GPU_SCHD_WEIGHT bersama dengan max_inst untuk menetapkan persentase daya komputasi.

  • Penjadwalan Lunak (policy = 4)

    Saat membuat kontainer, cGPU mengalokasikan irisan waktu ke kontainer. Dibandingkan dengan penjadwalan preemptive, penjadwalan lunak mengisolasi sumber daya GPU dengan cara yang lebih lembut. Untuk informasi lebih lanjut, lihat Penjadwalan Preemptive (policy = 1).

  • Penjadwalan Native (policy = 5)

    Anda dapat menggunakan kebijakan ini untuk mengisolasi hanya memori GPU. Saat kebijakan ini digunakan, daya komputasi dijadwalkan berdasarkan metode penjadwalan bawaan driver GPU NVIDIA.

Kebijakan penjadwalan untuk daya komputasi didukung untuk semua instans heterogen GPU-accelerated milik Alibaba Cloud dan GPU NVIDIA yang digunakan untuk instans tersebut, termasuk Tesla P4, Tesla P100, Tesla T4, Tesla V100, dan Tesla A10 GPU. Dalam contoh ini, dua kontainer yang berbagi instans yang dipercepat GPU yang dikonfigurasi dengan GPU Tesla A10 diuji. Rasio daya komputasi kontainer adalah 1:2. Setiap kontainer memperoleh 12 GiB memori GPU.

Catatan

Data uji kinerja berikut disediakan hanya untuk referensi.

  • Uji 1: Data kinerja model ResNet50 yang dilatih menggunakan framework TensorFlow pada nilai batch_size yang berbeda dibandingkan. Presisi FP16 digunakan. Bagian berikut menunjukkan hasil uji.

    Framework

    Model

    batch_size

    Presisi

    Gambar per detik Docker 1

    Gambar per detik Docker 2

    TensorFlow

    ResNet50

    16

    FP16

    151

    307

    TensorFlow

    ResNet50

    32

    FP16

    204

    418

    TensorFlow

    ResNet50

    64

    FP16

    247

    503

    TensorFlow

    ResNet50

    128

    FP16

    257

    516

  • Uji 2: Data kinerja model ResNet50 yang dilatih menggunakan framework TensorRT pada nilai batch_size yang berbeda dibandingkan. Presisi FP16 digunakan. Bagian berikut menunjukkan hasil uji.

    Framework

    Model

    batch_size

    Presisi

    Gambar per detik Docker 1

    Gambar per detik Docker 2

    TensorRT

    ResNet50

    1

    FP16

    568.05

    1132.08

    TensorRT

    ResNet50

    2

    FP16

    940.36

    1884.12

    TensorRT

    ResNet50

    4

    FP16

    1304.03

    2571.91

    TensorRT

    ResNet50

    8

    FP16

    1586.87

    3055.66

    TensorRT

    ResNet50

    16

    FP16

    1783.91

    3381.72

    TensorRT

    ResNet50

    32

    FP16

    1989.28

    3695.88

    TensorRT

    ResNet50

    64

    FP16

    2105.81

    3889.35

    TensorRT

    ResNet50

    128

    FP16

    2205.25

    3901.94

Gunakan cGPU untuk mengalokasikan memori ke beberapa GPU

Dalam contoh berikut, empat GPU dikonfigurasi. GPU 0, GPU 1, GPU 2, dan GPU 3 secara terpisah dialokasikan 3 GiB, 4 GiB, 5 GiB, dan 6 GiB memori. Kode sampel:

docker run -d -t --runtime=nvidia  --name gpu_test0123 --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -v /mnt:/mnt -e ALIYUN_COM_GPU_MEM_CONTAINER=3,4,5,6 -e ALIYUN_COM_GPU_MEM_DEV=23 -e NVIDIA_VISIBLE_DEVICES=0,1,2,3 nvcr.io/nvidia/tensorflow:21.03-tf1-py3
docker exec -i gpu_test0123   nvidia-smi

Output perintah berikut menunjukkan detail memori GPU.回显结果

Anda dapat menggunakan ALIYUN_COM_GPU_MEM_CONTAINER untuk mengalokasikan memori ke beberapa GPU. Tabel berikut menjelaskan nilai ALIYUN_COM_GPU_MEM_CONTAINER.

Nilai

Deskripsi

ALIYUN_COM_GPU_MEM_CONTAINER=3

Memori masing-masing dari empat GPU disetel ke 3 GiB.

ALIYUN_COM_GPU_MEM_CONTAINER=3,1

Memori dari empat GPU disetel ke 3 GiB, 1 GiB, 1 GiB, dan 1 GiB secara berurutan.

ALIYUN_COM_GPU_MEM_CONTAINER=3,4,5,6

Memori dari empat GPU disetel ke 3 GiB, 4 GiB, 5 GiB, dan 6 GiB secara berurutan.

ALIYUN_COM_GPU_MEM_CONTAINER tidak ditentukan

cGPU dinonaktifkan.

ALIYUN_COM_GPU_MEM_CONTAINER=0

ALIYUN_COM_GPU_MEM_CONTAINER=1,0,0