Klon ChatGPT berbasis GPT-2 yang diimplementasikan dalam C 3000 byte (2023)
(nicholas.carlini.com)-
Implementasi klon ChatGPT
- Program ini adalah implementasi GPT-2 tanpa dependensi.
- Memuat matriks bobot dari file TensorFlow dan file BPE, lalu melakukan tokenisasi input dengan byte pair encoder sederhana.
- Mengimplementasikan paket aljabar linear dasar, mendefinisikan arsitektur transformer, menjalankan inferensi transformer, dan mengubah output kembali dari token dengan decoder BPE.
- Ditulis dalam C sekitar 3000 byte.
- Dioptimalkan secara efisien sehingga model GPT-2 Small dapat merespons dalam hitungan detik di perangkat modern.
- Mengimplementasikan KV caching dan algoritme perkalian matriks yang efisien.
-
Struktur program
- Library matematika matriks dasar (700 byte)
- Perkalian matriks cepat (300 byte)
- Layer jaringan saraf (300 byte)
- Model transformer (600 byte)
- Byte pair encoding (400 byte)
- Input/output (200 byte)
- Pemuatan bobot (300 byte)
- Pemuatan byte pair encoding (300 byte)
-
Latar belakang ChatGPT dan transformer
- ChatGPT adalah aplikasi untuk berinteraksi dengan model bahasa.
- GPT-4 adalah model terbaru yang sangat mengesankan.
- Program C ini mengimplementasikan cara kerja ChatGPT menggunakan GPT-2, model yang lebih lemah dari tahun 2019.
- GPT-2 adalah transformer yang menerima urutan kata berukuran tetap sebagai input dan memprediksi kata berikutnya.
-
Penjelasan kode C
-
Memulai matematika matriks (700 byte)
- Jaringan saraf tersusun dari operasi matriks.
- Membangun library matriks menggunakan definisi matriks yang minimal.
- Menggunakan makro untuk mengekstrak logika umum menjadi meta-rutin.
-
Perkalian matriks cepat (300 byte)
- Perkalian matriks dasar diimplementasikan menggunakan tiga loop.
- Berkat cara kerja memori dan cache, membaca dan menulis memori yang sama berulang kali lebih cepat.
-
Layer jaringan saraf (300 byte)
- Mendefinisikan beberapa layer jaringan saraf khusus untuk menulis transformer.
- Mengimplementasikan fungsi aktivasi GELU dan fungsi untuk mengatur sub-diagonal yang diperlukan untuk causal attention.
-
Arsitektur transformer (600 byte)
- Mengimplementasikan transformer dalam 600 byte.
- Pada setiap layer, menghitung key, query, dan value, membuat matriks attention, lalu menggabungkan hasilnya.
-
Byte pair encoding (400 byte)
- Karena model bahasa memerlukan input berukuran tetap, token dibuat menggunakan potongan kata.
- Memecah kata yang diberikan menjadi karakter individual, lalu menggabungkan pasangan token yang berdekatan.
-
Pemuatan bobot (300 byte)
- Memuat bobot jaringan saraf dari disk.
- Bobot diserialisasikan sebagai floating point 32-bit.
-
Pemuatan byte pair encoding (300 byte)
- Memuat kosakata byte pair encoding dari disk.
- Format file terdiri dari daftar byte pair encoding.
-
-
Kesimpulan
- Puluhan tahun perkembangan machine learning dapat dipadatkan menjadi beberapa ribu byte.
- Menjadi contoh jaringan saraf yang sederhana, mencakup semuanya kecuali bobot model yang sebenarnya.
1 komentar
Opini Hacker News
Saat menggunakan GPT-2 untuk mensimulasikan percakapan dengan teman, hasilnya menyenangkan dan kadang mengejutkan akurat. Saya penasaran apakah lompatan besar antara GPT-2 dan GPT-3 disebabkan oleh model yang lebih besar, data yang lebih banyak, atau keduanya. RLHF memang membuat perbedaan besar, tetapi model dasar GPT-3 sendiri juga sangat berguna jika diberi contoh yang cukup
Ini contoh yang bagus untuk menunjukkan betapa sederhananya jaringan saraf sebenarnya. Kecerdasan buatan adalah sihir hitam yang kita gunakan untuk menghasilkan uang
Saya belum mencoba menjalankan kodenya, tetapi saya terkesan dengan ukurannya yang kecil. Program ELISA awal lebih besar. Fakta bahwa dalam 4 tahun terakhir ini bisa dipadatkan hingga hitungan byte sangat mengesankan. Jika ada petunjuk tentang di mana letak "sihir"-nya, saya ingin penjelasannya. Saya penasaran apakah itu ada pada fungsi GELU atau pada model yang diunduh melalui skrip bash
GPT-2 menulis dongeng favorit saya. Tautan: The Princess, the Fairy Godmother, and the Chest
Saya penasaran apakah GPT-2 benar-benar telah disetel agar bisa digunakan untuk chat. Jika tidak, menurut saya agak berlebihan menyebut ini sebagai klon ChatGPT
LISP tidak selalu lebih baik daripada C. Kali ini boleh dimaafkan. Jika Anda melewatkan tautan kodenya, ini dia: C-Chat-GPT-2
Saya penasaran dijalankan pada perangkat keras seperti apa. Apakah bisa menggunakan bobot terkuantisasi dari huggingface, dan apakah ada masalah atau kueri tertentu yang sangat cocok untuknya
Belakangan ini Anda bisa dengan mudah membuat ChatGPT versi sendiri menggunakan gptscript. Tautan: gptscript
Saya tidak mengerti bagaimana makro C mirip dengan regular expression. Makro C mencocokkan kata dan menggantinya dengan teks lain. Regular expression mencocokkan teks dengan pola yang relatif kompleks, dan tidak melakukan penggantian teks dengan sendirinya
Saya penasaran apakah ada yang sudah menjalankannya secara lokal untuk melihat seperti apa output yang dihasilkan GP2 ini