Mempercepat Llama 2 70B dengan NVIDIA H100
Perjalanan inferensi LLM yang dipercepat

Pengejaran performa pada mesin jawaban Perplexity mendorong kami untuk mengadopsi teknologi terbaru yang ditawarkan oleh NVIDIA dan AWS. Dalam blog ini, kami dengan senang hati membagikan hasil eksperimen terbaru kami: perbandingan inferensi Llama 2 70B di berbagai pengaturan perangkat keras dan perangkat lunak.
Platform inferensi LLM kami, pplx-api, dibangun di atas tumpukan canggih yang didukung oleh pustaka sumber terbuka. Sejak beta publik pplx-api dimulai pada bulan Oktober, kami telah mengatasi tantangan penskalaan dan mempelajari cara terbaik untuk menyetel konfigurasi guna mencapai skala besar. Hal ini mendorong kami untuk menjalankan eksperimen dengan pertanyaan panduan berikut:
Berapa peningkatan performa mentah dari beralih GPU dari NVIDIA A100 ke NVIDIA H100, dengan semua pengaturan lainnya tetap sama?
Berapa peningkatan efisiensi dari kuantisasi titik mengambang 8-bit (fp8), yang ditambahkan dukungannya secara natif oleh H100? Berapa biaya akurasi dari kuantisasi ini?
Bagaimana paralelisme tensor dan ukuran batch memengaruhi latensi dan throughput token?
Mempertimbangkan hal di atas, konfigurasi mana yang menghasilkan keseimbangan performa dan efisiensi biaya yang paling dapat disesuaikan?
Pengaturan eksperimen
Kami menjalankan eksperimen berikut sebagai serangkaian tolok ukur lokal untuk menghindari latensi jaringan.
Metrik Utama:
Latensi: Total waktu yang dibutuhkan server inferensi untuk menghasilkan respons penuhnya.
Throughput: Jumlah token keluaran, per detik, per GPU, yang dapat dihasilkan oleh server inferensi di semua pengguna dan permintaan.
Konstanta:
Faktor-faktor berikut akan memengaruhi metrik utama, jadi kami menjaganya tetap konsisten di berbagai uji coba eksperimen.
Model AI
Performa berskala seiring dengan ukuran LLM. Lebih banyak parameter memerlukan lebih banyak komputasi yang mengakibatkan inferensi lebih lambat. Misalnya, Llama 2 13B lebih cepat daripada Llama 2 70B ketika pengaturan lainnya sama. Kami tetap menggunakan Llama 2 70B dalam eksperimen ini karena kami ingin mengoptimalkan penyajian model sumber terbuka yang paling mampu.
Kumpulan Data Token Masukan/Keluaran
Jumlah token masukan dan keluaran dalam setiap pasang permintaan/respons sampel dapat memengaruhi pengukuran performa. Secara umum, pembuatan token keluaran mendominasi waktu respons keseluruhan. Ketika pengambilan data hanya memicu respons “ya/tidak” dari LLM, maka respons akan lebih cepat dibandingkan dengan sampel yang meminta LLM untuk menulis esai. Kumpulan data kami terdiri dari permintaan sintetis dengan 1024 token masukan yang memicu 512 token keluaran. Distribusi ini dipilih agar sesuai dengan distribusi lalu lintas yang diamati pada penerapan publik kami untuk Llama 2 70B.
Versi Perangkat Lunak
NVIDIA TensorRT-LLM (rilis v0.5.0) adalah pustaka sumber terbuka untuk mengoptimalkan inferensi LLM. Dirilis pada akhir 2023, pustaka ini menyintesis banyak pengoptimalan inferensi NVIDIA dan menyediakan lapisan kustomisasi yang fleksibel untuk parameter kunci dalam eksperimen ini: ukuran batch, kuantisasi, dan paralelisme tensor.
Variabel
Kami bereksperimen di 4 sumbu konfigurasi: paralelisme tensor, arsitektur GPU, kuantisasi, dan ukuran batch maks. Sumbu-sumbu ini saling terhubung karena masing-masing merepresentasikan trade-off terkait sumber daya hambatan kritis berupa memori GPU.
Arsitektur GPU
Arsitektur GPU Hopper generasi kesembilan (H100-HBM3-80GB / p5.48xlarge) mengemas daftar besar fitur dibandingkan pendahulunya, Ampere (A100-SXM4-80GB / p4de.24xlarge), termasuk tingkat komputasi 2x-6x dan bandwidth memori GPU hampir 2x. Bandwidth memori GPU adalah metrik penting untuk inferensi karena hambatan latensi utama dari perkalian matriks inferensi berasal dari pemuatan gigabita data model dari memori GPU ke dalam register komputasi. Berdasarkan statistik ini, kami berhipotesis bahwa perbandingan yang setara antara NVIDIA H100 dan A100 akan menunjukkan peningkatan 2x lipat dalam latensi dan throughput.
Perbedaan utama lainnya antara NVIDIA H100 dan A100 adalah bahwa inti tensor H100 secara natif menambahkan dukungan untuk instruksi titik mengambang 8-bit (fp8), yang membuka jalan bagi pengoptimalan lebih lanjut yang dirinci di bawah ini. Inilah sebabnya mengapa kami menggunakan fp8 dan fp16 secara khusus untuk H100.
Untuk menjaga agar memori per GPU tetap konsisten dalam eksperimen ini, kami tetap menggunakan node dengan memori GPU 8x80GB untuk NVIDIA A100 dan H100 kami. Selain memungkinkan ukuran batch yang lebih besar, memori GPU penting karena parameter model dimuat ke dalam memori GPU selama permulaan server untuk akses cepat. Misalnya, jika setiap dari 70 miliar parameter dalam model kami adalah angka titik mengambang 16-bit, maka ukuran model sekitar 140GB, yang tidak muat pada satu GPU. Oleh karena itu, diperlukan paralelisme tensor, yang kami jelaskan di bawah ini.
Paralelisme Tensor
Paralelisme tensor mengacu pada jumlah perangkat GPU yang digunakan untuk menjalankan server inferensi. Saat kami mengalokasikan sejumlah GPU, TensorRT-LLM menggabungkan sumber daya mereka untuk membantu kami mencapai anggaran memori minimum yang diperlukan untuk menjalankan Llama 2 70B. Hipotesis kami adalah bahwa paralelisme tensor yang lebih rendah akan menghasilkan latensi yang lebih tinggi (karena lebih sedikit sumber daya yang digunakan untuk memenuhi setiap batch) tetapi throughput per GPU yang lebih tinggi (karena pemanfaatan yang lebih baik) jika dibandingkan dengan paralelisme tensor yang lebih tinggi.
Kuantisasi
Kuantisasi adalah pengurangan presisi dalam bobot dan aktivasi yang digunakan oleh jaringan saraf. Kami menggunakan teknik ini untuk memotong setengah konsumsi memori GPU saat kami beralih dari fp16 ke fp8. Hal ini memungkinkan untuk menjalankan model yang sama dengan penggunaan memori GPU total yang lebih rendah, memungkinkan paralelisme tensor yang lebih rendah, yang mendorong throughput.
Implementasi kuantisasi memiliki potensi untuk menurunkan akurasi. Oleh karena itu, kami mengevaluasi akurasi untuk presisi yang berbeda dengan membandingkan statistik perplexity mereka, ukuran seberapa baik LLM memprediksi setiap token berikutnya dalam sebuah kalimat, pada korpus WikiText. Untuk titik mengambang 8-bit dan bobot 8-bit dengan aktivasi 8-bit dan SmoothQuant (w8a8 SQ), tidak ada perubahan signifikan pada perplexity (< 1%) dibandingkan dengan fp16 pada WikiText, jadi kami merasa yakin untuk melanjutkan. Namun, w4a16 menunjukkan perubahan substansial 7% pada perplexity, yang mungkin disebabkan oleh presisi yang bahkan lebih rendah dan konversi dinamis yang diperlukan antara int4 dan fp16.
Ukuran Batch
Paralelisme melalui pembacuan batch adalah strategi klasik untuk memeras performa dari sistem yang terbatas sumber daya. Dengan memproses beberapa permintaan dalam setiap lolosan maju melalui jaringan saraf, batching dikenal dapat meningkatkan throughput dengan mengorbankan sedikit latensi. Batching juga menimbulkan konsumsi memori GPU yang lebih tinggi karena ukuran singgahan KV yang mengelola mekanisme perhatian tumbuh secara linier dengan ukuran batch.
Dalam kasus Llama 2 70B (yang memiliki 80 lapisan), fp16 dengan ukuran batch 32 untuk ukuran konteks 4096, ukuran singgahan KV mencapai 40 GB yang substansial. Ini akhirnya mencegah Llama 2 70B fp16, yang bobotnya saja memakan 140GB, untuk muat dengan nyaman ke dalam memori GPU 160GB yang tersedia pada paralelisme tensor 2 (TP-2).
Hasil
Kami meninjau kombinasi yang kompatibel dari 4 variabel eksperimen dan menyajikan tren yang paling berwawasan di bawah ini.
Peningkatan latensi kuantisasi berada di kisaran 10% saat membandingkan H100 fp16 → fp8 dan A100 fp16 → w8a8 dengan SmoothQuant. Namun, presisi campuran w4a16 sebenarnya berkinerja lebih baik pada ukuran batch rendah dan lebih buruk pada ukuran batch yang lebih tinggi dibandingkan dengan fp16. Ini mungkin karena sejumlah faktor, termasuk kernel komputasi yang kurang dioptimalkan, waktu casting antara int4 dan fp16, dan fakta bahwa w4a16 masih menggunakan titik mengambang 16-bit untuk aktivasi, yang tidak menghasilkan penghematan dalam dimensi singgahan KV. Karena w4a16 juga menunjukkan akurasi yang lebih rendah, kami menyimpulkan bahwa kami harus tetap menggunakan w8a8 SQ untuk A100 dan fp8 untuk H100.
Dalam dua gambar pertama kami, kami hanya menyajikan konfigurasi TP-8. H100 mencapai latensi 54% dan throughput 184% dibandingkan dengan A100 ketika keduanya menggunakan fp16 / BS-128 / TP-8, yang meningkat menjadi latensi 49% dan throughput 202% ketika menggunakan fp8 pada H100. Peningkatan performa ini dapat dikaitkan dengan peningkatan daya komputasi dan bandwidth memori antara H100 dan A100. Yang perlu dicatat, perbedaannya kurang begitu terasa di bawah ukuran batch yang lebih rendah di mana pemanfaatan mungkin lebih rendah.
Saat kami membangun platform kami, kami ingin menghormati persyaratan latensi tertentu bagi pengguna kami sambil memaksimalkan throughput. Oleh karena itu, daripada membandingkan A100 vs. H100 pada ukuran batch yang sama, sebenarnya lebih masuk akal bagi kami untuk membandingkan throughput mereka hanya di bawah konfigurasi di mana mereka memenuhi persyaratan latensi. Kami menetapkan batas pada latensi 25600ms untuk penyelesaian 512 token keluaran dan menemukan bahwa H100 / TP-8 / fp8 / BS-128 menghasilkan throughput 251% dibandingkan dengan A100 / TP-8 / fp16 / BS-64, karena mampu memproses ukuran batch ganda pada latensi yang lebih rendah. Mengingat bahwa kuantisasi memberikan penghematan memori GPU, sekarang kami perlu mengevaluasi bagaimana paralelisme tensor dapat menambahkan lapisan pengoptimalan berikutnya.
Dalam hal kuantisasi dan arsitektur, ada pemenang yang jelas: H100 mendominasi A100 dan kuantisasi presisi yang lebih rendah meningkatkan pemanfaatan memori, latensi, dan throughput. Namun, ukuran batch dan paralelisme tensor menghadirkan trade-off dalam metrik utama kami. Ukuran batch yang lebih besar mengoptimalkan throughput dengan mengorbankan peningkatan latensi dan konsumsi memori. Di sisi lain, paralelisme tensor yang lebih tinggi meningkatkan kumpulan keseluruhan memori yang tersedia dan mengoptimalkan latensi, tetapi di-trade-off dengan throughput karena biaya sinkronisasi perkalian matriks terdistribusi dan berdasarkan penguncian lebih banyak sumber daya GPU.
Konfigurasi yang memaksimalkan throughput dari eksperimen kami adalah H100 / fp8 / TP-2 / BS-128, pada 767 token keluaran per detik per GPU. Ini adalah peningkatan 460% atas A100 / fp16 / TP-8 / BS-64. Namun, ini harus dibayar dengan latensi dua kali lipat - mendekati 42000ms untuk 512 token keluaran - sehingga mungkin tidak cocok sebagai konfigurasi produksi. Hasil TP-4 BS-128 (626 tok/detik/gpu pada waktu respons 26188ms) dan TP-2 BS-32 (435 tok/detik/gpu pada waktu respons 18821ms) mungkin merepresentasikan trade-off yang lebih baik pada metrik utama kami.
Kesimpulan
Hasil kami menunjukkan bahwa:
Kami mencapai latensi 54% dan throughput 184% menggunakan H100 dibandingkan dengan A100 dengan konfigurasi yang sama, yang meningkat masing-masing menjadi 49% dan 202% ketika H100 memanfaatkan dukungan aslinya untuk fp8.
Saat memaksimalkan throughput dengan tunduk pada batasan latensi, H100 / fp8 / TP-8 / BS-128 menghasilkan throughput 251% dibandingkan dengan A100 / fp16 / TP-8 / BS-64, karena dapat memproses batch ganda pada kecepatan yang lebih cepat.
Memanfaatkan H100 dengan TP-2 dengan fp8, kami dapat mencapai throughput 373% dari A100 / fp16 / TP-8 / BS-128, dengan peningkatan latensi kurang dari 10%.
Ukuran batch dan paralelisme tensor menghadirkan trade-off antara throughput dan latensi kepada operator sistem inferensi LLM.
Hasil ini membuat kami merasa percaya diri tentang transisi penuh ke GPU H100 di tumpukan perangkat keras kami yang sebelumnya ditenagai A100. Kami senang dapat mengonfirmasi peningkatan performa yang diiklankan oleh NVIDIA dan menantikan terobosan mereka berikutnya dalam perangkat keras terakselerasi.
Apa Selanjutnya
Perbatasan kami berikutnya untuk pengoptimalan adalah menguji dampak akurasi dan performa dari sparsitas terstruktur dan presisi int4, yang secara signifikan dapat mengurangi tapak memori GPU Llama 2 70B dan menghasilkan peningkatan latensi hingga 2x lipat. Kami sangat antusias untuk melanjutkan perjalanan inferensi secepat kilat dan berharap dapat memberdayakan pengguna kami untuk membangun aplikasi canggih di atas platform kami.
Dalam waktu dekat, pplx-api akan mencabut batas tingkat dan menawarkan lebih banyak LLM Perplexity kustom, termasuk LLM bertenaga internet dengan dasar untuk fakta.
Daftar untuk Perplexity Pro di perplexity.ai/pro. Dapatkan akses ke pplx-api mutakhir kami, dan manfaatkan kapabilitas lanjutan ini di proyek Anda. Temukan lebih banyak tentang pplx-api di blog kami.
Tertarik membentuk masa depan AI? Kami sedang merekrut! Jadilah bagian dari tim yang menggerakkan infrastruktur LLM generatif berskala besar. Jelajahi peluang di Perplexity Careers.
Penulis:
Aarash Heydari, Grigorii Alekseev, Kevin Hu, Denis Yarats