1 puan yazan GN⁺ 1 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • Train Your Own LLM From Scratch, GPT eğitim hattının tüm parçalarını bizzat yazarak her bileşenin ne yaptığını ve neden gerekli olduğunu anlamaya odaklanan uygulamalı bir atölye
  • Amaç, dizüstü bilgisayarda sıfırdan eğitilmiş bir GPT modeliyle Shakespeare tarzı metin üretmek; bunun tek bir atölye oturumunda tamamlanabilmesi için model yaklaşık 10M parametre ölçeğine indirgenmiş
  • nanoGPT GPT-2'nin 124M parametreli sürümünü yeniden üretmeyi hedeflerken, bu proje yalnızca özü bırakıp dizüstü bilgisayarda 1 saatten kısa sürede eğitilebilecek şekilde tasarlanmış
  • Elle yazılacak bileşenler arasında Tokenizer, Transformer tabanlı model mimarisi, eğitim döngüsü ve metin üretimi yer alıyor; sonunda model.py, train.py, generate.py dosyalarını doğrudan kendiniz tamamlıyorsunuz
  • Ön bilgi olarak Python kodu okumaya aşina olmak yeterli; makine öğrenimi deneyimi gerekmiyor ve Python 3.12+ gerekli
  • Çalışma ortamı olarak Mac, Linux ve Windows üzerinde dizüstü ya da masaüstü sistemler destekleniyor; eğitim için Apple Silicon GPU'da MPS, NVIDIA GPU'da CUDA veya CPU otomatik olarak kullanılıyor
  • Yerel kurulumda uv ile uv sync çalıştırılması öneriliyor; yerel ortam yoksa dosyalar Google Colab'a yüklenip !python train.py ile çalıştırılabiliyor
  • Atölye; karakter düzeyinde tokenizer, embedding, self-attention, LayerNorm, MLP blokları, kayıp fonksiyonu, AdamW, gradient clipping, öğrenme oranı zamanlaması, temperature ve top-k sampling konularını sırayla ele alıyor
  • Temel mimari, giriş metnini karakter düzeyinde token ID değerlerine dönüştürüyor; ardından token embedding ve position embedding üzerinden birden fazla Transformer bloğundan geçirip bir sonraki token olasılığı için logits üretiyor
  • Sunulan model ayarları; Tiny için yaklaşık 0.5M parametre ve M3 Pro üzerinde yaklaşık 5 dakika, Small için yaklaşık 4M ve yaklaşık 20 dakika, varsayılan Medium için yaklaşık 10M ve yaklaşık 45 dakikalık eğitim süresi olarak veriliyor
  • Tüm ayarlar vocab_size=65 ile karakter düzeyinde tokenization ve block_size=256 kullanıyor; bu yapı Shakespeare benzeri yaklaşık 1MB'lık küçük veri kümelerine uygun
  • BPE tokenization, GPT-2'nin 50,257 vocab'unda olduğu gibi büyük bir sözlüğe sahip olduğundan küçük veri kümelerinde çoğu token bigram'i fazla seyrek kalıyor ve örüntü öğrenmeyi zorlaştırıyor; daha büyük veri kümelerinde ise BPE'ye geçiş ele alınıyor
  • Başlıca referanslar olarak nanoGPT, build-nanogpt video lecture, Karpathy's microgpt, nanochat, Attention Is All You Need (2017), GPT-2 paper (2019), TinyStories paper sunuluyor

1 yorum

 
GN⁺ 1 시간 전
Hacker News görüşleri
  • Bu materyal ilginizi çekiyorsa, Stanford'un CS336 dersini de şiddetle tavsiye ederim. Aynı müfredatı çok daha derin işliyor; ölçekleme yasaları gibi teorik sezgileri ve kernel optimizasyonu/profiling gibi sistem perspektiflerini de tanıtıyor.
    Tabii ödevleri bizzat yapmak gerekiyor: https://cs336.stanford.edu/

    • Dersleri nereden izleyebileceğimi bilmiyorum. Ders seçeneğini göremiyorum
  • Biraz da tanıtım yapayım; makine öğrenmesinin nasıl çalıştığını en temelden anlatan bir Jupyter notebook serisi var.
    https://github.com/nickyreinert/DeepLearning-with-PyTorch-fr...
    Ve elbette LLM'nin sıfırdan nasıl yapılacağını da ele alıyor.
    https://github.com/nickyreinert/basic-llm-with-pytorch/blob/...

  • Tam da Sebastian Raschka'nın depo/kitap/kursu olan Build a Large Language Model (From Scratch)'a yeni başladım. Hangi öğrenme materyalini kullanacağımı seçmek zorunda olmak belki de güzel bir derttir.
    [0] https://github.com/rasbt/LLMs-from-scratch
    [1] https://www.manning.com/books/build-a-large-language-model-f...
    [2] https://magazine.sebastianraschka.com/p/coding-llms-from-the...

    • O kitabı gerçekten çok keyifle okudum. Gerçek iç yapıyı anlamak ve tüm hesaplamaların çalışan örneklerini görmek isteyenler için iyi.
  • Doğduğum günden beri yapıyorum. Başlangıç zordu ama giderek daha iyiye gidiyor.

    • Aslında çoğunlukla fizik modelleri eğitiyordum; LLM de onun üstüne eklenmiş gibi.
  • fast.ai nispeten yeniyken bunu ULMFiT ile yapmıştım. Sanırım o zamanlar BERT en güncel state of the art modeldi ve yapı, temel modeli eğitip ardından bir head ile özelleştirmeye uygundu.
    Temel model için tüm Wikipedia'yı kullandım, ayrıca firehose üzerinden toplanmış birkaç GB'lık tweet de ekledim. Oyun geliştirme için kullanılan 20 bilgisayarlı bir labdan yararlanabiliyordum; sanırım kabaca GTX 2080 seviyesindeydiler. Tokenlaştırılmış Wikipedia'nın tek geçiş eğitimi yaklaşık yarım gün sürüyordu; bu yüzden her bilgisayarda farklı ayarlar çalıştırıp hiperparametre ayarı yapıyor, ertesi gün en iyi sonucu başlangıç noktası olarak alıyordum. Ertesi sabah işe gelip sonuçlara bakmak her zaman eğlenceliydi.
    Mühendislik korkunç ve doğaçlamaydı ama çok şey öğrendim. Sonuçlar idare ederdi ve tweet sınıflandırması yaptım, fakat bunu ciddiye almak için ne kadar çok GPU gücü ve ne kadar zor mühendislik problemi gerektiğine dair bir fikir edinmiş oldum. Üretimin potansiyelini tam kavrayamamıştım ama meraktan oluşturduğum tweetlere uzun süre gülmüştüm.

  • Bu, Andrej Karpathy'nin şu videosunun (https://youtu.be/kCc8FmEb1nY) neredeyse birebir yazıya dökülmüş hâli gibi görünüyor; ben mi yanlış görüyorum?

    • Sayfada nanoGPT ile ilişkisi açıklanıyor.
      "nanoGPT, GPT-2'yi (124 milyon parametre) yeniden üretmeyi hedefliyor ve çok daha fazlasını kapsıyor. Bu proje ise sadece temel noktalara odaklanıyor ve notebook üzerinde 1 saatten kısa sürede eğitilebilen yaklaşık 10 milyon parametreli bir modele küçültüyor..." gibi bir ifade var.
    • Evet, yanlış görmüşsün.
  • Bağlam eklemek gerekirse, kendisi MLX geliştiricilerinden biri ve yetkin bir makine öğrenmesi araştırmacısı.

    • Kaynağını merak ediyorum. Bu doğru görünmüyor.
  • "GPT eğitim hattının tüm parçalarını kendin yazarak her bileşenin ne yaptığını ve neden gerekli olduğunu anlayacağın uygulamalı bir atölye" deniyor ama bağımlılıklarda torch görünüyor; yani tensörler ve geri yayılım doğrudan uygulanmak yerine hazır kabul ediliyor gibi. Yine de buna gerçekten "sıfırdan" denebilir mi emin değilim.
    Benzer bir şeyi Rust ile yaptım ve yapay zeka desteği de aldım ama bağımlılık olmaması, yalnızca standart kütüphanenin kullanılması şartını koydum. Sonuç olarak tensör tasarımı, kernel kavramları, basit bir gradyan inişi optimizer'ı, elde yazılmış bir JSON parser, rayon benzeri CPU veri paralelliği soyutlamaları gibi çok daha fazla şeyi uygulamam gerekti. Hepsini birbirine bağlayıp çalıştırdığımda oldukça eğlenceliydi. Çok yavaştı ama çalışıyordu.

  • PyTorch kullanmaya artık "sıfırdan" denip denemeyeceğinden emin değilim. Standart kütüphaneden bile kaçınmak gibi uç bir şey söylemiyorum ama amaca tam uyan bir kütüphaneyi içeri aldığınız anda bu bana artık "sıfırdan" gibi gelmiyor.

    • Haklı bir nokta, ama makine öğrenmesi tarafındaki çoğu insan için PyTorch fiilen standart kütüphane sayılıyor.
  • Sanırım "sıfırdan LM eğitmek" demek daha doğru olurdu. Buna gerçekten "Large" denecek kadar büyük bir model yapacak makineye sahip olup olmayacakları şüpheli.

    • Normal limitli bir kredi kartınız varsa HuggingFace veya Mistral Forge gibi neo-cloud sağlayıcılarından yeterli kaynağı kiralayabilirsiniz.
      Buna değdiğini söylemiyorum ama eğitim için bizzat GPU satın almanız gerekmiyor.
    • Tek bir 3090 üzerinde bile 1,6 milyar parametreli bir modeli sıfırdan sona kadar eğitebilirsiniz. Bu da epey büyük bir model.
    • Bende de yarım terabayt RAM var! DDR4 ama sonuçta RAM.
      Bir de 48 işlemci çekirdeği var! AVX512 desteklemiyor ama yine de hesap yapabiliyor.
      LLM'yi yeterince eğitebilirim herhalde. Ya da en azından ailecek yapabiliriz... çocuğumun devralıp projeyi sürdürmesi gerekebilir.
      Ciddi konuşmak gerekirse, ya asıl noktayı kaçırıyorsun ya gereksiz yere kılı kırk yarıyorsun ya da yanılıyorsun. Bu iş kavramları öğrenmekle ilgili; geri kalanların çoğu ikincil.
      Kılı kırk yarma ya da yanılma açısından bakarsak, "large" language model için belgelenmiş temel ölçüt nedir? GPT-2 hem o zaman hem de bugün bir "large" language model olarak anılıyordu ve 1,5 milyar parametresi vardı. Günümüzde bu ölçekte bir modeli eğitebilecek tüketici GPU'ları kabaca 400 dolara bulunabiliyor.