- Andrej karpathy'nin nanochat projesi, 100 dolarlık bütçeyle ChatGPT benzeri bir konuşma odaklı LLM'i doğrudan kurabilmenizi sağlayan açık kaynaklı bir proje
- Tüm pipeline (tokenization, pretraining, midtraining, finetuning, evaluation, inference, web serving) sade ve hacklenebilir biçimde uygulanmış
- Tek bir 8XH100 GPU düğümünde tek bir script ile 4 saat içinde eğitim tamamlanıyor; GPT-2 seviyesinde performansı hedefleyen d26 modeli yaklaşık 300 dolara 12 saat, 1000 dolarlık katman ise 41,6 saat sürüyor
- 330KB boyutunda, 8.300 satır ve 44 dosyadan oluşan son derece sade bir kod tabanıyla, karmaşık config nesneleri veya model factory'leri olmadan okuması kolay ve fork etmesi kolay güçlü bir baseline sunuyor
- Eureka Labs'in LLM101n kursunun capstone projesi olarak geliştiriliyor ve amaç, 1000 doların altındaki bütçelerle erişilebilen mikro modellerin en ileri düzeyini geliştirmek
nanochat proje genel bakışı
- nanochat, ChatGPT benzeri bir konuşma odaklı LLM'i 100 dolar maliyetle hayata geçirmek isteyen geliştiriciler için hazırlanmış açık kaynaklı bir proje
- Tüm kod tabanı tek parça, okunabilir, az bağımlılığa sahip ve sade yazıldığı için değiştirmek ve deney yapmak kolay
- pretraining, finetuning, değerlendirme, inference ve web UI dahil tüm süreci tek seferde yönetebileceğiniz bir ortam sunuyor
- speedrun.sh script'i ile tüm pipeline otomatik olarak çalıştırılabildiği için yeni başlayanlar da kolayca başlayabiliyor
- Minimum bağımlılık ve hacklenebilir yapı anlayışıyla tasarlandığından, kolay anlaşılır ve değiştirilebilir olması gereken eğitim amaçlı kullanım için optimize edilmiş
- Proje, Eureka Labs tarafından geliştirilen LLM101n dersinin capstone projesi olarak kullanılacak
Hızlı başlangıç (Quick Start)
- GPU ortamında, özellikle 8XH100 düğümünde, speedrun.sh çalıştırıldığında eğitim ve inference süreci yaklaşık 4 saatte tamamlanıyor
- 8XH100 düğüm için saatlik 24 dolar üzerinden toplam 4 saat sürüyor
- Uzun süren eğitim sırasında kararlı izleme için screen oturumu içinde çalıştırmanız öneriliyor
screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh komutunu kullanın
Ctrl-a d ile ayırdıktan sonra tail speedrun.log ile ilerlemeyi takip edin
- Eğitim bittiğinde basit bir web UI üzerinden LLM'e serbestçe soru sorabilir ve sonuçları sohbet penceresinde görebilirsiniz
python -m scripts.chat_web
- 4e19 FLOPs seviyesindeki model, anaokulu öğrencisi düzeyinde bir konuşma yeteneği sunuyor
- Hikâye/şiir yazması istenebilir
- Halüsinasyon görüngüsü gözlemlenebilir
- Gökyüzünün neden mavi olduğu gibi temel sorulara yanıt verebilir
- Eğitim sonuçları ve çeşitli performans metrikleri report.md dosyasına kaydediliyor
Eğitim sonuç raporu
- report.md dosyası, eğitim çalıştırmasının "karne"sini içeriyor
- Çeşitli değerlendirme göstergeleri ve metrikler sunuluyor
- Nihai özet tabloda BASE, MID, SFT ve RL aşamalarına göre performans gösteriliyor
- Kod tabanı istatistikleri
- Karakter sayısı: 333.989
- Satır sayısı: 8.304
- Dosya sayısı: 44
- Token sayısı (yaklaşık): 83.497
- Bağımlılıklar (uv.lock satır sayısı): 2.004
- Benchmark performansı örnekleri
- CORE: 0.2219 (BASE)
- ARC-Challenge: 0.2875 (MID), 0.2807 (SFT)
- GSM8K: 0.0250 (MID), 0.0455 (SFT), 0.0758 (RL)
- HumanEval: 0.0671 (MID), 0.0854 (SFT)
- Toplam süre: 3 saat 51 dakika
- Modelin performansı ChatGPT'ye kıyasla daha düşük olsa da, düşük bütçeli LLM geliştirme deneyimi öne çıkarılıyor
Daha büyük modeller (Bigger Models)
- 100 dolarla yüksek performanslı bir ChatGPT klonu eğitmek mümkün değil; gerçek LLM'ler milyonlarca dolarlık sermaye harcamalarıyla biliniyor
- Dikkat çeken iki ek ölçek daha var
- Yaklaşık 300 dolarlık d26 modeli (depth=26): yaklaşık 12 saat eğitim, GPT-2 CORE puanını az farkla aşıyor
- 1000 dolarlık katman: yaklaşık 41,6 saat sürüyor, temiz bir yuvarlak sayı
- d26 modelini eğitmek için speedrun.sh üzerinde yapılacak değişiklikler
- Daha fazla veri shard'ı indirmek gerekiyor
- Token sayısını, parametre sayısını 20 ile çarparak hesaplayın
- Karakter sayısını 4.8 ile çarparak hesaplayın
- Shard sayısını 250 milyonla bölerek hesaplayın (yaklaşık 450 adet gerekiyor)
- OOM'u önlemek için --depth=26 seçeneğini kullanın ve device_batch_size değerini 32'den 16'ya yarıya indirin
- Midtraining aşamasında da aynı device_batch_size değerini kullanmak gerekiyor
Hesaplama ortamı gereksinimleri
- 8XA100 GPU düğümünde de çalışabiliyor ancak biraz daha yavaş
- Tek GPU üzerinde de çalışabiliyor
- torchrun kullanılmazsa neredeyse aynı sonuçlar üretiliyor
- Otomatik olarak gradient accumulation moduna geçiyor
- Süre yaklaşık 8 kat uzuyor
- 80GB'tan az VRAM'e sahip GPU'larda hyperparameter ayarı gerekiyor
- Bellek kazanmak için --device_batch_size değerini 32'den (varsayılan) 16, 8, 4, 2, 1 seviyelerine düşürün
- 1'in altına inmek isterseniz daha yaratıcı bir yaklaşım gerekir
- Vanilla PyTorch tabanlı olduğu için xpu, mps gibi çeşitli ortamları da destekleyebilir
- Varsayılan olarak sunulmuyor, bu yüzden küçük değişiklikler gerekebilir
Kullanışlılık ve erişilebilirlik
- nanochat'in en büyük avantajı, tüm dosyaları tek seferde paketleyip başka LLM'lere, belge arama servislerine vb. kolayca soru sorabilmeniz
- files-to-prompt utility kullanım örneği
- py, md, rs, html, toml, sh dosyaları dahil
- rustbpe/target klasörü hariç
- cxml çıktı biçimi seçili
- Yaklaşık 330KB (yaklaşık 100 bin token'ın altında), 45 dosya ve 8 bin satırlık kod olarak paketlenebiliyor
- DeepWiki kullanımı öneriliyor
- Depoyla ilgili soru sormak için GitHub URL'sindeki github.com kısmını deepwiki.com ile değiştirin
- Devin/Cognition tarafından sağlanıyor
Katkı ve projenin yönü
- nanochat henüz tamamlanmış bir proje değil
- Amaç, 1000 doların altındaki bütçelerle uçtan uca çalıştırılabilen mikro modellerin en ileri düzeyini geliştirmek
- Erişilebilirlik yalnızca maliyet değil, bilişsel karmaşıklığı da kapsıyor
- Devasa config nesneleri, model factory'leri veya if-then-else canavarı kodlar yok
- Baştan sona yapılandırılabilir bir LLM "framework"ü olmayı hedeflemiyor
- Tekil, tutarlı, minimal, okunabilir, hacklenebilir ve mümkün olduğunca kolay fork edilebilir bir "güçlü baseline" kod tabanı
- Baştan sona çalışarak somut bir ChatGPT klonu ve bir karne üretmek üzere tasarlanmış
1 yorum
Hacker News görüşü
İlginç bir yapay zeka kodlama aracı kullanım deneyimi paylaşımı
Kodun ne kadarını gerçekten kendisinin yazdığını merak edip Karpathy'ye sormuştum
Karpathy: Soru için teşekkürler, aslında kodun büyük kısmını bizzat kendim yazdım (
tabotomatik tamamlama kullandım)claude/codexajanlarını birkaç kez denedim ama isabet oranları düşük olduğu için pek yardımcı olmadılarMuhtemelen bunun nedeni, yaptığım reposunun veri dağılımından fazla uzak olması olabilir
Orijinal konuşma bağlantısı
"Repo veri dağılımından fazla uzak" sözü, yapay zeka modellerinin neden bana çoğu zaman yardımcı olmadığını açıklıyor
Yaptığım her şey fazla kendine özgü olduğu için dağılımdan uzak kalıyor
Karpathy gibi güvenilir birinin bunu söylemesi sevindirici
AGI'nin yakında geleceğini düşünenlerin beklentilerini biraz düşürmesi iyi olabilir
Ben de Claude Code'u seviyorum
Düzenli olarak web kodu yazmam gereken zamanlar oluyor ve web tarafında eğitim verisi kapsamı çok iyi olduğu için Claude benden çok daha iyi bir web geliştiricisi
Ama otomasyon aracımın algoritmik çekirdeğine inmek istediğimde, Claude'un kullanabileceği şeyler azalıyor ve hata yapma oranı artıyor
Yine de genel toplamda artı yönde olduğu için memnuniyetle para verip kullanıyorum
Sadece bir web geliştirme yardımcısı olarak kalsa bile büyük fayda
Bunun aslında doğal bir durum olduğunu düşünüyorum
Burada yeni ve özgün biçimde kod yazılan bir durum var
Birçok kişi Karpathy'nin yanıtını eleştiriyor ama aslında onun
claude/codexdenemiş olması, geçmişte bu araçların gerçekten faydalı olduğuna da işaret ediyorKarpathy tweet'inin başka bir mirror bağlantısı burada
nanochat'inmodded-nanoGPT'den ilham almış olması etkileyiciSoy ağacı Karpathy'nin
nano-GPTsi → Keller Jordan'ınmodded-nanoGPTsi (modeli hızlı eğiten sürüm) →NanoChatşeklindemodded-nanoGPTözellikle küçük GPT modellerini inanılmaz hızlı eğitmesiyle dikkat çekiyorÖzellikle
AdamWyerine lineer katmanlardaMuon optimizer'ı (yazarın kendi geliştirdiği) kullanıyormodded-nanoGPT, Muon optimizer tanıtımıMuon, Keller Jordan'ın bu hızlı eğitim yarışması için yaptığı optimizer ve başkalarının iyileştirmeleri de eklenmiş
Henüz bir yıl bile olmadan model eğitiminde yaygın biçimde kullanılan bir SOTA haline geldi
8xH100 ile tek bir inference düğümü çalıştırmaları oldukça çarpıcı
Gerçek üretim ortamındaki frontier LLM'ler de bu ölçekte mi çalışıyor, yoksa daha fazla VRAM / hesaplama gücü mü tüketiyor merak ediyorum
Saatte yaklaşık $8 ve istek başına 5 saniye sürdüğünü varsayarsak kabaca 700 kadar isteği karşılayabilir
Yani istek başına yaklaşık 1 sent ediyor
Hesabımda bir hata olup olmadığını merak ediyorum
Eğitim şu anda da gerçekten devam ediyor (20 dakika önce başladı)
Canlı loglar açık
4 saat sonra model tamamlandığında herkesin inference testi yapabilmesi için paylaşılacak
Tamamlanan modeli Hugging Face'e yüklediler
Karpathy kadar iyi sonuç alamadım (seed şanssızlığı mıydı acaba?)
Yine de denemesi eğlenceli
Örneğin "Bir köpeğin kaç bacağı vardır?" diye sordum
Asistan: "Bu gerçekten ilginç bir soru ve yüzyıllardır köpek severler arasında tartışılan bir konu. Tek bir 'doğru cevap' yok (...)" diye yanıt verdi
İlk grafiğin yanındaki yorumda
"İlerlemenin ana ölçütü. Bits per byte, Karpathy'nin dediği gibi 'normal cross-entropy loss'tan çok daha iyi bir metriktir. Loss'u her token için bayt sayısına göre normalize eder, böylece tokenizer'dan bağımsız karşılaştırma yapılabilir.'"
Bu o kadar açık bir açıklama ki,
tinystoriesüzerinde tokenizer denemelerimi yaparken bunu düşünmemiş olmam biraz utandırdıTokenizer'ımın gerçekte ne kadar iyi olduğunu yeniden analiz etmek istiyorum
Bu repoyu W&B ile eğitirken nasıl çalıştırılacağına dair kısa bir
howtoolsa güzel olurduDaha önce hiç model eğitimi akışı yaşamamış bir programcı için bunu adım adım paylaşabilir misiniz merak ediyorum
Eğlenceli!
Karpathy'nin Shakespeare üreticisi,
ollamadan sonra denediğim ilk proje olmuştuAmacım LLM'lerin nasıl çalıştığını anlamaktı
Geçen haftadan beri LLM'lere gömülmüş durumdayım ve sıfırdan, iki backend'li bir eğitim/çıkarım sistemi yapıyorum
JAXtabanlı)wgpu-pytabanlı)rocm/pytorchbana zahmetli geldiği için hiç sıcak bakmıyorumVulkangüzel.llama-cpp'de de o şekilde kullanılıyorGeçen hafta hem CPU hem GPU backend'lerini çalışır hale getirdim ve GPU backend'inde bir bug olduğu için onu düzeltmeye odaklandım
WGSLkodunu refactor ettim ve verimliliği artırdımBu süreçte LLM'leri yoğun biçimde kullandım ve şaşırtıcı derecede büyük bir dönüm noktası oldu
Refactor prompt'larıyla adım adım hataları giderip sonunda
astral tyile type check'ten geçen kod üretebildimpytorch'a mı sıcak bakmıyorsun?Bundan daha verimsiz bir seçim zor bulunur gibi
Bu hafta sonu
nanoGPT'yi (bağlantı) denedimEpey eski bir proje ama kendi küçük Shakespeare GPT'ni oluşturup eğitmek için harika bir uygulama
Yaklaşık 0.8M parametreyle CPU'da çalıştırdım
Çıktı aşağı yukarı beklendiği kadar "pek iyi değil"
Yine de insana büyü hissi veriyor
Derin öğrenme uzmanı olmayan, sadece kurcalamayı ve bir şeyler hack'lemeyi seven biri için mükemmel bir giriş noktası
Hafta sonu
nanoGPTdeneyimimi hâlâ bloga dökebilmiş değilim... bitirebilseydim buraya bırakırdımKüçük ölçekte iyi ML araştırmalarının doğrulanabildiğini göstermesi açısından faydalı bir alıştırma
Bu yeni örnek daha gelişmiş; instruction following, tool use SFT ve RLVR'yi de kapsıyor
Bu sayede daha kullanışlı bir baseline ortaya çıkıyor
Shakespeare kodunu biraz ayarlayıp farklı veriyle eğitirsen Magic The Gathering commander deste üretimi epey iyi çalışıyor
"chief LLM whisperer Alec Radford'dan tavsiye aldı"
Eğer Alec ile Andrej'in bir podcast'i çıkarsa dünyayı sallayabilir
GPT-1'in ihtişamlı günlerinden şimdi 4 saatte GPT-3 düzeyine gelmeye kadar
Eureka Labs: Github bağlantısı
Andrej gerçekten inanılmaz üretken ve hayranlık uyandıran biri
Onun işlerini takip etmek başlı başına olağanüstü bir deneyim
İnsanlığa en büyük katkıyı yapmanın yolunun
ne kadar çok insana ne kadar derin yardım ettiğinin çarpımı olduğunu hep düşünmüşümdür
Karpathy'nin yaptığı open source işler bu anlamda en yüksek kaldıraçlı yaklaşımlardan biri
Bugünün dünyası da open source projelerin üzerine kurulu
Dünyanın her yerinden insanların ücretsiz kodlama öğrenip yazılım üretebilmesini sağlayan özgürlük sayesinde
Umarım AI/LLM alanı da bu olumlu yönü izler
Yazılımdaki bu ücretsiz/paylaşıma dayalı geleneği gerçekten seviyorum
Ama LLM'lerde aşırı yüksek eğitim maliyetleri ve güçlü donanım gereksinimi yüzünden bunu sürdürmek zor olabilir gibi geliyor
İleride yazılım geliştirme de LLM barındırıcılarına "kira" ödenen bir yapıya dönebilir
On-prem (yerel) inference ortamını yeniden herkes için erişilebilir kılacak bir yol bulunabilir
Ama şimdilik yüksek eğitim maliyetleri yüzünden tablo belirsiz görünüyor
Ayrıca LLM bağımlılığı arttıkça
programlamaya yeni başlayanlar için hazırlanan öğretici gibi "elle üretilmiş" içeriklerin zamanla azalmasından endişe ediyorum
(Biraz uzun ama hepsi daha iyi bir dünya istemekten geliyor)
Bu bakış açısı, baskın "AI karşıtı" duygudan biraz farklı
Fikri mülkiyet denen kavram, insanlığa doğrudan katkıdan çok bilginin mülkiyetinin belirli kişilerde birikmesi ve sonra tüm insanlığa kiralanması yapısına benziyor
Ama elbette tek tek üreticilerin geçimlerini sürdürebileceği bir ortam da mutlaka gerekli
Sadece Karpathy'nin yaptığı işler değil, binlerce YouTube üreticisinin de kendi alanlarında topluma büyük katkı sunduğunu düşünüyorum
Yine de birçok kişinin sponsorluğa dayanmak zorunda olması biraz buruk
Patreon var ama o da ideal değil
Tüm bu çabaların topluma büyük katkı sunma biçimleri olduğu konusunda hemfikirim
Kısa süre önce Daily Show'da Jon Stewart, AI eğitimini insanlığın bilgisinin strip mining'i olarak tanımladı
AI eğitimi bazen tek taraflı biçimde hırsızlık gibi gösteriliyor ama gerçekte çok çeşitli görüşler var
Bu gidişat sonunda aşırı kapitalist bilgi sahipliği yapısını daha da pekiştirip
fikirlerin mülkiyetini giderek daha az kişinin elinde toplayabilir
Bu durum genel olarak dünyaya pek fayda sağlamaz, sadece bazı grupların işine yarar
Fikri mülkiyet ticareti de zamanla daha az elde yoğunlaşma eğilimi gösteriyor
Modern topluma uygun tartışmalara ve yeni yorumlara gerçekten ihtiyaç olduğunu düşünüyorum
Sürekli "yukarıdakiler engeller, tartışmanın anlamı yok" şeklindeki yenilgici tavrın tartışmayı boğması üzücü
Daha iyi çözümlerin nasıl ortaya çıkabileceğini özgürce tartışmak önemli
Onun ANN/LLM from scratch video serisini sık sık öneriyorum
Dersler çok açık ve kodlama stili pythonic, özlü ama okunması kolay
(
pytorchvektörizasyon kısımları karmaşık ama o alan zaten zor)Videoları izlerken sadece içerik değil, stil de öğreniliyor; bu da herkes için büyük fayda
Sahip olduğum tüm psikoloji kitapları, materyaller, raporlar ve makalelerle bir modeli eğitip
ihtiyaç duyduğumda özelleşmiş sorular için 1xH100 düğümünde (bağlantı) inference yaptırabilir miyim diye merak ediyorum
Teknik olarak yapılabilir ama performans son derece kötü olur
Böyle bir durumda önceden eğitilmiş küçük bir modeli alıp kendi verinle fine-tune etmek
ya da bir RAG iş akışı (Retrieval Augmented Generation), veya ikisinin birleşimi çok daha iyi olur
Yapabilirsin
Ama genel amaçlı bir modeli kullanıp, belgelerini çalışma bağlamına eklemenin çeşitli yolları (ör. RAG, Apple'ın hierarchical memories yaklaşımı gibi, makale bağlantısı) daha iyi sonuç verebilir
Yapılabilir ama veri kümen zaten çok küçük olacağı için, önceden eğitilmiş model + fine-tuning ya da küçük model + RAG yaklaşımından çok daha kötü performans verir
Yapamazsın
Bu proje gerçekten ilham verici!
Gerçek prompt performansı örneklerini veya test sonuçlarını görmek güzel olurdu
burada gerçek prompt ekran görüntülerinin olduğu belirtilmiş