Model Nedir, Nasıl Çalışır?
Mimari kod, ağırlık dosyası, GPU ve bir cümlenin yolu.
Önceki yazı şunu bıraktı: yapay zeka JVM değildir. Bir tarif (kod) ile bir sayı dosyası birlikte çalışır. Bu yazı o ikilinin çalışma anını, sıfırdan, bir cümle üzerinden yürür.
Model, pratikte bu ikilinin adıdır. “Modeli çalıştır” demek: tarifi işle, dosyadaki sayıları bellekten oku, girdi için aritmetik yap, çıktı ver. İçeride bir kişi yoktur. Yeni bir işlemci mimarisi de yoktur. Aynı makinede, çoğunlukla GPU’da, bildiğin çarpma ve toplama vardır.
İki parça, iki ömür
Mimari, fonksiyon gibidir. Girdi alır, sabit bir sırayla işlem yapar, çıktı üretir. Bu fonksiyonun kaynağı Git’tedir. Derlenir veya yorumlanır. Değiştirmek için kodu değiştirirsin.
Ağırlıklar, o fonksiyonun kapadığı dev bir dizi gibidir. const W: Float32Array. Milyonlarca veya milyarlarca eleman. Kimse W[384221] = 0.017 yazmaz. Dosyadan read ile yüklenir. Değiştirmek için (eğitim hariç) dosyayı değiştirirsin.
Bir benzetme: oyun motoru kodu + kaplama dosyaları. Motoru derlersin; dünyanın görünüşü doku dosyalarındadır. Modelde “görünüş”, ağırlıklardaki sayılardır.
Süreç açılınca tipik sıra:
- Mimari kodu yüklenir (Python, C++, Rust — fark etmez).
- Ağırlık dosyası RAM’e veya GPU bellekine kopyalanır. Birkaç gigabayt yaygındır.
- Süreç istek bekler.
- Her istekte girdi sayılara çevrilir, tarif bir kez (veya token token) koşar, çıktı geri çevrilir.
Adım 2 dakikalar sürebilir. Adım 4 milisaniye veya saniye. Bu yüzden üretimde model bir kez yüklenir, binlerce istek aynı belleği paylaşır. Her sohbette dosyayı diskten okumak yok.
Bir cümle neye dönüşür?
Kullanıcı: merhaba.
Metin, modelin içine string olarak girmez. Önce bir sözlük (tokenizer) kelime parçalarına böler, her parçaya bir tam sayı verir. merhaba belki tek id, belki mer + haba. Bu id’ler, dev bir tabloda satır numarasıdır. Satır, örneğin 4096 ondalık sayıdan oluşan bir listedir. “Kelimenin anlamı” diye bir nesne yoktur; tablodaki o satır vardır.
Bundan sonra mimari, bu listeleri ağırlıklarla tekrar tekrar çarpar. Çarpma, a[i] * b[i]’lerin toplamıdır; lineer cebir kitabı şart değildir: iç içe üç for. GPU, aynı çarpmadan milyonlarcasını bir anda yapabildiği için kullanılır. CPU da yapar; yavaştır. GPU “zekâ çipi” değil, geniş bir hesap makinesidir.
Sonda binlerce sayılık bir liste çıkar: sözlükteki her parça için bir skor. En yüksek skorlar “daha olası sonraki parça”dır. Bir parça seçilir, yazıya çevrilir, bağlama eklenir, döngü bir sonraki parça için tekrarlar. merhaba → ! veya nasılsın böyle uzar.
Bu döngünün adı çıkarımdır (inference). Ağırlıklar bu sırada değişmez. W salt okunurdur. Senin mesajın modeli “öğretmez”. Yalnızca o anki girdi dizisini değiştirir. Sohbet kapanınca o dizi gider; dosya aynı kalır.
Araçlar ne işe yarar?
- PyTorch / JAX: eğitim ve çıkarım için tensör (çok boyutlu dizi) kütüphanesi. NumPy’nin GPU’lu, türev alan hali gibi düşün.
- llama.cpp, vLLM, TensorRT, ONNX Runtime: çıkarımı hızlandıran programlar. JVM değil; ağırlığı yükleyip çarpmayı koştururlar.
- CUDA / Metal: GPU’ya makine kodu basan katman.
nvccbir derleyicidir,javac’in GPU karşılığıdır; model dosyasını derlemez. - OpenAI / Groq / Together API: HTTP. Senin makinen ağırlık görmez. Karşı taraf 4. adımı çalıştırır.
Hiçbiri “yapay zeka işletim sistemi” değildir. Hepsi, bildiğin süreç + bellek + dosya modelinin üzerine binmiş araçtır.
Ne bitti, ne bitmedi?
Bitti: modelin bir ruh, yeni bir VM veya derlenmiş zekâ olmadığı. Kaldı: o milyarlarca sayı ilk başta nasıl doldu? Cevap eğitimdir; javac değildir. Sonraki yazı odur.
Alıştırma
Bir sohbet ekranında “öğrendi” sandığın bir anı not edin. Süreç kapanıp açılınca aynı şeyi biliyor mu? Bilmiyorsa o an çıkarımda bağlamdı, ağırlık dosyası değildi.