Repositori ini berisi implementasi model LLaMA 2 (Large Language Model Meta AI), varian Generative Pretrained Transformer (GPT). Implementasinya berfokus pada arsitektur model dan proses inferensi. Kode ini direstrukturisasi dan banyak diberi komentar untuk memudahkan pemahaman tentang bagian-bagian penting dari arsitektur.
Normalisasi RMS: RMSNorm adalah penyederhanaan dari normalisasi lapisan asli (LayerNorm). LayerNorm adalah teknik regularisasi yang mungkin menangani masalah pergeseran kovariat internal untuk menstabilkan aktivasi lapisan dan meningkatkan konvergensi model. Terbukti cukup sukses di LLaMA 2.
Fungsi Aktivasi: LLaMA 2 menggunakan fungsi aktivasi SwiGLU, bukan ReLU, sehingga menghasilkan peningkatan kinerja pelatihan.
Rotary Positional Embeddings (RoPE): Terinspirasi oleh proyek GPT-Neo-X, LLaMA 2 menggabungkan penyematan posisi putar di setiap lapisan, sehingga meningkatkan pemahaman posisi model.
Peningkatan Panjang Konteks dan Perhatian Kueri yang Dikelompokkan (GQA): Model LLaMA 2 memiliki jendela konteks ganda (dari 2048 menjadi 4096 token) dan menggunakan perhatian kueri yang dikelompokkan. Hal ini memungkinkan pemrosesan dokumen panjang, riwayat obrolan, dan tugas ringkasan yang lebih baik.
KV-caching adalah teknik optimasi penting yang digunakan dalam implementasi ini untuk mempercepat proses inferensi untuk decoding Model Bahasa (LM). Selama decoding autoregresif, di mana setiap token diprediksi berdasarkan token sebelumnya, perhatian diri dalam model bersifat kausal. Hal ini menyiratkan bahwa representasi token dihitung hanya berdasarkan token itu sendiri dan token sebelumnya, bukan token masa depan.
Dalam perhatian mandiri, urutan masukan diproyeksikan menggunakan proyeksi kunci, nilai, dan kueri. KV-cache secara efisien menyimpan hasil proyeksi kunci dan nilai, menghilangkan kebutuhan komputasi yang berlebihan dalam iterasi decoding di masa mendatang. Hasilnya, representasi token yang tetap selama decoding autoregresif dapat diambil dari cache, sehingga meningkatkan kecepatan inferensi secara signifikan.
Teknik caching KV ini adalah fitur arsitektur utama yang meningkatkan efisiensi dan kecepatan model LLaMA selama decoding.
Model LLaMA 2 menggabungkan variasi konsep Multi-Query Attention (MQA) yang dikemukakan oleh Shazeer (2019), yang merupakan penyempurnaan dari algoritma Multi-Head Attention (MHA). MQA meningkatkan efisiensi mekanisme perhatian sambil mempertahankan penurunan akurasi minimal.
Dalam perhatian multi-kepala tradisional, seluruh penghitungan perhatian direplikasi sebanyak h kali, dengan h adalah jumlah kepala perhatian. Namun, GQA mengurangi redundansi komputasi dengan menghilangkan atau secara signifikan mengurangi dimensi head (h) dari nilai K dan V. Dalam MQA, setiap "head" dari nilai kueri (Q) mengalami transformasi K dan V yang sama, sehingga mengoptimalkan komputasi perhatian.
Penyempurnaan ini menghasilkan kinerja komputasi serupa dengan MHA namun secara signifikan mengurangi jumlah data yang dibaca/ditulis dari memori. Sebagai konsekuensinya, GQA meningkatkan kinerja (melalui peningkatan intensitas aritmatika) dan efisiensi ruang memori (melalui penurunan jumlah data cache KV yang disimpan), menjadikannya tambahan yang berharga pada arsitektur LLaMA.
Dalam model LLaMA 2, Rotary Positional Embeddings (RoPE) memainkan peran penting dalam meningkatkan mekanisme perhatian dengan memasukkan informasi posisi ke dalam representasi token. Konsep "perhatian" sangat kuat, namun untuk memastikan bahwa perhatian yang dihitung bermakna, token perlu memiliki gagasan tentang posisi.
Penyematan posisi tersedia dalam dua jenis utama: absolut dan relatif. Penyematan posisi absolut mengkodekan posisi absolut sebuah kata dalam frasa masukan, sedangkan penyematan posisi relatif mengkodekan posisi relatif antara dua kata. Penyematan ini memberikan informasi posisi penting yang membantu token memahami konteksnya secara berurutan.
Penyematan Posisi Putar mengambil pendekatan unik dengan memanfaatkan matriks rotasi untuk menyematkan informasi posisi. Tujuannya adalah untuk memastikan bahwa hasil kali dalam vektor q dan k, pada posisi m dan n, hanya bergantung pada q, k, dan jarak relatifnya (m — n). Matriks rotasi, yang sudutnya adalah posisi vektor, dimasukkan ke dalam vektor asli melalui perkalian matriks, menyelaraskan dengan kriteria ini.
Pendekatan inovatif untuk memasukkan informasi posisi ini meningkatkan kemampuan model untuk memahami hubungan dan konteks token, sehingga berkontribusi pada peningkatan mekanisme perhatian.
model.py
: Berisi implementasi model transformator LLaMA dengan komentar mendetail yang menjelaskan setiap komponen dan fungsionalitas.
inference.py
: Mendemonstrasikan cara menggunakan model LLaMA terlatih untuk inferensi, memberikan wawasan tentang pemrosesan input dan output.
Jangan ragu untuk menjelajahi kodenya, perbaiki jika ada kesalahan, dan bereksperimenlah dengan model LLaMA 2!