LLM·3 dk okuma·

Tiny Hackable CUDA: C ve CUDA ile Sıfırdan Dil Modeli Geliştirmek

Paylaş
LLMEdumints Blog

1. Byte Tabanlı Modelleme ve Esneklik

Bu proje, transformatör mimarisi kullanarak bir öz-bağlanımlı dizi modeli uygular. En dikkat çekici yönü, veriyi doğrudan 8-bitlik byte'lar seviyesinde işlemesidir. Bu durum, modelin metin dışında DNA dizilimleri, sıkıştırılmış dosyalar, görüntüler, ses, video veya çalıştırılabilir ikili dosyalar gibi her türlü veri akışını modellemesini sağlar. Yazılım Geliştirme ve Öğrenme Çıkarımı: Geliştiriciler için kelime tabanlı tokenizasyon karmaşasından kaçınarak doğrudan ham byte'lar ile çalışmak, veri ön işleme aşamasını inanılmaz derecede basitleştirir. Bu yaklaşım, dil modellerinin sadece metin değil, her türlü veri dizisini modelleyebileceğini kavramak açısından öğreticidir.

2. Token Gömme (Embedding) Aşaması

Modelin mimarisi, her bir byte değerini sürekli bir vektör temsiline dönüştüren bir token gömme katmanı ile başlar. Yazılım Geliştirme ve Öğrenme Çıkarımı: Öğrenme sürecinde, ayrık kategorik verilerin sürekli vektör uzayına nasıl aktarıldığını ve gradyan akışının bu katmana kadar nasıl geriye yayıldığını anlamak için harika bir referanstır. Sıfırdan bellek tahsisi ve embedding matrisi güncellemelerini C koduyla incelemek, kütüphane soyutlamalarının arkasını gösterir.

3. Çok Katmanlı Transformatör Yapısı

Modelin kalbini, gömülü dizileri işleyen çok katmanlı bir transformatör oluşturur. Her transformatör katmanı nedensel öz-dikkat ve ileri beslemeli ağdan oluşur.

  • Nedensel Dikkat: Tahminlerin yalnızca önceki pozisyonlara bağlı olmasını garantiler. Projeksiyonlar hesaplanır ve göreli pozisyonları kodlamak için dönel pozisyonel kodlama (RoPE) uygulanır.
  • İleri Beslemeli Ağ: Swish aktivasyon fonksiyonu içeren iki lineer dönüşüm uygulanır. Her iki bileşen de artık bağlantılarla sarılmıştır. Yazılım Geliştirme ve Öğrenme Çıkarımı: RoPE ve Swish gibi modern transformatör bileşenlerinin C/CUDA üzerinde sıfırdan nasıl kodlandığını görmek, PyTorch gibi üst düzey çerçevelerin arkasındaki matematiksel mekanizmayı kavramak için eşsiz bir fırsattır. Özellikle bellek yönetimi ve işaretçi aritmetiği konularında derinlik kazandırır.

4. Lineer Projeksiyon ve Kayıp Fonksiyonu

Transformatör katmanlarından geçtikten sonra, gizli durumlar 256 olası byte değerine eşlenir. Bu logits değerleri softmax ile olasılıklara dönüştürülerek çapraz entropi kaybı ile eğitilir. Yazılım Geliştirme ve Öğrenme Çıkarımı: Çıkış katmanının sabit 256 boyutunda olması, hesaplama maliyetini düşürür ve bellek yönetimini optimize eder. Çok sınıflı sınıflandırma ve olasılık hesaplamalarının ham CUDA çekirdekleri ile nasıl yapıldığını öğretir.

5. AdamW Optimizasyonu

Eğitim sürecinde, gradyan güncellemelerini ağırlık sönümlemesinden ayıran AdamW optimizasyonu kullanılmıştır. L2 düzenlileştirmesi görevi görerek aşırı öğrenmeyi engeller. Yazılım Geliştirme ve Öğrenme Çıkarımı: Ağır kütüphaneler yerine saf CUDA üzerinde momentum ve varyans güncellemelerinin nasıl paralelleştirildiğini incelemek, CUDA bellek erişim modellerini ve paylaşımlı bellek kullanımını anlamayı kolaylaştırır.

6. CUDA ve BLAS ile Yüksek Performans

Matris işlemleri için BLAS kütüphaneleri ve CUDA çekirdekleri kullanılmıştır. FP16 kullanımı donanım verimliliğini maksimize eder. Yazılım Geliştirme ve Öğrenme Çıkarımı: Derin öğrenme mühendisliğinde donanım seviyesinde optimizasyon yaparken OpenBLAS ve CUDA'nın gücünü birleştirmek, kütüphane bağımlılıklarını azaltarak performansı artırmanın en etkili yoludur.

7. Kurulum ve Çalıştırma

Ubuntu üzerinde projeyi derlemek ve eğitmek için aşağıdaki komutlar kullanılabilir:

sudo apt update && sudo apt install -y clang make time libopenblas-dev nvidia-cuda-toolkit git curl
git clone https://github.com/markusheimerl/gpt && cd gpt/
make data
make run -j 6
make infer

Orijinal makaleye buradan ulaşabilirsiniz.

Paylaş

Bu konuyu daha derinlemesine öğrenmek ister misin?

Edumints'teki ücretsiz kursları incele ve bugün başla.

Kurslara Göz At →