Kimi K3 belleğe sığmıyor: 1,56 TB'lık checkpoint bir USB harici diskte duruyor, 93 katmanın her biri sırayla diskten akıyor, RAM'de aynı anda tek katman kalıyor. Eğitilen tek şey 590 MB'lık LoRA adaptörü; modelin 2,78 trilyon parametresine dokunulmuyor. Döngünün doğru çalıştığını şöyle sınadık: aynı diziyi tekrar tekrar verdik ve loss her turda düştü.
Loss yalnız cevap token'larında ölçülüyor; istem token'ları maskeli. İki dizi sırayla veriliyor, bu yüzden B'nin ilk ölçümü A üzerindeki ilk güncellemeden sonra alınmış.
Sorunun tamamı şu oranda: modelin ağırlıkları makinenin belleğinden iki yüz kat büyük. Çözüm onu sıkıştırmak değil, hiç durdurmadan akıtmak.
Ölçek logaritmik. Uzman ağırlıkları MXFP4 olarak diskte duruyor; her uzman 17,5 MB.
Bir eğitim adımı 93 katmanın ileri süpürmesi, sonra aynı 93 katmanın geri süpürmesidir. Her çubuk bir katman: ağırlıkları diskten okunur, hesap yapılır, bellekten atılır. Katman sınırındaki ara sonuçlar NVMe'deki halka tampona yazılır.
93 + 93 katman: ileri geçişte katman başına 123 saniye, geri geçişte 147 saniye (asıl koşunun 1. adımında ölçüldü; o adımın kendi toplamı 6 sa 59 dk, ama koşunun geneli için geçerli sayı ilk üç adımda ölçülen yaklaşık 7,4 saatlik tempodur). Süreyi belirleyen hesap değil okuma hızı: süreç ilk sekiz saatte 3,22 TB okudu, saniyede 110 MB.
| Adım | Dizi | Loss | Perplexity | İleri geçiş bitti |
|---|---|---|---|---|
| 1 | A | 0,909 | 2,48 | 8 Eyl 12:26 |
| 2 | B | 0,521 | 1,68 | 8 Eyl 18:13 |
| 3 | A | 0,500 | 1,65 | 8 Eyl 23:42 |
| 4 | B | 0,193 | 1,21 | 9 Eyl 05:28 |
| 5 | A | 0,157 | 1,17 | 9 Eyl 11:03 |
Beş Türkçe talimat örneği iki pakete sıkıştırıldı: toplam 1082 token, 528'i eğitilen cevap token'ı; dizi uzunluğu sınırı 1024, lr 1e-3, warmup 2. Son sütundaki damga, adımın ileri geçişinin bittiği — yani loss'un yazıldığı — andır; geri geçiş o damgadan sonra yaklaşık üç saat daha sürer, adım orada bitmez. İki ardışık damganın farkı yine de tam bir adımdır, çünkü aynı kayma iki uçta da var: ileri bitişinden ileri bitişine. Ölçülen dört aralık 5,78, 5,49, 5,77 ve 5,58 saat — yani 5,5–5,8 saat, ortalama 5,65. Süreç 27 saat boyunca 4,5–4,7 GB bellekte kaldı; bu bir tepe değeri değil, projede kaydedilen en yüksek değer daha eski bir 256 token'lık adımdaki 6,24 GB. Bu tempo yalnız bu koşuya ait: asıl koşunun dolu 1024 token'lık dizileri daha çok uzman okuduğu için orada ilk üç adımda ölçülen tempo yaklaşık 7,4 saat.
İleri geçiş → geri geçiş → AdamW → checkpoint döngüsü uçtan uca doğru çalışıyor. Gradyanın yönü doğru; sonlu farkla katman katman doğrulanan geri geçişin uçtan uca teyidi bu. 2,78 trilyon parametreli bir modelin adaptörü bu makinede hareket ediyor.
Genelleme. Beş örnek üzerinde loss'un düşmesi ezberdir ve bu testte istenen de tam olarak budur. Modelin Türkçesinin iyileşip iyileşmediği bu grafikten okunamaz.
0,455 → ≤0,441 inecek, İngilizce Wikipedia dilimi
0,194 → ≤0,198'i geçmeyecek. Sonuç olumsuz çıkarsa da olduğu gibi yazılacak.
9 Eylül 12:53'te asıl koşu başladı: 400 Türkçe talimat örneği, en çok 1024 token'lık 154
paket dizi, 100 adım, lr 5e-4 kosinüs. İlk üç adımın ölçülen temposu yaklaşık 7,4 saat (aralıklar
7,26 ve 7,62 saat; bu iki aralık koşmakta olan kayıttan okundu — depodaki
evidence/ anlık görüntüsü asıl koşunun 1. adımında bitiyor), yani yaklaşık
31 gün: 9-11 Ekim civarında tamamlanıyor. Bir systemd zamanlayıcısı 15 dakikada bir
ilerlemeyi telefona gönderiyor; süreç ölürse son checkpoint'ten devam ettiriyor, USB disk
düşerse yeniden bağlıyor.
Yol boyunca çıkan yönlendirme ölçümleri ayrı bir hikâye: uzman seçimi dilden çok alana duyarlı, uzman yerelliği tek token'da gerçek ama eğitim batch'inde çöküyor, Türkçenin maliyeti yönlendiricide değil tokenizer'da.