GPT-2 tabanlı, 3000 baytlık C ile yazılmış ChatGPT klonu (2023)
(nicholas.carlini.com)-
ChatGPT klonunun uygulanması
- Bu program, GPT-2'nin bağımlılıksız bir uygulamasıdır.
- TensorFlow dosyalarından ağırlık matrislerini ve BPE dosyalarını yükler, girdiyi basit bir byte pair encoder ile tokenize eder.
- Temel bir lineer cebir paketini uygular, transformer mimarisini tanımlar, transformer inference işlemini yürütür ve çıktıyı BPE decoder ile token'lardan geri çevirir.
- Yaklaşık 3000 baytlık C ile yazılmıştır.
- Verimli biçimde optimize edilmiştir; GPT-2 Small modeli modern cihazlarda birkaç saniye içinde yanıt verebilir.
- KV caching ve verimli matris çarpımı algoritmaları uygular.
-
Program yapısı
- Temel matris matematiği kütüphanesi (700 bayt)
- Hızlı matris çarpımı (300 bayt)
- Sinir ağı katmanları (300 bayt)
- Transformer modeli (600 bayt)
- Byte pair encoding (400 bayt)
- Girdi/çıktı (200 bayt)
- Ağırlık yükleme (300 bayt)
- Byte pair encoding yükleme (300 bayt)
-
ChatGPT ve transformer arka planı
- ChatGPT, bir dil modeliyle konuşmayı mümkün kılan bir uygulamadır.
- GPT-4 en yeni modeldir ve oldukça etkileyicidir.
- Bu C programı, ChatGPT'nin çalışma şeklini 2019'daki daha zayıf bir model olan GPT-2'yi kullanarak uygular.
- GPT-2, sabit boyutlu bir kelime dizisini girdi olarak alıp bir sonraki kelimeyi tahmin eden bir transformer'dır.
-
C kodunun açıklaması
-
Matris matematiğine başlamak (700 bayt)
- Sinir ağları matris işlemlerinden oluşur.
- En minimal matris tanımını kullanarak bir matris kütüphanesi kurar.
- Ortak mantığı meta-rutinlere ayırmak için makrolar kullanır.
-
Hızlı matris çarpımı (300 bayt)
- Temel matris çarpımı üç döngü kullanılarak uygulanır.
- Bellek ve cache'in çalışma biçimi sayesinde aynı belleği tekrar tekrar okuyup yazmak daha hızlıdır.
-
Sinir ağı katmanları (300 bayt)
- Transformer'ı yazmak için bazı özel sinir ağı katmanları tanımlanır.
- GELU aktivasyon fonksiyonu ve causal attention için gereken alt üçgen ayarlama fonksiyonu gibi bileşenler uygulanır.
-
Transformer mimarisi (600 bayt)
- Transformer 600 baytta uygulanır.
- Her katmanda key, query ve value hesaplanır, attention matrisi oluşturulur ve sonuçlar birleştirilir.
-
Byte pair encoding (400 bayt)
- Dil modeli sabit boyutlu girdi gerektirdiği için token üretmek amacıyla kelime parçaları kullanılır.
- Verilen bir kelimeyi tek tek karakterlere ayırır ve bitişik token çiftlerini birleştirir.
-
Ağırlık yükleme (300 bayt)
- Sinir ağının ağırlıkları diskten yüklenir.
- Ağırlıklar 32 bit kayan noktalı sayılar olarak serileştirilmiştir.
-
Byte pair encoding yükleme (300 bayt)
- Byte pair encoding sözlüğü diskten yüklenir.
- Dosya biçimi, byte pair encoding listesinden oluşur.
-
-
Sonuç
- Makine öğrenimindeki onlarca yıllık ilerleme birkaç bin bayta sıkıştırılabilir.
- Gerçek model ağırlıkları hariç her şeyi içeren basit bir sinir ağı örneğidir.
1 yorum
Hacker News görüşleri
GPT-2 kullanarak bir arkadaşla sohbeti simüle ettiğimde eğlenceliydi ve bazen şaşırtıcı derecede isabetliydi. GPT-2 ile GPT-3 arasındaki büyük sıçramanın daha büyük modelden mi, daha fazla veriden mi, yoksa her ikisinden mi kaynaklandığını merak ediyorum. RLHF büyük fark yaratıyor, ancak temel GPT-3 modeli de yeterli örnek verildiğinde oldukça kullanışlıydı
Basit bir sinir ağının aslında ne kadar basit olabileceğini gösteren iyi bir örnek. Yapay zeka, para kazanmak için kullandığımız kara büyü
Kodu çalıştırmadım ama küçük boyutundan etkilendim. İlk ELISA programı bundan daha büyüktü. Son 4 yılda bunu bayt düzeyinde sığdırabilmiş olmamız etkileyici. Sihirin nerede olduğuna dair bir ipucu varsa açıklanmasını isterim. Bunun GELU fonksiyonu mu yoksa bir bash betiğiyle indirilen model mi olduğunu merak ediyorum
GPT-2 sevdiğim bir masal yazdı. Bağlantı: The Princess, the Fairy Godmother, and the Chest
GPT-2'nin gerçekten sohbet için kullanılabilecek şekilde ayarlanıp ayarlanmadığını merak ediyorum. Değilse buna ChatGPT klonu demenin biraz zorlayıcı olduğunu düşünüyorum
LISP her zaman C'den daha iyi değildir. Bu seferlik kabul. Kod bağlantısını kaçırdıysanız burada: C-Chat-GPT-2
Hangi donanımda çalışabildiğini merak ediyorum. huggingface'in kuantize ağırlıklarının kullanılıp kullanılamayacağını ve özellikle hangi sorunlara ya da sorgulara uygun olduğunu da merak ediyorum
Bugünlerde gptscript kullanarak kendi ChatGPT'nizi kolayca hayata geçirebilirsiniz. Bağlantı: gptscript
C makrolarının düzenli ifadelerle nasıl benzer olduğunu anlamıyorum. C makroları kelimeleri eşleştirip başka metinlerle değiştirir. Düzenli ifadeler ise görece karmaşık desenlerle metni eşleştirir ve kendi başına metin değiştirmez
Bunu yerelde çalıştırıp bu GP2'nin nasıl bir çıktı ürettiğine bakan biri oldu mu merak ediyorum