- Mengimplementasikan Llama3 dari nol menggunakan satu tensor dan perkalian matriks.
- Memuat tensor secara langsung dari file model Llama3 yang disediakan Meta
Ringkasan implementasi scratch model LLaMA-3
Menyiapkan tokenizer
- Menyiapkan tokenizer menggunakan library Tiktoken
- Mendefinisikan token khusus dan menambahkannya ke tokenizer
Membaca file model
- Memuat file model (
consolidated.00.pth) menggunakan PyTorch
- Membaca konfigurasi model dari file
params.json
- Mencakup informasi seperti jumlah dimensi (
dim), jumlah layer (n_layers), dan jumlah head (n_heads)
Mengubah teks menjadi token
- Mengubah teks prompt menjadi urutan token menggunakan tokenizer
- Mengubah setiap token menjadi embedding yang sesuai
- Menormalkan embedding menggunakan normalisasi RMS
Implementasi attention
- Memuat matriks kueri (
wq), kunci (wk), nilai (wv), dan keluaran (wo) dari model
- Menghitung vektor kueri, kunci, dan nilai untuk setiap token
- Menambahkan informasi posisi menggunakan RoPE (Rotary Positional Embedding)
- Menghitung skor attention dengan menghitung hasil kali titik kueri dan kunci
- Melakukan masking pada skor attention untuk token masa depan
- Menerapkan fungsi Softmax untuk menghitung distribusi attention
- Menghitung hasil attention dengan mengalikan distribusi attention dan vektor nilai
Multi-head attention
- Melakukan perhitungan attention untuk semua head attention
- Menggabungkan (concatenate) hasil tiap head untuk menghasilkan hasil attention akhir
Jaringan feed-forward
- Mengimplementasikan jaringan feed-forward dengan fungsi aktivasi SwiGLU (Swish Gated Linear Unit)
- Menambahkan hasil attention dan keluaran jaringan feed-forward untuk menghasilkan embedding akhir
Mengulang seluruh layer
- Mengulangi perhitungan attention dan jaringan feed-forward untuk semua layer transformer
- Menormalkan embedding akhir dengan normalisasi RMS
Prediksi token
- Menghitung logits dengan mengalikan embedding akhir dengan matriks keluaran
- Memprediksi token berikutnya sebagai token dengan nilai tertinggi pada logits
- Mendekode token yang diprediksi lalu menampilkannya
Pendapat GN⁺
- Artikel ini sangat berguna untuk memahami struktur internal dan cara kerja model Llama3. Secara khusus, melalui proses implementasi dari nol, pembaca bisa melihat dengan jelas bagaimana tiap komponen model saling berinteraksi.
- Bagi insinyur perangkat lunak pemula, isinya mungkin agak kompleks. Namun, penjelasannya tersusun langkah demi langkah sehingga tetap bisa dipahami jika diikuti perlahan.
- Artikel ini memperkenalkan konsep lanjutan seperti RoPE (rotary positional embedding) untuk mempelajari cara meningkatkan performa model. Ini dapat berguna saat mengimplementasikan atau menyempurnakan model NLP lain.
- Melalui artikel ini, pembaca dapat memahami lebih dalam struktur internal dan cara kerja model deep learning. Ini akan sangat membantu saat mengoptimalkan atau melakukan debugging pada model.
1 komentar
Anya lucu ya