Blog AWS Indonesia
Mencapai throughput inferensi ML empat kali lebih tinggi dan biaya per inferensi tiga kali lebih rendah dengan Amazon EC2 instans G5 untuk model NLP dan model CV berbasis Pytorch
Amazon Elastic Compute Cloud (Amazon EC2) instans G5 adalah instans pertama dan satu satunya di cloud yang menggunakan GPU Tensore Core NVIDIA A10G, yang dapat Anda gunakan untuk kasus penggunaan intensif grafik dan machine learning (ML) yang luas. Dengan instans G5, pengguna ML mendapatkan kinerja tinggi dan infrastruktur hemat biaya untuk melatih dan menjalankan model yang lebih besar dan lebih canggih untuk kasus penggunaan natural language processing (NLP), computer vision (CV), dan recommender engine.
Tujuan dari post ini adalah untuk menunjukkan manfaat kinerja instans G5 untuk workload inferensi berskala besar. Kami melakukan ini dengan membandingkan price-performance (diukur dengan $ per sejuta inferensi) untuk model NLP dan CV dengan instans G4dn. Kami akan mulai dengan menjelaskan pendekatan benchmarking kami dan kemudian menunjukkan grafik thoughput vs latensi pada berbagai ukuran batch dan tipe data precision. Dibanding instans G4dn, kami menemukan bahwa instans G5 secara konsisten membutuhkan biaya lebih rendah per sejuta inferensi baik untuk mode full precision maupun mix precision, untuk model NLP dan CV, sekaligus mencapai throughput lebih tinggi dan latensi lebih rendah
Pendekatan benchmark
Untuk menyusun sebuah studi perbandingan price-performance antara G5 dan G4dn, kita perlu mengukur throughput, latensi, dan biaya per sejuta inferensi sebagai fungsi dari ukuran batch. Kita juga mempelajari pengaruh pemakaian full precision vs mix precision. Baik grafik model maupun input dimuat kedalam CUDA sebelum proses inferensi.
Seperti ditunjukkan pada diagram arsitektur berikut, kita pertama tama membuat base container image yang dibutuhkan dengan CUDA untuk instans EC2 yang digunakan (G4dn, G5). Untuk membuat base container images, kita mulai dengan AWS Deep Learning Containers, yang menggunakan image docker yang sudah dikemas sebelumnya untuk melakukan deployment environment untuk deep learning hanya dalam beberapa menit. Image tersebut berisi tools dan library Pytorch yg dibutuhkan untuk deep learning. Anda dapat menambahkan library dan tool anda sendiri diatas image ini untuk meningkatkan kontrol terhadap monitoring, compliance dan data processing.
Kemudian kami membangun sebuah image container spesifik untuk model kami berisi konfigurasi model, model tracing dan kode terkait untuk menjalankan forward pass. Semua image container dimuat kedalam Amazon ECR agar model ini dapat melakukan scaling secara horizontal untuk berbagai konfigurasi model. Kami menggunakan Amazon Simple Storage Service (Amazon S3) sebagai tempat penyimpanan data umum untuk mengunduh konfigurasi dan mengunggah hasil-hasil benchmark untuk dirangkum. Anda dapat menggunakan arsitektur ini untuk mengulang proses benchmark dan menggunakannya untuk melakukan benchmark terhadap berbagai tipe model (seperti model Hugging Face, model PyTorch, dan model custom lainnya) menggunakan berbagai tipe instans EC2 (CPU, GPU, Inf1).
Tujuan kami menyiapkan eksperimen ini, adalah untuk mempelajari latensi sebagai fungsi throughput. Grafik ini penting bagi desain aplikasi untuk mendapatkan infrastruktur yang optimal secara biaya untuk aplikasi target. Untuk mencapai hal ini, kami mensimulasikan load yang berbeda dengan membuat antrian query dari beberapa thread dan kemudian mengukur waktu yang dibutuhkan untuk tiap request yang diselesaikan. Throughput diukur dari jumlah request yang diselesaikan per satuan waktu. Selain itu, Anda bisa mengubah ubah ukuran batch dan variabel lain seperti panjang sequence dan full precision vs half precision untuk secara komprehensif mencakup berbagai kemungkinan untuk mendapat metrik kinerja indikatif. Dalam studi kami, grafik throughput vs latensi bisa dihasilkan melalui variasi berbagai ukuran batch dan query menggunakan client multi-threaded. Setiap request diproses secara batch untuk memastikan compute diutilisasi secara penuh, terutama untuk request request kecil yang mungkin tidak sepenuhnya menggunakan kapasitas compute node. Anda juga dapat mengadopsi cara ini untuk menentukan ukuran batch di sisi client agar mendapat kinerja yang optimal.
Singkatnya, kita bisa merepresentasikan problem ini secara matematis sebagai : (Throughput, Latensi) = fungsi dari (Ukuran Batch, Jumlah thread, Precision).
Ini berarti, bila variasinya luas, jumlah eksperimen jadi besar. Untungnya, tiap eksperimen bisa dijalankan secara independen. Kami menyarankan menggunakan AWS Batch untuk menjalankan benchmark dengan scaling horizontal ini dalam waktu yang singkat tanpa penambahan biaya benchmark dibandingkan pengujian dengan pendekatan linier. Kode untuk mengulang hasil yang sama ada di repositori GitHub yang disiapkan untuk AWS Re:Invent 2021. Isi repositori tersebut cukup komprehensif untuk melakukan benchmark pada berbagai accelerator yang berbeda. Anda dapat merujuk pada aspek GPU dari kode untuk membangun container (Dockerfile-gpu
) dan lalu merujuk pada kode didalam Container-Root
untuk contoh spesifik untuk BERT dan ResNet50.
Kami menggunakan pendekatan di atas untuk membangun studi banding antara dua tipe model: Bert-base-uncased (110 juta parameter, NLP) dan ResNet50 (25.6 juta parameter, CV). Tabel berikut menampilkan ringkasan dari detil model-model tersebut.
Model Type | Model | Details |
NLP | twmkn9/bert-base-uncased-squad2 | 110 million parameters Sequence length = 128 |
CV | ResNet50 | 25.6 million parameters |
Kemudian, untuk melakukan benchmark dengan beberapa tipe data (full, half precision), kami memakai torch.cuda.amp
, yang menyediakan metode yang mudah untuk mengatasi isu mixed precision dimana sebagian operasi menggunakan tipe data torch.float32
(float) dan operasi lainnya menggunakan torch.float16
(half). Contohnya, operators seperti linear layers dan convolutions jauh lebih cepat menggunakan float16, sedangkan operator lainnya seperti reductions sering membutuhkan kisaran dinamis float32. Mixed precision otomatis mencoba mencocokkan tiap operator dengan tipe data yang sesuai untuk mengoptimalkan waktu tempuh jaringan dan ukuran memori yang dibutuhkan.
Hasil benchmark
Agar sebanding, kami memilih instans G4dn.4xlarge dan G5.4xlarge dengan atribut yang mirip, seperti terlihat dalam tabel berikut.
Instance | GPUs | GPU Memory (GiB) | vCPUs | Memory (GiB) | Instance Storage (GB) | Network Performance (Gbps) | EBS Bandwidth (Gbps) | Linux On-Demand Pricing (us-east-1) |
G5.4xlarge | 1 | 24 | 16 | 64 | 1x 600 NVMe SSD | up to 25 | 8 | $1.204/hour |
G4dn.4xlarge | 1 | 16 | 16 | 64 | 1x 225 NVMe SSD | up to 25 | 4.75 | $1.624/hour |
Di bagian berikut, kami membandingkan kinerja inferensi model BERT dan RESNET50 untuk beberapa ukuran batch spesifik (32, 16, 8, 4, 1) dan tipe data precision (full dan half precision) untuk mendapatkan grafik throughput vs. latensi. Kemudian, kami menyelidiki pengaruh throughput vs. ukuran batch untuk full precision dan half precision. Terakhir, kami menghitung biaya per sejuta inferensi sebagai fungsi dari ukuran batch. Konsolidasi hasil dari berbagai eksperimen tersebut dirangkum di bagian akhir dari post ini.
Throughput vs. latensi
Gambar berikut membandingkan instans G4dn dan G5 untuk workload NLP dan CV baik pada full dan half precision. Dibandingkan instans G4dn, instans G5 menghasilkan throughput sekitar lima kali lebih tinggi (untuk full precision) dan sekitar 2.5 kali lebih tinggi (untuk half precision) untuk model berbasis BERT, dan sekitar 2–2.5 kali lebih tinggi untuk sebuah model ResNet50. Secara keseluruhan, G5 adalah pilihan yang lebih baik, dengan ukuran batch semakin tinggi untuk model baik menggunakan full dan mixed precision dari segi kinerja.
Grafik berikut membandingkan throughtput dan latensi P95 pada full dan half precision untuk BERT.
Grafik berikut membandingkan throughput dan latensi P95 pada full precision dan half precision untuk ResNet50.
Throughput dan latensi vs. ukuran batch
Grafik berikut menunjukkan throughput sebagai fungsi dari ukuran batch. Bila ukuran batch kecil, compute tidak berfungsi dengan kapasitas penuh, dan seiring meningkatnya ukuran batch, throughput meningkat tetapi latensi juga bertambah. Grafik throughput makin mendekati nilai maksimum yang merupakan fungsi dari kinerja compute. Grafik throughput memiliki dua bagian utama, bagian yang naik dengan curam, dan bagian yang naik semakin landai mendekati nilai tertentu. Untuk sebuah model, compute yang memiliki kinerja baik (G5) dapat memperpanjang bagian yang naik curam ke ukuran batch yang lebih tinggi dari G4dn dan baru semakin melandai di throughput yang lebih tinggi. Juga ada trade off linier antara latensi dan ukuran batch. Karena itu jika aplikasi sensitif terhadap latensi, kita bisa menggunakan grafik latensi P95 vs ukuran batch untuk menentukan ukuran batch yang optimum. Namun, jika tujuannya untuk memaksimalkan throughput dengan latensi terendah, lebih baik memilih ukuran batch yang merujuk ke peralihan antara grafik yang naik curam dengan bagian yang melandai, karena bila ukuran batch ditingkatkan lagi hanya menghasilkan throughput yang tidak berbeda jauh tetapi dengan latensi yang lebih buruk. Untuk mencapai rasio price-performance terbaik, yaitu throughput lebih tinggi dengan latensi terendah, Anda lebih baik melakukan scaling secara horizontal titik optimal ini dengan beberapa server inferensi daripada meningkatkan ukuran batch.
Biaya vs. ukuran batch
Di bagian ini, kami menampilkan hasil perbandingan biaya inferensi ($ per sejuta inferensi) versus ukuran batch. Dari gambar berikut, kita dapat dengan jelas mengamati bahwa biaya (diukur dengan $ per sejuta inferensi) secara konsisten lebih rendah dengan G5 vs G4dn untuk kedua kasus (full precision maupun half precision).
Tabel berikut merangkum perbandingan throughput, latensi dan biaya ($ per sejuta inferensi) untuk model BERT dan RESNET50 untuk kedua mode precision untuk ukuran-ukuran batch tertentu. Walau memiiliki biaya lebih tinggi per instans, G5 secara konsisten mengalahkan G4dn nntuk semua aspek latensi inferensi, throughput dan biaya ($ per sejuta inferensi), untuk semua ukuran batch. Menggabungkan metrik metrik yang berbeda dengan biaya ($ per sejuta inferensi), model BERT (ukuran batch 32, full precision) dengan G5 3.7 kali lebih baik dari G4dn, dan dengan model ResNet50 (ukuran batch 32, full precision) 1.6 kali lebih baik dari G4dn.
Model | Batch Size | Precision | Throughput (Batch size X Requests/sec) |
Latency (ms) | $/million Inferences (On-Demand) |
Cost Benefit (G5 over G4dn) |
|||
. | . | . | G5 | G4dn | G5 | G4dn | G5 | G4dn | |
Bert-base-uncased | 32 | Full | 723 | 154 | 44 | 208 | $0.6 | $2.2 | 3.7X |
Mixed | 870 | 410 | 37 | 79 | $0.5 | $0.8 | 1.6X | ||
16 | Full | 651 | 158 | 25 | 102 | $0.7 | $2.1 | 3.0X | |
Mixed | 762 | 376 | 21 | 43 | $0.6 | $0.9 | 1.5X | ||
8 | Full | 642 | 142 | 13 | 57 | $0.7 | $2.3 | 3.3X | |
Mixed | 681 | 350 | 12 | 23 | $0.7 | $1.0 | 1.4X | ||
. | 1 | Full | 160 | 116 | 6 | 9 | $2.8 | $2.9 | 1.0X |
Mixed | 137 | 102 | 7 | 10 | $3.3 | $3.3 | 1.0X | ||
ResNet50 | 32 | Full | 941 | 397 | 34 | 82 | $0.5 | $0.8 | 1.6X |
Mixed | 1533 | 851 | 21 | 38 | $0.3 | $0.4 | 1.3X | ||
16 | Full | 888 | 384 | 18 | 42 | $0.5 | $0.9 | 1.8X | |
Mixed | 1474 | 819 | 11 | 20 | $0.3 | $0.4 | 1.3X | ||
8 | Full | 805 | 340 | 10 | 24 | $0.6 | $1.0 | 1.7X | |
Mixed | 1419 | 772 | 6 | 10 | $0.3 | $0.4 | 1.3X | ||
. | 1 | Full | 202 | 164 | 5 | 6 | $2.2 | $2 | 0.9X |
Mixed | 196 | 180 | 5 | 6 | $2.3 | $1.9 | 0.8X |
Benchmark inferensi lainnya
Selain hasil benchmark dari model BERT dan ResNet50 di bagian sebelumnya, kami menyajikan hasil benchmark tambahan untuk model NLP dan CV besar lainnya dengan framework PyTorch yang umum dipakai. Kelebihan kinerja G5 dibanding G4dn telah ditunjukkan untuk model BERT ukuran Large di berbagai presisi, dan model Yolo-v5 untuk berbagai ukuran. Kode yang dapat dipakai untuk mengulangi benchmark, dapat dirujuk di NVIDIA Deep Learning Examples for Tensor Cores. Hasil-hasil ini menunjukkan kelebihan menggunakan G5 dibanding G4dn untuk berbagai tugas inferensi dan berbagai tipe model yang berbeda.
Model | Precision | Batch Size | Sequence Length | Throughput (sent/sec) | Throughput: G4dn | Speedup Over G4dn |
BERT-large | FP16 | 1 | 128 | 93.5 | 40.31 | 2.3 |
BERT-large | FP16 | 4 | 128 | 264.2 | 87.4 | 3.0 |
BERT-large | FP16 | 8 | 128 | 392.1 | 107.5 | 3.6 |
BERT-large | FP32 | 1 | 128 | 68.4 | 22.67 | 3.0 |
BERT-large | 4 | 128 | 118.5 | 32.21 | 3.7 | |
BERT-large | 8 | 128 | 132.4 | 34.67 | 3.8 |
Kesimpulan
Dalam post ini kami telah menunjukkan bahwa untuk proses inferensi model NLP dan CV dengan framework Pytorch berskala besar, EC2 instans G5 adalah pilihan yang lebih baik dari instans G4dn. Meskipun biaya on-demand per jam untuk instans G5 lebih tinggi dari instans G4dn, kinerja yang lebih tinggi dan pencapaian throughput 2 sampai 5 kali pada tingkat precision apapun untuk model NLP dan CV, membuat biaya inferensi per sejuta inferensi instans G5 1.5-3.5 kali lebih baik dari instans G4dn. Bahkan untuk aplikasi yang mengutamakan latensi G5 2.5-5 kali lebih baik dari G4dn untuk model NLP dan CV.
Singkatnya, instans G5 adalah pilihan yang sangat baik untuk kebutuhan inferensi Anda baik dari segi kinerja maupun biaya per inferensi. Pemakaian luas dari framework CUDA dan kapasitas pool maupun variasi ukuran instans G5 di AWS memberi anda kemampuan unik untuk menjalankan inferensi berskala besar.
Artikel ini merupakan terjemahan dari blog yang ditulis oleh Ankur Srivastava, Amr Ragab, Mahadevan Balasubramaniam, dan Sundar Ranganathan pada 3 Oktober 2022 berjudul Achieve four times higher ML inference throughput at three times lower cost per inference with Amazon EC2 G5 instances for NLP and CV PyTorch models